]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PM: sleep: Fix list splicing in device suspend error paths
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 3 Jun 2025 16:17:58 +0000 (18:17 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 3 Jun 2025 20:14:03 +0000 (22:14 +0200)
Commits aa7a9275ab81 ("PM: sleep: Suspend async parents after suspending
children") and 443046d1ad66 ("PM: sleep: Make suspend of devices more
asynchronous") added list splicing to the error paths of dpm_suspend(),
dpm_suspend_late(), and dpm_noirq_suspend_devices(), but they should
have used the list_splice_init() variant because the emptied list is
used going forward in all of these cases.

Replace list_splice() with list_splice_init() in the code in question as
appropriate.

Fixes: aa7a9275ab81 ("PM: sleep: Suspend async parents after suspending children")
Fixes: 443046d1ad66 ("PM: sleep: Make suspend of devices more asynchronous")
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/4280
Reported-and-tested-by: Chris Bainbridge <chris.bainbridge@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://patch.msgid.link/4659282.LvFx2qVVIh@rjwysocki.net
drivers/base/power/main.c

index 19fd55b8ac77b154d7853753a65d0f60f615f5d3..342681b3602863c7c59d5ed28ae4e5ad176fdbe3 100644 (file)
@@ -1451,7 +1451,7 @@ static int dpm_noirq_suspend_devices(pm_message_t state)
                         * Move all devices to the target list to resume them
                         * properly.
                         */
-                       list_splice(&dpm_late_early_list, &dpm_noirq_list);
+                       list_splice_init(&dpm_late_early_list, &dpm_noirq_list);
                        break;
                }
        }
@@ -1653,7 +1653,7 @@ int dpm_suspend_late(pm_message_t state)
                         * Move all devices to the target list to resume them
                         * properly.
                         */
-                       list_splice(&dpm_suspended_list, &dpm_late_early_list);
+                       list_splice_init(&dpm_suspended_list, &dpm_late_early_list);
                        break;
                }
        }
@@ -1946,7 +1946,7 @@ int dpm_suspend(pm_message_t state)
                         * Move all devices to the target list to resume them
                         * properly.
                         */
-                       list_splice(&dpm_prepared_list, &dpm_suspended_list);
+                       list_splice_init(&dpm_prepared_list, &dpm_suspended_list);
                        break;
                }
        }