Skip to content
Snippets Groups Projects
Commit 749b0afc authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

kexec: Change kexec jump code ordering


Change the ordering of the kexec jump code so that the nonboot CPUs
are disabled after calling device drivers' "late suspend" methods.

This change reflects the recent modifications of the power management
code that is also used by kexec jump.

Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Acked-by: default avatarIngo Molnar <mingo@elte.hu>
parent 4aecd671
No related branches found
No related tags found
No related merge requests found
...@@ -1450,9 +1450,6 @@ int kernel_kexec(void) ...@@ -1450,9 +1450,6 @@ int kernel_kexec(void)
error = device_suspend(PMSG_FREEZE); error = device_suspend(PMSG_FREEZE);
if (error) if (error)
goto Resume_console; goto Resume_console;
error = disable_nonboot_cpus();
if (error)
goto Resume_devices;
device_pm_lock(); device_pm_lock();
/* At this point, device_suspend() has been called, /* At this point, device_suspend() has been called,
* but *not* device_power_down(). We *must* * but *not* device_power_down(). We *must*
...@@ -1463,13 +1460,15 @@ int kernel_kexec(void) ...@@ -1463,13 +1460,15 @@ int kernel_kexec(void)
*/ */
error = device_power_down(PMSG_FREEZE); error = device_power_down(PMSG_FREEZE);
if (error) if (error)
goto Unlock_pm; goto Resume_devices;
error = disable_nonboot_cpus();
if (error)
goto Enable_cpus;
local_irq_disable(); local_irq_disable();
/* Suspend system devices */ /* Suspend system devices */
error = sysdev_suspend(PMSG_FREEZE); error = sysdev_suspend(PMSG_FREEZE);
if (error) if (error)
goto Power_up_devices; goto Enable_irqs;
} else } else
#endif #endif
{ {
...@@ -1483,13 +1482,13 @@ int kernel_kexec(void) ...@@ -1483,13 +1482,13 @@ int kernel_kexec(void)
#ifdef CONFIG_KEXEC_JUMP #ifdef CONFIG_KEXEC_JUMP
if (kexec_image->preserve_context) { if (kexec_image->preserve_context) {
sysdev_resume(); sysdev_resume();
Power_up_devices: Enable_irqs:
local_irq_enable(); local_irq_enable();
device_power_up(PMSG_RESTORE); Enable_cpus:
Unlock_pm:
device_pm_unlock();
enable_nonboot_cpus(); enable_nonboot_cpus();
device_power_up(PMSG_RESTORE);
Resume_devices: Resume_devices:
device_pm_unlock();
device_resume(PMSG_RESTORE); device_resume(PMSG_RESTORE);
Resume_console: Resume_console:
resume_console(); resume_console();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment