On Wed, 2024-01-24 at 14:55 +0200, Kirill A. Shutemov wrote: > 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@xxxxxxxxxxxxxxx> Acked-by: Kai Huang <kai.huang@xxxxxxxxx> > --- > arch/x86/include/asm/smp.h | 1 + > arch/x86/kernel/process.c | 7 +++++++ > arch/x86/kernel/reboot.c | 6 ++++++ > 3 files changed, 14 insertions(+) > > diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h > index 4fab2ed454f3..390d53fd34f9 100644 > --- a/arch/x86/include/asm/smp.h > +++ b/arch/x86/include/asm/smp.h > @@ -38,6 +38,7 @@ struct smp_ops { > int (*cpu_disable)(void); > void (*cpu_die)(unsigned int cpu); > void (*play_dead)(void); > + void (*stop_this_cpu)(void); > > void (*send_call_func_ipi)(const struct cpumask *mask); > void (*send_call_func_single_ipi)(int cpu); > diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c > index ab49ade31b0d..00c1b957476d 100644 > --- a/arch/x86/kernel/process.c > +++ b/arch/x86/kernel/process.c > @@ -835,6 +835,13 @@ void __noreturn stop_this_cpu(void *dummy) > */ > cpumask_clear_cpu(cpu, &cpus_stop_mask); > > +#ifdef CONFIG_SMP > + if (smp_ops.stop_this_cpu) { > + smp_ops.stop_this_cpu(); > + unreachable(); > + } > +#endif > + > for (;;) { > /* > * Use native_halt() so that memory contents don't change > diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c > index 0574d4ad6b41..0a75efe579c0 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 (;;) _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec