diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2020-04-18 19:52:19 +0300 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2020-04-24 22:31:28 +0300 |
commit | 0fe8a1be599ab97f840ba22d98cb8f24a9f9e872 (patch) | |
tree | fa30b29438b06839bff2c88c993efc84bbdee2f9 /drivers/base/power | |
parent | 6e176bf8d46194353163c2cb660808bc633b45d9 (diff) | |
download | linux-0fe8a1be599ab97f840ba22d98cb8f24a9f9e872.tar.xz |
PM: sleep: core: Rework the power.may_skip_resume handling
Because the power.may_skip_resume device status bit is taken
into account in combination with the DPM_FLAG_LEAVE_SUSPENDED
driver flag, it can be set to 'true' for all devices in the
"suspend" phase of a suspend-resume cycle, so do that.
Then, neither the PM core nor the middle-layer (sybsystem) code
handling it needs to set it to 'true' any more and it just has
to be cleared if there is a reason to avoid skipping the "noirq"
and "early" resume callbacks provided by the driver, so update
the code in question accordingly.
Suggested-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/base/power')
-rw-r--r-- | drivers/base/power/main.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 25b0302188d8..5adf0be6aa47 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -1415,14 +1415,8 @@ static int __device_suspend_late(struct device *dev, pm_message_t state, bool as if (callback) goto Run; - if (dev_pm_smart_suspend_and_suspended(dev)) { - /* - * In principle, the resume of the device may be skippend if it - * remains in runtime suspend at this point. - */ - dev->power.may_skip_resume = true; + if (dev_pm_smart_suspend_and_suspended(dev)) goto Skip; - } if (dev->driver && dev->driver->pm) { info = "late driver "; @@ -1647,7 +1641,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) dev->power.direct_complete = false; } - dev->power.may_skip_resume = false; + dev->power.may_skip_resume = true; dev->power.must_resume = false; dpm_watchdog_set(&wd, dev); |