Message ID | 20230913163823.7880-10-james.morse@arm.com (mailing list archive) |
---|---|
State | RFC, archived |
Headers | show |
Series | ACPI/arm64: add support for virtual cpuhotplug | expand |
On Wed, Sep 13, 2023 at 04:37:57PM +0000, James Morse wrote: > 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. > > Signed-off-by: James Morse <james.morse@arm.com> Same comment as x86 (moving the point at which cpus are registered ought to be mentioned in the commit message.)
On Wed, 13 Sep 2023 16:37:57 +0000 James Morse <james.morse@arm.com> wrote: > 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. > > Signed-off-by: James Morse <james.morse@arm.com> > --- > arch/loongarch/Kconfig | 1 + > arch/loongarch/kernel/topology.c | 29 ++--------------------------- > 2 files changed, 3 insertions(+), 27 deletions(-) > > diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig > index 2bddd202470e..5bed51adc68c 100644 > --- a/arch/loongarch/Kconfig > +++ b/arch/loongarch/Kconfig > @@ -72,6 +72,7 @@ config LOONGARCH > select GENERIC_CLOCKEVENTS > select GENERIC_CMOS_UPDATE > select GENERIC_CPU_AUTOPROBE > + select GENERIC_CPU_DEVICES > select GENERIC_ENTRY > select GENERIC_GETTIMEOFDAY > select GENERIC_IOREMAP if !ARCH_IOREMAP > diff --git a/arch/loongarch/kernel/topology.c b/arch/loongarch/kernel/topology.c > index caa7cd859078..8e4441c1ff39 100644 > --- a/arch/loongarch/kernel/topology.c > +++ b/arch/loongarch/kernel/topology.c > @@ -7,20 +7,13 @@ > #include <linux/percpu.h> > #include <asm/bootinfo.h> > > -static DEFINE_PER_CPU(struct cpu, cpu_devices); > - > #ifdef CONFIG_HOTPLUG_CPU > int arch_register_cpu(int cpu) > { > - int ret; > struct cpu *c = &per_cpu(cpu_devices, cpu); > > - c->hotpluggable = 1; This is a bit subtle. Can loongarch hotplug a CPU that is also io_master(cpu)? I have no idea if there is a subtle difference between. 1) CPUs present at boot where if they are an io_master they are not allowed to be hot removed. 2) CPUs that turn up (hotplugged) later which are an io_master and by original code can be removed. My guess is that no io_master CPU can be hotplugged in making this irrelevant and your code correct as the =1 is just a micro optimizatoin. If we can confirm that, a one line addition to the patch description would be great. Otherwise LGTM > - ret = register_cpu(c, cpu); > - if (ret < 0) > - pr_warn("register_cpu %d failed (%d)\n", cpu, ret); > - > - return ret; > + c->hotpluggable = !io_master(cpu); > + return register_cpu(c, cpu); > } > EXPORT_SYMBOL(arch_register_cpu); > > @@ -33,21 +26,3 @@ void arch_unregister_cpu(int cpu) > } > EXPORT_SYMBOL(arch_unregister_cpu); > #endif > - > -static int __init topology_init(void) > -{ > - int i, ret; > - > - for_each_present_cpu(i) { > - struct cpu *c = &per_cpu(cpu_devices, i); > - > - c->hotpluggable = !io_master(i); > - ret = register_cpu(c, i); > - if (ret < 0) > - pr_warn("topology_init: register_cpu %d failed (%d)\n", i, ret); > - } > - > - return 0; > -} > - > -subsys_initcall(topology_init);
diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig index 2bddd202470e..5bed51adc68c 100644 --- a/arch/loongarch/Kconfig +++ b/arch/loongarch/Kconfig @@ -72,6 +72,7 @@ config LOONGARCH select GENERIC_CLOCKEVENTS select GENERIC_CMOS_UPDATE select GENERIC_CPU_AUTOPROBE + select GENERIC_CPU_DEVICES select GENERIC_ENTRY select GENERIC_GETTIMEOFDAY select GENERIC_IOREMAP if !ARCH_IOREMAP diff --git a/arch/loongarch/kernel/topology.c b/arch/loongarch/kernel/topology.c index caa7cd859078..8e4441c1ff39 100644 --- a/arch/loongarch/kernel/topology.c +++ b/arch/loongarch/kernel/topology.c @@ -7,20 +7,13 @@ #include <linux/percpu.h> #include <asm/bootinfo.h> -static DEFINE_PER_CPU(struct cpu, cpu_devices); - #ifdef CONFIG_HOTPLUG_CPU int arch_register_cpu(int cpu) { - int ret; struct cpu *c = &per_cpu(cpu_devices, cpu); - c->hotpluggable = 1; - ret = register_cpu(c, cpu); - if (ret < 0) - pr_warn("register_cpu %d failed (%d)\n", cpu, ret); - - return ret; + c->hotpluggable = !io_master(cpu); + return register_cpu(c, cpu); } EXPORT_SYMBOL(arch_register_cpu); @@ -33,21 +26,3 @@ void arch_unregister_cpu(int cpu) } EXPORT_SYMBOL(arch_unregister_cpu); #endif - -static int __init topology_init(void) -{ - int i, ret; - - for_each_present_cpu(i) { - struct cpu *c = &per_cpu(cpu_devices, i); - - c->hotpluggable = !io_master(i); - ret = register_cpu(c, i); - if (ret < 0) - pr_warn("topology_init: register_cpu %d failed (%d)\n", i, ret); - } - - return 0; -} - -subsys_initcall(topology_init);
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. Signed-off-by: James Morse <james.morse@arm.com> --- arch/loongarch/Kconfig | 1 + arch/loongarch/kernel/topology.c | 29 ++--------------------------- 2 files changed, 3 insertions(+), 27 deletions(-)