From patchwork Wed Dec 29 12:22:08 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rafael Wysocki X-Patchwork-Id: 439231 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oBUMBEj1000490 for ; Thu, 30 Dec 2010 22:11:16 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752397Ab0L2MX0 (ORCPT ); Wed, 29 Dec 2010 07:23:26 -0500 Received: from ogre.sisk.pl ([217.79.144.158]:35014 "EHLO ogre.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752096Ab0L2MXO (ORCPT ); Wed, 29 Dec 2010 07:23:14 -0500 Received: from localhost (localhost.localdomain [127.0.0.1]) by ogre.sisk.pl (Postfix) with ESMTP id 293591A0F5F; Wed, 29 Dec 2010 13:14:47 +0100 (CET) Received: from ogre.sisk.pl ([127.0.0.1]) by localhost (ogre.sisk.pl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 03306-04; Wed, 29 Dec 2010 13:14:24 +0100 (CET) Received: from ferrari.rjw.lan (220-bem-13.acn.waw.pl [82.210.184.220]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ogre.sisk.pl (Postfix) with ESMTP id 7D8611A1078; Wed, 29 Dec 2010 13:14:24 +0100 (CET) From: "Rafael J. Wysocki" To: Jesse Barnes Subject: [PATCH 2/2] PCI / PM: Report wakeup events before resuming devices Date: Wed, 29 Dec 2010 13:22:08 +0100 User-Agent: KMail/1.13.5 (Linux/2.6.37-rc8+; KDE/4.4.4; x86_64; ; ) Cc: LKML , "Linux-pm mailing list" , linux-pci@vger.kernel.org References: <201012291320.22777.rjw@sisk.pl> In-Reply-To: <201012291320.22777.rjw@sisk.pl> MIME-Version: 1.0 Message-Id: <201012291322.08521.rjw@sisk.pl> X-Virus-Scanned: amavisd-new at ogre.sisk.pl using MkS_Vir for Linux Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Thu, 30 Dec 2010 22:11:16 +0000 (UTC) Index: linux-2.6/drivers/pci/pci-acpi.c =================================================================== --- linux-2.6.orig/drivers/pci/pci-acpi.c +++ linux-2.6/drivers/pci/pci-acpi.c @@ -46,9 +46,9 @@ static void pci_acpi_wake_dev(acpi_handl struct pci_dev *pci_dev = context; if (event == ACPI_NOTIFY_DEVICE_WAKE && pci_dev) { + pci_wakeup_event(pci_dev); pci_check_pme_status(pci_dev); pm_runtime_resume(&pci_dev->dev); - pci_wakeup_event(pci_dev); if (pci_dev->subordinate) pci_pme_wakeup_bus(pci_dev->subordinate); } Index: linux-2.6/drivers/pci/pci.c =================================================================== --- linux-2.6.orig/drivers/pci/pci.c +++ linux-2.6/drivers/pci/pci.c @@ -1311,8 +1311,8 @@ bool pci_check_pme_status(struct pci_dev static int pci_pme_wakeup(struct pci_dev *dev, void *ign) { if (pci_check_pme_status(dev)) { - pm_request_resume(&dev->dev); pci_wakeup_event(dev); + pm_request_resume(&dev->dev); } return 0; } Index: linux-2.6/drivers/pci/pcie/pme.c =================================================================== --- linux-2.6.orig/drivers/pci/pcie/pme.c +++ linux-2.6/drivers/pci/pcie/pme.c @@ -103,8 +103,8 @@ static bool pcie_pme_walk_bus(struct pci list_for_each_entry(dev, &bus->devices, bus_list) { /* Skip PCIe devices in case we started from a root port. */ if (!pci_is_pcie(dev) && pci_check_pme_status(dev)) { - pm_request_resume(&dev->dev); pci_wakeup_event(dev); + pm_request_resume(&dev->dev); ret = true; } @@ -206,8 +206,8 @@ static void pcie_pme_handle_request(stru /* The device is there, but we have to check its PME status. */ found = pci_check_pme_status(dev); if (found) { - pm_request_resume(&dev->dev); pci_wakeup_event(dev); + pm_request_resume(&dev->dev); } pci_dev_put(dev); } else if (devfn) {