diff mbox

[Resend] pciehp: always implement resume

Message ID 201209072328.30553.rjw@sisk.pl (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Rafael Wysocki Sept. 7, 2012, 9:28 p.m. UTC
From: Oliver Neukum <oliver@neukum.org>
Subject: pciehp: always implement resume

The driver by default ignores resume. On some laptops
that means that interrupts are not delivered after S3.
So card removals and insertions will not be handled. Requiring
a forced load isn't right.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
drivers/pci/hotplug/pciehp_core.c |   28 ++++++++++++++--------------
 drivers/pci/hotplug/pciehp_core.c |   28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Bjorn Helgaas Sept. 7, 2012, 11:28 p.m. UTC | #1
On Fri, Sep 7, 2012 at 2:28 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> From: Oliver Neukum <oliver@neukum.org>
> Subject: pciehp: always implement resume
>
> The driver by default ignores resume. On some laptops
> that means that interrupts are not delivered after S3.
> So card removals and insertions will not be handled. Requiring
> a forced load isn't right.
>
> Signed-off-by: Oliver Neukum <oneukum@suse.de>
> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>

I applied this (with fixed From: email address and slightly modified
changelog) to http://git.kernel.org/?p=linux/kernel/git/helgaas/pci.git;a=shortlog;h=refs/heads/pci/oliver-pciehp-resume
and will merge it to "next" after Fengguang's build/smoke tests.

Thanks!

Bjorn

> ---
> drivers/pci/hotplug/pciehp_core.c |   28 ++++++++++++++--------------
>  drivers/pci/hotplug/pciehp_core.c |   28 ++++++++++++++--------------
>  1 file changed, 14 insertions(+), 14 deletions(-)
>
> Index: linux/drivers/pci/hotplug/pciehp_core.c
> ===================================================================
> --- linux.orig/drivers/pci/hotplug/pciehp_core.c
> +++ linux/drivers/pci/hotplug/pciehp_core.c
> @@ -300,24 +300,24 @@ static int pciehp_suspend (struct pcie_d
>
>  static int pciehp_resume (struct pcie_device *dev)
>  {
> +       struct controller *ctrl;
> +       struct slot *slot;
> +       u8 status;
> +
>         dev_info(&dev->device, "%s ENTRY\n", __func__);
> -       if (pciehp_force) {
> -               struct controller *ctrl = get_service_data(dev);
> -               struct slot *slot;
> -               u8 status;
> +       ctrl = get_service_data(dev);
>
> -               /* reinitialize the chipset's event detection logic */
> -               pcie_enable_notification(ctrl);
> +       /* reinitialize the chipset's event detection logic */
> +       pcie_enable_notification(ctrl);
>
> -               slot = ctrl->slot;
> +       slot = ctrl->slot;
>
> -               /* Check if slot is occupied */
> -               pciehp_get_adapter_status(slot, &status);
> -               if (status)
> -                       pciehp_enable_slot(slot);
> -               else
> -                       pciehp_disable_slot(slot);
> -       }
> +       /* Check if slot is occupied */
> +       pciehp_get_adapter_status(slot, &status);
> +       if (status)
> +               pciehp_enable_slot(slot);
> +       else
> +               pciehp_disable_slot(slot);
>         return 0;
>  }
>  #endif /* PM */
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Sept. 7, 2012, 11:33 p.m. UTC | #2
+cc Mark & Kristen

Commit cd2fe83a815 by Mark added the code we're changing here, so this
is your chance to speak up if we're not doing the right thing :)

On Fri, Sep 7, 2012 at 4:28 PM, Bjorn Helgaas <bhelgaas@google.com> wrote:
> On Fri, Sep 7, 2012 at 2:28 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
>> From: Oliver Neukum <oliver@neukum.org>
>> Subject: pciehp: always implement resume
>>
>> The driver by default ignores resume. On some laptops
>> that means that interrupts are not delivered after S3.
>> So card removals and insertions will not be handled. Requiring
>> a forced load isn't right.
>>
>> Signed-off-by: Oliver Neukum <oneukum@suse.de>
>> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
>
> I applied this (with fixed From: email address and slightly modified
> changelog) to http://git.kernel.org/?p=linux/kernel/git/helgaas/pci.git;a=shortlog;h=refs/heads/pci/oliver-pciehp-resume
> and will merge it to "next" after Fengguang's build/smoke tests.
>
> Thanks!
>
> Bjorn
>
>> ---
>> drivers/pci/hotplug/pciehp_core.c |   28 ++++++++++++++--------------
>>  drivers/pci/hotplug/pciehp_core.c |   28 ++++++++++++++--------------
>>  1 file changed, 14 insertions(+), 14 deletions(-)
>>
>> Index: linux/drivers/pci/hotplug/pciehp_core.c
>> ===================================================================
>> --- linux.orig/drivers/pci/hotplug/pciehp_core.c
>> +++ linux/drivers/pci/hotplug/pciehp_core.c
>> @@ -300,24 +300,24 @@ static int pciehp_suspend (struct pcie_d
>>
>>  static int pciehp_resume (struct pcie_device *dev)
>>  {
>> +       struct controller *ctrl;
>> +       struct slot *slot;
>> +       u8 status;
>> +
>>         dev_info(&dev->device, "%s ENTRY\n", __func__);
>> -       if (pciehp_force) {
>> -               struct controller *ctrl = get_service_data(dev);
>> -               struct slot *slot;
>> -               u8 status;
>> +       ctrl = get_service_data(dev);
>>
>> -               /* reinitialize the chipset's event detection logic */
>> -               pcie_enable_notification(ctrl);
>> +       /* reinitialize the chipset's event detection logic */
>> +       pcie_enable_notification(ctrl);
>>
>> -               slot = ctrl->slot;
>> +       slot = ctrl->slot;
>>
>> -               /* Check if slot is occupied */
>> -               pciehp_get_adapter_status(slot, &status);
>> -               if (status)
>> -                       pciehp_enable_slot(slot);
>> -               else
>> -                       pciehp_disable_slot(slot);
>> -       }
>> +       /* Check if slot is occupied */
>> +       pciehp_get_adapter_status(slot, &status);
>> +       if (status)
>> +               pciehp_enable_slot(slot);
>> +       else
>> +               pciehp_disable_slot(slot);
>>         return 0;
>>  }
>>  #endif /* PM */
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas Sept. 8, 2012, 3:01 a.m. UTC | #3
[fix Kristen's email addr]

On Fri, Sep 7, 2012 at 5:33 PM, Bjorn Helgaas <bhelgaas@google.com> wrote:
> +cc Mark & Kristen
>
> Commit cd2fe83a815 by Mark added the code we're changing here, so this
> is your chance to speak up if we're not doing the right thing :)
>
> On Fri, Sep 7, 2012 at 4:28 PM, Bjorn Helgaas <bhelgaas@google.com> wrote:
>> On Fri, Sep 7, 2012 at 2:28 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
>>> From: Oliver Neukum <oliver@neukum.org>
>>> Subject: pciehp: always implement resume
>>>
>>> The driver by default ignores resume. On some laptops
>>> that means that interrupts are not delivered after S3.
>>> So card removals and insertions will not be handled. Requiring
>>> a forced load isn't right.
>>>
>>> Signed-off-by: Oliver Neukum <oneukum@suse.de>
>>> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
>>
>> I applied this (with fixed From: email address and slightly modified
>> changelog) to http://git.kernel.org/?p=linux/kernel/git/helgaas/pci.git;a=shortlog;h=refs/heads/pci/oliver-pciehp-resume
>> and will merge it to "next" after Fengguang's build/smoke tests.
>>
>> Thanks!
>>
>> Bjorn
>>
>>> ---
>>> drivers/pci/hotplug/pciehp_core.c |   28 ++++++++++++++--------------
>>>  drivers/pci/hotplug/pciehp_core.c |   28 ++++++++++++++--------------
>>>  1 file changed, 14 insertions(+), 14 deletions(-)
>>>
>>> Index: linux/drivers/pci/hotplug/pciehp_core.c
>>> ===================================================================
>>> --- linux.orig/drivers/pci/hotplug/pciehp_core.c
>>> +++ linux/drivers/pci/hotplug/pciehp_core.c
>>> @@ -300,24 +300,24 @@ static int pciehp_suspend (struct pcie_d
>>>
>>>  static int pciehp_resume (struct pcie_device *dev)
>>>  {
>>> +       struct controller *ctrl;
>>> +       struct slot *slot;
>>> +       u8 status;
>>> +
>>>         dev_info(&dev->device, "%s ENTRY\n", __func__);
>>> -       if (pciehp_force) {
>>> -               struct controller *ctrl = get_service_data(dev);
>>> -               struct slot *slot;
>>> -               u8 status;
>>> +       ctrl = get_service_data(dev);
>>>
>>> -               /* reinitialize the chipset's event detection logic */
>>> -               pcie_enable_notification(ctrl);
>>> +       /* reinitialize the chipset's event detection logic */
>>> +       pcie_enable_notification(ctrl);
>>>
>>> -               slot = ctrl->slot;
>>> +       slot = ctrl->slot;
>>>
>>> -               /* Check if slot is occupied */
>>> -               pciehp_get_adapter_status(slot, &status);
>>> -               if (status)
>>> -                       pciehp_enable_slot(slot);
>>> -               else
>>> -                       pciehp_disable_slot(slot);
>>> -       }
>>> +       /* Check if slot is occupied */
>>> +       pciehp_get_adapter_status(slot, &status);
>>> +       if (status)
>>> +               pciehp_enable_slot(slot);
>>> +       else
>>> +               pciehp_disable_slot(slot);
>>>         return 0;
>>>  }
>>>  #endif /* PM */
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

Index: linux/drivers/pci/hotplug/pciehp_core.c
===================================================================
--- linux.orig/drivers/pci/hotplug/pciehp_core.c
+++ linux/drivers/pci/hotplug/pciehp_core.c
@@ -300,24 +300,24 @@  static int pciehp_suspend (struct pcie_d
 
 static int pciehp_resume (struct pcie_device *dev)
 {
+	struct controller *ctrl;
+	struct slot *slot;
+	u8 status;
+
 	dev_info(&dev->device, "%s ENTRY\n", __func__);
-	if (pciehp_force) {
-		struct controller *ctrl = get_service_data(dev);
-		struct slot *slot;
-		u8 status;
+	ctrl = get_service_data(dev);
 
-		/* reinitialize the chipset's event detection logic */
-		pcie_enable_notification(ctrl);
+	/* reinitialize the chipset's event detection logic */
+	pcie_enable_notification(ctrl);
 
-		slot = ctrl->slot;
+	slot = ctrl->slot;
 
-		/* Check if slot is occupied */
-		pciehp_get_adapter_status(slot, &status);
-		if (status)
-			pciehp_enable_slot(slot);
-		else
-			pciehp_disable_slot(slot);
-	}
+	/* Check if slot is occupied */
+	pciehp_get_adapter_status(slot, &status);
+	if (status)
+		pciehp_enable_slot(slot);
+	else
+		pciehp_disable_slot(slot);
 	return 0;
 }
 #endif /* PM */