PM: sleep: Do not let "syscore" devices runtime-suspend during system transitions
commit 928265e3601cde78c7e0a3e518a93b27defed3b1 upstream. There is no reason to allow "syscore" devices to runtime-suspend during system-wide PM transitions, because they are subject to the same possible failure modes as any other devices in that respect. Accordingly, change device_prepare() and device_complete() to call pm_runtime_get_noresume() and pm_runtime_put(), respectively, for "syscore" devices too. Fixes: 057d51a1268f ("Merge branch 'pm-sleep'") Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Cc: 3.10+ <stable@vger.kernel.org> # 3.10+ Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1c422d6301
commit
daccf40320
@ -1053,7 +1053,7 @@ static void device_complete(struct device *dev, pm_message_t state)
|
||||
const char *info = NULL;
|
||||
|
||||
if (dev->power.syscore)
|
||||
return;
|
||||
goto out;
|
||||
|
||||
device_lock(dev);
|
||||
|
||||
@ -1083,6 +1083,7 @@ static void device_complete(struct device *dev, pm_message_t state)
|
||||
|
||||
device_unlock(dev);
|
||||
|
||||
out:
|
||||
pm_runtime_put(dev);
|
||||
}
|
||||
|
||||
@ -1796,9 +1797,6 @@ static int device_prepare(struct device *dev, pm_message_t state)
|
||||
int (*callback)(struct device *) = NULL;
|
||||
int ret = 0;
|
||||
|
||||
if (dev->power.syscore)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* If a device's parent goes into runtime suspend at the wrong time,
|
||||
* it won't be possible to resume the device. To prevent this we
|
||||
@ -1807,6 +1805,9 @@ static int device_prepare(struct device *dev, pm_message_t state)
|
||||
*/
|
||||
pm_runtime_get_noresume(dev);
|
||||
|
||||
if (dev->power.syscore)
|
||||
return 0;
|
||||
|
||||
device_lock(dev);
|
||||
|
||||
dev->power.wakeup_path = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user