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: 057d51a126
("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…
Reference in New Issue
Block a user