x86/smp: Put CPUs into INIT on shutdown if possible
authorThomas Gleixner <tglx@linutronix.de>
Thu, 15 Jun 2023 20:34:00 +0000 (22:34 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 20 Jun 2023 12:51:47 +0000 (14:51 +0200)
commit45e34c8af58f23db4474e2bfe79183efec09a18b
tree9b0394979b5e07d83f76699ce2c79ddd95e5f692
parent6087dd5e86ff03a8cd4cffdf463a7f457e65cbff
x86/smp: Put CPUs into INIT on shutdown if possible

Parking CPUs in a HLT loop is not completely safe vs. kexec() as HLT can
resume execution due to NMI, SMI and MCE, which has the same issue as the
MWAIT loop.

Kicking the secondary CPUs into INIT makes this safe against NMI and SMI.

A broadcast MCE will take the machine down, but a broadcast MCE which makes
HLT resume and execute overwritten text, pagetables or data will end up in
a disaster too.

So chose the lesser of two evils and kick the secondary CPUs into INIT
unless the system has installed special wakeup mechanisms which are not
using INIT.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ashok Raj <ashok.raj@intel.com>
Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20230615193330.608657211@linutronix.de
arch/x86/include/asm/smp.h
arch/x86/kernel/smp.c
arch/x86/kernel/smpboot.c