Commit 079e8889 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

PM: sleep: Fix list splicing in device suspend error paths

Commits aa7a9275 ("PM: sleep: Suspend async parents after suspending
children") and 443046d1 ("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: aa7a9275 ("PM: sleep: Suspend async parents after suspending children")
Fixes: 443046d1 ("PM: sleep: Make suspend of devices more asynchronous")
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/4280


Reported-and-tested-by: default avatarChris Bainbridge <chris.bainbridge@gmail.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Link: https://patch.msgid.link/4659282.LvFx2qVVIh@rjwysocki.net
parent 976aa630
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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;
		}
	}