diff options
author | 2024-06-14 12:59:01 +0300 | |
---|---|---|
committer | 2024-06-17 17:46:20 +0200 | |
commit | 26ba7353caaa7140561d3f7693a77a3eb68c722c (patch) | |
tree | 4c1305cbc1c7cbd0b7c581b5dae033dadb51363f /arch/x86/kernel/reboot.c | |
parent | x86/acpi: Do not attempt to bring up secondary CPUs in the kexec case (diff) | |
download | linux-rng-26ba7353caaa7140561d3f7693a77a3eb68c722c.tar.xz linux-rng-26ba7353caaa7140561d3f7693a77a3eb68c722c.zip |
x86/smp: Add smp_ops.stop_this_cpu() callback
If the helper is defined, it is called instead of halt() to stop the CPU at the
end of stop_this_cpu() and on crash CPU shutdown.
ACPI MADT will use it to hand over the CPU to BIOS in order to be able to wake
it up again after kexec.
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Kai Huang <kai.huang@intel.com>
Tested-by: Tao Liu <ltao@redhat.com>
Link: https://lore.kernel.org/r/20240614095904.1345461-17-kirill.shutemov@linux.intel.com
Diffstat (limited to 'arch/x86/kernel/reboot.c')
-rw-r--r-- | arch/x86/kernel/reboot.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index bb7a44af7efd..0e0a4cf6b5eb 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c @@ -880,6 +880,12 @@ static int crash_nmi_callback(unsigned int val, struct pt_regs *regs) cpu_emergency_disable_virtualization(); atomic_dec(&waiting_for_crash_ipi); + + if (smp_ops.stop_this_cpu) { + smp_ops.stop_this_cpu(); + unreachable(); + } + /* Assume hlt works */ halt(); for (;;) |