diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2009-12-20 20:46:11 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rjw@sisk.pl> | 2009-12-20 20:46:11 -0500 |
commit | aa0baaef97c89de2ef216fcc017215ee01662a10 (patch) | |
tree | 522e5cbe200ba5ddcaf905a826b2a58159a441eb /drivers/base/power | |
parent | ecf762b2581e12ac761d12a6e4e297c2224aa899 (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>
Diffstat (limited to 'drivers/base/power')
-rw-r--r-- | drivers/base/power/main.c | 4 |
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); |