public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
[parent not found: <AANLkTi=gANgv=_PFTqNKy1vDddhYKZJ9nOKhvhOBJwqE@mail.gmail.com>]
[parent not found: <AANLkTindhyovNphyCfnSuqN8KogZ0APdWyL7T=vYHHPF@mail.gmail.com>]
[parent not found: <AANLkTikug=+ztLCJbxYiyx1U_whLkQ9zsYvEMbV9JyJi@mail.gmail.com>]
[parent not found: <1283396052-3620-1-git-send-email-ccross@android.com>]
* [PATCH] PM: Prevent waiting forever on asynchronous resume after abort
@ 2010-09-02  2:54 Colin Cross
  0 siblings, 0 replies; 23+ messages in thread
From: Colin Cross @ 2010-09-02  2:54 UTC (permalink / raw)
  To: linux-kernel, linux-pm
  Cc: Randy Dunlap, Len Brown, Greg Kroah-Hartman, Colin Cross,
	Andrew Morton

Only wait on a parent device during resume if the parent device is
suspended.

Consider three drivers, A, B, and C.  The parent of A is C, and C
has async_suspend set.  On boot, C->power.completion is initialized
to 0.

During the first suspend:
suspend_devices_and_enter(...)
 dpm_resume(...)
  device_suspend(A)
  device_suspend(B) returns error, aborts suspend
 dpm_resume_end(...)
   dpm_resume(...)
    device_resume(A)
     dpm_wait(A->parent == C)
      wait_for_completion(C->power.completion)

The wait_for_completion will never complete, because
complete_all(C->power.completion) will only be called from
device_suspend(C) or device_resume(C), neither of which is called
if suspend is aborted before C.

After a successful suspend->resume cycle, where B doesn't abort
suspend, C->power.completion is left in the completed state by the
call to device_resume(C), and the same call path will work if B
aborts suspend.

Signed-off-by: Colin Cross <ccross@android.com>
---
 drivers/base/power/main.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index cb784a0..e159910 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -526,7 +526,8 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
 	TRACE_DEVICE(dev);
 	TRACE_RESUME(0);
 
-	dpm_wait(dev->parent, async);
+	if (dev->parent && dev->parent->power.status >= DPM_OFF)
+		dpm_wait(dev->parent, async);
 	device_lock(dev);
 
 	dev->power.status = DPM_RESUMING;
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2010-09-03 17:31 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <Pine.LNX.4.44L0.1009020946580.1513-100000@iolanthe.rowland.org>
2010-09-02 19:46 ` [PATCH] PM: Prevent waiting forever on asynchronous resume after abort Rafael J. Wysocki
     [not found] ` <201009022146.03359.rjw@sisk.pl>
2010-09-02 20:24   ` Colin Cross
2010-09-02 20:27   ` Alan Stern
     [not found]   ` <AANLkTi=s3_kFvRY9Afzku82gUgW7YKYXDBZvTkxQsMP8@mail.gmail.com>
2010-09-02 20:30     ` Rafael J. Wysocki
2010-09-02 20:45     ` Alan Stern
     [not found]     ` <Pine.LNX.4.44L0.1009021642320.1311-100000@iolanthe.rowland.org>
2010-09-02 21:01       ` Colin Cross
     [not found]       ` <AANLkTim7UM80MrwKoAz3hUFrqL2Fbyw6XS=X89PXRc2Q@mail.gmail.com>
2010-09-02 21:06         ` Rafael J. Wysocki
2010-09-02 21:34         ` Alan Stern
     [not found]         ` <Pine.LNX.4.44L0.1009021723460.1311-100000@iolanthe.rowland.org>
2010-09-02 22:45           ` Colin Cross
     [not found]           ` <AANLkTin_-y2nsXhH+mXv=bku=WXO7VhfvknYwtLhURfv@mail.gmail.com>
2010-09-02 23:09             ` Rafael J. Wysocki
     [not found]             ` <201009030109.40816.rjw@sisk.pl>
2010-09-03  0:14               ` Colin Cross
     [not found]               ` <AANLkTinbgShA+m3sdXrYAvW7ctCExp+fZv5EMuYSMLiE@mail.gmail.com>
2010-09-03  0:35                 ` Rafael J. Wysocki
     [not found]                 ` <201009030235.00270.rjw@sisk.pl>
2010-09-03  1:54                   ` Colin Cross
2010-09-02 21:05     ` Rafael J. Wysocki
2010-09-02 21:31       ` Colin Cross
     [not found]       ` <AANLkTimfyELxqsHW8zvgrxySrVSyuBWZJ0XXVSSPCXrj@mail.gmail.com>
2010-09-02 21:40         ` Rafael J. Wysocki
     [not found] <AANLkTi=gANgv=_PFTqNKy1vDddhYKZJ9nOKhvhOBJwqE@mail.gmail.com>
2010-09-03 17:31 ` Alan Stern
     [not found] <AANLkTindhyovNphyCfnSuqN8KogZ0APdWyL7T=vYHHPF@mail.gmail.com>
2010-09-03 14:04 ` Alan Stern
     [not found] ` <Pine.LNX.4.44L0.1009030953060.1548-100000@iolanthe.rowland.org>
2010-09-03 16:48   ` Colin Cross
     [not found] <AANLkTikug=+ztLCJbxYiyx1U_whLkQ9zsYvEMbV9JyJi@mail.gmail.com>
2010-09-03  2:42 ` Alan Stern
     [not found] ` <Pine.LNX.4.44L0.1009022233030.19022-100000@netrider.rowland.org>
2010-09-03  4:30   ` Colin Cross
     [not found] <1283396052-3620-1-git-send-email-ccross@android.com>
2010-09-02 13:50 ` Alan Stern
2010-09-02  2:54 Colin Cross

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox