aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2009-12-20 20:46:11 -0500
committerRafael J. Wysocki <rjw@sisk.pl>2009-12-20 20:46:11 -0500
commitaa0baaef97c89de2ef216fcc017215ee01662a10 (patch)
tree522e5cbe200ba5ddcaf905a826b2a58159a441eb
parentecf762b2581e12ac761d12a6e4e297c2224aa899 (diff)
PM: Use pm_runtime_put_sync in system resume
This patch (as1317) fixes a bug in the PM core. When a device is resumed following a system sleep, the core decrements the device's runtime PM usage counter but doesn't issue an idle notification if the counter reaches 0. This could prevent an otherwise unused device from being runtime-suspended again after the system sleep. The fix is to call pm_runtime_put_sync() instead of pm_runtime_put_noidle(). Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
-rw-r--r--drivers/base/power/main.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 8052dafc0ba9..48adf80926a0 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -607,7 +607,7 @@ static void dpm_complete(pm_message_t state)
607 mutex_unlock(&dpm_list_mtx); 607 mutex_unlock(&dpm_list_mtx);
608 608
609 device_complete(dev, state); 609 device_complete(dev, state);
610 pm_runtime_put_noidle(dev); 610 pm_runtime_put_sync(dev);
611 611
612 mutex_lock(&dpm_list_mtx); 612 mutex_lock(&dpm_list_mtx);
613 } 613 }
@@ -880,7 +880,7 @@ static int dpm_prepare(pm_message_t state)
880 pm_runtime_get_noresume(dev); 880 pm_runtime_get_noresume(dev);
881 if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) { 881 if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) {
882 /* Wake-up requested during system sleep transition. */ 882 /* Wake-up requested during system sleep transition. */
883 pm_runtime_put_noidle(dev); 883 pm_runtime_put_sync(dev);
884 error = -EBUSY; 884 error = -EBUSY;
885 } else { 885 } else {
886 error = device_prepare(dev, state); 886 error = device_prepare(dev, state);