Messages in this thread | | | Date | Mon, 01 May 2023 16:55:53 -0700 (PDT) | Subject | Re: [patch 26/37] riscv: Switch to hotplug core state synchronization | From | Palmer Dabbelt <> |
| |
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>
| |