Message ID | 20230414232310.817955867@linutronix.de (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | cpu/hotplug, x86: Reworked parallel CPU bringup | expand |
On Fri, 14 Apr 2023 16:44:55 PDT (-0700), tglx@linutronix.de wrote: > Switch to the CPU hotplug core state tracking and synchronization > mechanim. No functional change intended. > > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: Paul Walmsley <paul.walmsley@sifive.com> > Cc: Palmer Dabbelt <palmer@dabbelt.com> > Cc: linux-riscv@lists.infradead.org > --- > arch/riscv/Kconfig | 1 + > arch/riscv/include/asm/smp.h | 2 +- > arch/riscv/kernel/cpu-hotplug.c | 14 +++++++------- > 3 files changed, 9 insertions(+), 8 deletions(-) > > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -116,6 +116,7 @@ config RISCV > select HAVE_RSEQ > select HAVE_STACKPROTECTOR > select HAVE_SYSCALL_TRACEPOINTS > + select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU > select IRQ_DOMAIN > select IRQ_FORCED_THREADING > select MODULES_USE_ELF_RELA if MODULES > --- a/arch/riscv/include/asm/smp.h > +++ b/arch/riscv/include/asm/smp.h > @@ -64,7 +64,7 @@ asmlinkage void smp_callin(void); > > #if defined CONFIG_HOTPLUG_CPU > int __cpu_disable(void); > -void __cpu_die(unsigned int cpu); > +static inline void __cpu_die(unsigned int cpu) { } > #endif /* CONFIG_HOTPLUG_CPU */ > > #else > --- a/arch/riscv/kernel/cpu-hotplug.c > +++ b/arch/riscv/kernel/cpu-hotplug.c > @@ -8,6 +8,7 @@ > #include <linux/sched.h> > #include <linux/err.h> > #include <linux/irq.h> > +#include <linux/cpuhotplug.h> > #include <linux/cpu.h> > #include <linux/sched/hotplug.h> > #include <asm/irq.h> > @@ -48,17 +49,15 @@ int __cpu_disable(void) > return ret; > } > > +#ifdef CONFIG_HOTPLUG_CPU > /* > - * Called on the thread which is asking for a CPU to be shutdown. > + * Called on the thread which is asking for a CPU to be shutdown, if the > + * CPU reported dead to the hotplug core. > */ > -void __cpu_die(unsigned int cpu) > +void arch_cpuhp_cleanup_dead_cpu(unsigned int cpu) > { > int ret = 0; > > - if (!cpu_wait_death(cpu, 5)) { > - pr_err("CPU %u: didn't die\n", cpu); > - return; > - } > pr_notice("CPU%u: off\n", cpu); > > /* Verify from the firmware if the cpu is really stopped*/ > @@ -75,9 +74,10 @@ void arch_cpu_idle_dead(void) > { > idle_task_exit(); > > - (void)cpu_report_death(); > + cpuhp_ap_report_dead(); > > cpu_ops[smp_processor_id()]->cpu_stop(); > /* It should never reach here */ > BUG(); > } > +#endif Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
--- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -116,6 +116,7 @@ config RISCV select HAVE_RSEQ select HAVE_STACKPROTECTOR select HAVE_SYSCALL_TRACEPOINTS + select HOTPLUG_CORE_SYNC_DEAD if HOTPLUG_CPU select IRQ_DOMAIN select IRQ_FORCED_THREADING select MODULES_USE_ELF_RELA if MODULES --- a/arch/riscv/include/asm/smp.h +++ b/arch/riscv/include/asm/smp.h @@ -64,7 +64,7 @@ asmlinkage void smp_callin(void); #if defined CONFIG_HOTPLUG_CPU int __cpu_disable(void); -void __cpu_die(unsigned int cpu); +static inline void __cpu_die(unsigned int cpu) { } #endif /* CONFIG_HOTPLUG_CPU */ #else --- a/arch/riscv/kernel/cpu-hotplug.c +++ b/arch/riscv/kernel/cpu-hotplug.c @@ -8,6 +8,7 @@ #include <linux/sched.h> #include <linux/err.h> #include <linux/irq.h> +#include <linux/cpuhotplug.h> #include <linux/cpu.h> #include <linux/sched/hotplug.h> #include <asm/irq.h> @@ -48,17 +49,15 @@ int __cpu_disable(void) return ret; } +#ifdef CONFIG_HOTPLUG_CPU /* - * Called on the thread which is asking for a CPU to be shutdown. + * Called on the thread which is asking for a CPU to be shutdown, if the + * CPU reported dead to the hotplug core. */ -void __cpu_die(unsigned int cpu) +void arch_cpuhp_cleanup_dead_cpu(unsigned int cpu) { int ret = 0; - if (!cpu_wait_death(cpu, 5)) { - pr_err("CPU %u: didn't die\n", cpu); - return; - } pr_notice("CPU%u: off\n", cpu); /* Verify from the firmware if the cpu is really stopped*/ @@ -75,9 +74,10 @@ void arch_cpu_idle_dead(void) { idle_task_exit(); - (void)cpu_report_death(); + cpuhp_ap_report_dead(); cpu_ops[smp_processor_id()]->cpu_stop(); /* It should never reach here */ BUG(); } +#endif
Switch to the CPU hotplug core state tracking and synchronization mechanim. No functional change intended. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: linux-riscv@lists.infradead.org --- arch/riscv/Kconfig | 1 + arch/riscv/include/asm/smp.h | 2 +- arch/riscv/kernel/cpu-hotplug.c | 14 +++++++------- 3 files changed, 9 insertions(+), 8 deletions(-)