Re: [PATCH RFC 21/22] riscv: Switch over to GENERIC_CPU_DEVICES
Palmer Dabbelt <[email protected]> Tue, 07 Nov 2023 09:48:07 -0800 (PST)
| Newsgroups | gmane.linux.acpi.devel,gmane.linux.power-management.general,gmane.linux.kernel.cross-arch,gmane.linux.kernel,gmane.linux.ports.arm.kernel,gmane.linux.ports.riscv,gmane.linux.documentation,gmane.linux.ports.ia64,gmane.linux.ports.parisc |
|---|---|
| Message-ID | <mhng-6d9a28af-d626-410e-913f-33bc01890537@palmer-ri-x1c9> |
On Tue, 07 Nov 2023 02:31:06 PST (-0800), [email protected] wrote: > From: James Morse <[email protected]> > > Now that GENERIC_CPU_DEVICES calls arch_register_cpu(), which can be > overridden by the arch code, switch over to this to allow common code > to choose when the register_cpu() call is made. > > This allows topology_init() to be removed. > > This is an intermediate step to the logic being moved to drivers/acpi, > where GENERIC_CPU_DEVICES will do the work when booting with acpi=off. > > This patch also has the effect of moving the registration of CPUs from > subsys to driver core initialisation, prior to any initcalls running. > > Signed-off-by: James Morse <[email protected]> > Reviewed-by: Jonathan Cameron <[email protected]> > Signed-off-by: Russell King (Oracle) <[email protected]> > --- > Changes since RFC v2: > * Add note about initialisation order change. > --- > arch/riscv/Kconfig | 1 + > arch/riscv/kernel/setup.c | 19 ++++--------------- > 2 files changed, 5 insertions(+), 15 deletions(-) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index eaa15a20e6ae..264aa466aec3 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -69,6 +69,7 @@ config RISCV > select GENERIC_ARCH_TOPOLOGY > select GENERIC_ATOMIC64 if !64BIT > select GENERIC_CLOCKEVENTS_BROADCAST if SMP > + select GENERIC_CPU_DEVICES > select GENERIC_EARLY_IOREMAP > select GENERIC_ENTRY > select GENERIC_GETTIMEOFDAY if HAVE_GENERIC_VDSO > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c > index 0624f44d43ec..f8875ae1b0aa 100644 > --- a/arch/riscv/kernel/setup.c > +++ b/arch/riscv/kernel/setup.c > @@ -50,7 +50,6 @@ atomic_t hart_lottery __section(".sdata") > #endif > ; > unsigned long boot_cpu_hartid; > -static DEFINE_PER_CPU(struct cpu, cpu_devices); > > /* > * Place kernel memory regions on the resource tree so that > @@ -295,23 +294,13 @@ void __init setup_arch(char **cmdline_p) > riscv_set_dma_cache_alignment(); > } > > -static int __init topology_init(void) > +int arch_register_cpu(int cpu) > { > - int i, ret; > + struct cpu *c = &per_cpu(cpu_devices, cpu); > > - for_each_possible_cpu(i) { > - struct cpu *cpu = &per_cpu(cpu_devices, i); > - > - cpu->hotpluggable = cpu_has_hotplug(i); > - ret = register_cpu(cpu, i); > - if (unlikely(ret)) > - pr_warn("Warning: %s: register_cpu %d failed (%d)\n", > - __func__, i, ret); > - } > - > - return 0; > + c->hotpluggable = cpu_has_hotplug(cpu); > + return register_cpu(c, cpu); > } > -subsys_initcall(topology_init); > > void free_initmem(void) > { Acked-by: Palmer Dabbelt <[email protected]>