]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PM: suspend: Make pm_test delay interruptible by wakeup events
authorRiwen Lu <luriwen@kylinos.cn>
Thu, 13 Nov 2025 01:26:38 +0000 (09:26 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 14 Nov 2025 16:09:16 +0000 (17:09 +0100)
Modify the suspend_test() function to allow the test delay to be
interrupted by wakeup events.

This improves the responsiveness of the system during suspend testing
when wakeup events occur, allowing the suspend process to proceed
without waiting for the full test delay to complete when wakeup events
are detected.

Additionally, using msleep() instead of mdelay() avoids potential soft
lockup "CPU stuck" issues when long test delays are configured.

Co-developed-by: xiongxin <xiongxin@kylinos.cn>
Signed-off-by: xiongxin <xiongxin@kylinos.cn>
Signed-off-by: Riwen Lu <luriwen@kylinos.cn>
[ rjw: Changelog edits ]
Link: https://patch.msgid.link/20251113012638.1362013-1-luriwen@kylinos.cn
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
kernel/power/suspend.c

index b4ca17c2fecf4d84f3194cfc6ef0b9d903d76130..1c2f777da36749752fcc0c3907ad8fde54899095 100644 (file)
@@ -344,10 +344,14 @@ MODULE_PARM_DESC(pm_test_delay,
 static int suspend_test(int level)
 {
 #ifdef CONFIG_PM_DEBUG
+       int i;
+
        if (pm_test_level == level) {
                pr_info("suspend debug: Waiting for %d second(s).\n",
                                pm_test_delay);
-               mdelay(pm_test_delay * 1000);
+               for (i = 0; i < pm_test_delay && !pm_wakeup_pending(); i++)
+                       msleep(1000);
+
                return 1;
        }
 #endif /* !CONFIG_PM_DEBUG */