PM: sleep: core: Drop racy and redundant checks from device_prepare()
Subsystems (4)
PATCH 1/1 PM: sleep: core: Drop racy and redundant checks from device_prepare()
From: Rafael J. Wysocki <[email protected]>
Alan Stern points out that the WARN_ON() check in device_prepare() is racy (because the PM-runtime API can be disabled briefly for any device at any time and system suspend can start at any time too) and the pm_runtime_suspended() check in the computation of the direct_complete flag value is redundant (because it will be repeated later anyway).
Drop both these checks accordingly.
Reported-by Alan Stern <[email protected]>
Signed-off-by Rafael J. Wysocki <[email protected]>
--- drivers/base/power/main.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
drivers/base/power/main.c +1 -6
@@ -1922,10 +1922,6 @@ static int device_prepare(struct deviceif (dev->power.syscore)return 0 ; -WARN_ON (!pm_runtime_enabled (dev) && -dev_pm_test_driver_flags (dev,DPM_FLAG_SMART_SUSPEND | -DPM_FLAG_LEAVE_SUSPENDED )); -/* * 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
@@ -1973,8 +1969,7 @@ unlock:*/ spin_lock_irq (&dev->power.lock); dev->power.direct_complete = state.event ==PM_EVENT_SUSPEND && - ((pm_runtime_suspended (dev) && ret >0 ) || - dev->power.no_pm_callbacks) && + (ret >0 || dev->power.no_pm_callbacks) && !dev_pm_test_driver_flags (dev,DPM_FLAG_NEVER_SKIP );spin_unlock_irq (&dev->power.lock);return 0 ;