From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Rafael J. Wysocki" Subject: Re: [PATCH] PCI / ACPI: Always resume devices on ACPI wakeup notifications Date: Mon, 25 Mar 2013 23:34:59 +0100 Message-ID: <1467919.Hcd6xNPBOK@vostro.rjw.lan> References: <2282655.IicBMMa6jN@vostro.rjw.lan> <20130325164551.GA6869@xanatos> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7Bit Return-path: Received: from hydra.sisk.pl ([212.160.235.94]:41643 "EHLO hydra.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933513Ab3CYW1e (ORCPT ); Mon, 25 Mar 2013 18:27:34 -0400 In-Reply-To: <20130325164551.GA6869@xanatos> Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: Sarah Sharp Cc: Bjorn Helgaas , ACPI Devel Maling List , LKML , Linux PM list , Len Brown , Matthew Garrett , "Accardi, Kristen C" , "Huang, Ying" , linux-pci@vger.kernel.org On Monday, March 25, 2013 09:45:51 AM Sarah Sharp wrote: > On Sat, Mar 23, 2013 at 03:33:03PM +0100, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki > > > > It turns out that _Lxx control methods provided by some BIOSes clear > > the PME Status bit of PCI devices they handle, which means that > > pci_acpi_wake_dev() cannot really use that bit to check whether or > > not the device has signalled wakeup. > > > > For this reason, make pci_acpi_wake_dev() always attempt to resume > > the device it is called for regardless of the device's PME Status bit > > value (that bit still has to be cleared if set at this point, > > though). > > > > Reported-by: Sarah Sharp > > Signed-off-by: Rafael J. Wysocki > > Should this be marked for stable? I had this issue on 3.7 and 3.8 as > well. Yes, it probably should, but that's the maintainer's call. Thanks, Rafael > > --- > > drivers/pci/pci-acpi.c | 15 ++++++++------- > > 1 file changed, 8 insertions(+), 7 deletions(-) > > > > Index: linux-pm/drivers/pci/pci-acpi.c > > =================================================================== > > --- linux-pm.orig/drivers/pci/pci-acpi.c > > +++ linux-pm/drivers/pci/pci-acpi.c > > @@ -53,14 +53,15 @@ static void pci_acpi_wake_dev(acpi_handl > > return; > > } > > > > - if (!pci_dev->pm_cap || !pci_dev->pme_support > > - || pci_check_pme_status(pci_dev)) { > > - if (pci_dev->pme_poll) > > - pci_dev->pme_poll = false; > > + /* Clear PME Status if set. */ > > + if (pci_dev->pme_support) > > + pci_check_pme_status(pci_dev); > > > > - pci_wakeup_event(pci_dev); > > - pm_runtime_resume(&pci_dev->dev); > > - } > > + if (pci_dev->pme_poll) > > + pci_dev->pme_poll = false; > > + > > + pci_wakeup_event(pci_dev); > > + pm_runtime_resume(&pci_dev->dev); > > > > if (pci_dev->subordinate) > > pci_pme_wakeup_bus(pci_dev->subordinate); > > -- I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center.