aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2025-09-15 12:03:26 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2025-09-15 12:03:26 +0200
commitbd03c7020d753f592fc0813481a27e245b0e4406 (patch)
tree4ecff5067cca031893004d1baa7ed22efb3f4145 /drivers
parentPM: hibernate: Restrict GFP mask in hibernation_snapshot() (diff)
parentPM: sleep: core: Clear power.must_resume in noirq suspend error path (diff)
downloadlinux-bd03c7020d753f592fc0813481a27e245b0e4406.tar.gz
linux-bd03c7020d753f592fc0813481a27e245b0e4406.zip
Merge back earlier material related to system sleep for 6.18
Diffstat (limited to 'drivers')
-rw-r--r--drivers/base/power/main.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 2ea6e05e6ec9..c883b01ffbdd 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -724,8 +724,20 @@ static void device_resume_noirq(struct device *dev, pm_message_t state, bool asy
if (dev->power.syscore || dev->power.direct_complete)
goto Out;
- if (!dev->power.is_noirq_suspended)
+ if (!dev->power.is_noirq_suspended) {
+ /*
+ * This means that system suspend has been aborted in the noirq
+ * phase before invoking the noirq suspend callback for the
+ * device, so if device_suspend_late() has left it in suspend,
+ * device_resume_early() should leave it in suspend either in
+ * case the early resume of it depends on the noirq resume that
+ * has not run.
+ */
+ if (dev_pm_skip_suspend(dev))
+ dev->power.must_resume = false;
+
goto Out;
+ }
if (!dpm_wait_for_superior(dev, async))
goto Out;