mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Linux PM mailing list <linux-pm@lists.linux-foundation.org>
Cc: Tejun Heo <tj@kernel.org>, Alan Stern <stern@rowland.harvard.edu>,
	Greg KH <greg@kroah.com>, LKML <linux-kernel@vger.kernel.org>,
	Magnus Damm <magnus.damm@gmail.com>,
	Kevin Hilman <khilman@ti.com>,
	linux-scsi@vger.kernel.org,
	Jesse Barnes <jbarnes@virtuousgeek.org>
Subject: [PATCH 3/6 v2] PCI / PM: Detect early wakeup in pci_pm_prepare()
Date: Wed, 29 Jun 2011 23:33:17 +0200	[thread overview]
Message-ID: <201106292333.17308.rjw@sisk.pl> (raw)
In-Reply-To: <201106292329.04163.rjw@sisk.pl>

From: Rafael J. Wysocki <rjw@sisk.pl>

A subsequent patch is going to move the invocation of
pm_runtime_barrier() from dpm_prepare() to __device_suspend().
Consequently, early wakeup events resulting from runtime resume
requests for wakeup devices queued up right before system suspend
will only be detected after all of the subsystem-level .prepare()
callbacks have run.  However, the PCI bus type calls
pm_runtime_get_sync() from its pci_pm_prepare() callback routine,
so it would destroy the early wakeup events information regarding PCI
devices.  To prevent this from happening add an early wakeup
detection mechanism, analogous to the one currently in dpm_prepare(),
to pci_pm_prepare().

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
 drivers/pci/pci-driver.c |   16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

Index: linux-2.6/drivers/pci/pci-driver.c
===================================================================
--- linux-2.6.orig/drivers/pci/pci-driver.c
+++ linux-2.6/drivers/pci/pci-driver.c
@@ -18,6 +18,7 @@
 #include <linux/sched.h>
 #include <linux/cpu.h>
 #include <linux/pm_runtime.h>
+#include <linux/suspend.h>
 #include "pci.h"
 
 struct pci_dynid {
@@ -616,6 +617,19 @@ static int pci_pm_prepare(struct device
 	int error = 0;
 
 	/*
+	 * If a PCI device configured to wake up the system from sleep states
+	 * has been suspended at run time and there's a resume request pending
+	 * for it, this is equivalent to the device signaling wakeup, so the
+	 * system suspend operation should be aborted.
+	 */
+	pm_runtime_get_noresume(dev);
+	if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
+		pm_wakeup_event(dev, 0);
+
+	if (pm_wakeup_pending())
+		return -EBUSY;
+
+	/*
 	 * PCI devices suspended at run time need to be resumed at this
 	 * point, because in general it is necessary to reconfigure them for
 	 * system suspend.  Namely, if the device is supposed to wake up the
@@ -624,7 +638,7 @@ static int pci_pm_prepare(struct device
 	 * system from the sleep state, we'll have to prevent it from signaling
 	 * wake-up.
 	 */
-	pm_runtime_get_sync(dev);
+	pm_runtime_resume(dev);
 
 	if (drv && drv->pm && drv->pm->prepare)
 		error = drv->pm->prepare(dev);


  parent reply	other threads:[~2011-06-29 21:36 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-25 22:54 [PATCH 0/3] PM: Fix up interactions between system suspend/resume and runtime PM Rafael J. Wysocki
2011-06-25 22:55 ` [PATCH 1/3] PM / Runtime: Update documentation of interactions with system sleep Rafael J. Wysocki
2011-06-25 22:58   ` Jesper Juhl
2011-06-26  3:01     ` Alan Stern
2011-06-26 20:12       ` Rafael J. Wysocki
2011-06-25 22:55 ` [PATCH 2/3] PM / Runtime: Return special error code if runtime PM is disabled Rafael J. Wysocki
2011-06-25 22:56 ` [PATCH 3/3] PM: Limit race conditions between runtime PM and system sleep Rafael J. Wysocki
2011-06-26  2:57   ` Alan Stern
2011-06-26 20:21     ` Rafael J. Wysocki
2011-06-28 15:56   ` Ming Lei
2011-06-28 21:42     ` Rafael J. Wysocki
2011-06-29 14:11       ` Alan Stern
2011-06-29 19:35         ` Rafael J. Wysocki
2011-07-01 16:22   ` Kevin Hilman
2011-07-01 19:50     ` Rafael J. Wysocki
2011-06-29 21:29 ` [PATCH 0/6 v2] PM: Fix up interactions between system suspend/resume and runtime PM Rafael J. Wysocki
2011-06-29 21:31   ` [PATCH 1/6 v2] PM / Runtime: Update documentation of interactions with system sleep Rafael J. Wysocki
2011-06-29 21:32   ` [PATCH 2/6 v2] PM / Runtime: Return special error code if runtime PM is disabled Rafael J. Wysocki
2011-06-29 21:33   ` Rafael J. Wysocki [this message]
2011-06-29 21:34   ` [PATCH 4/6 v2] PM: Limit race conditions between runtime PM and system sleep (v2) Rafael J. Wysocki
2011-10-27 13:54     ` Linus Walleij
2011-10-27 20:06       ` Rafael J. Wysocki
2011-10-28 20:00         ` Linus Walleij
2011-11-02 19:14       ` Greg KH
2011-11-02 20:06         ` Linus Walleij
2011-11-02 20:11           ` Greg KH
2011-11-02 21:00             ` Linus Walleij
2011-11-02 21:17               ` Greg KH
2011-11-03  0:28                 ` Rafael J. Wysocki
2011-11-03  1:31                   ` Greg KH
2011-06-29 21:35   ` [PATCH 5/6 v2] PM / Runtime: Improve documentation of enable, disable and barrier Rafael J. Wysocki
2011-06-29 21:35   ` [PATCH 6/6 v2] PM / Runtime: Replace "run-time" with "runtime" in documentation Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201106292333.17308.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=greg@kroah.com \
    --cc=jbarnes@virtuousgeek.org \
    --cc=khilman@ti.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=magnus.damm@gmail.com \
    --cc=stern@rowland.harvard.edu \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome