Commit 7a8dab0d authored by James Morse's avatar James Morse Committed by liwei
Browse files

LoongArch: Switch over to GENERIC_CPU_DEVICES

mainline inclusion
from mainline-v6.8-rc1
commit db3ba29a8315d89736b8af5c1ad945c9967d7655
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8XMTL


CVE: NA

----------------------------------

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 is a subtle change. Originally:
- on boot, topology_init() would have marked present CPUs that
  io_master() is true for as hotplug-incapable.
- if a CPU is hotplugged that is an io_master(), it can later be
  hot-unplugged.

The new behaviour is that any CPU that io_master() is true for will
now always be marked as hotplug-incapable, thus even if it was
hotplugged, it can no longer be hot-unplugged.

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: default avatarJames Morse <james.morse@arm.com>
Reviewed-by: default avatarGavin Shan <gshan@redhat.com>
Signed-off-by: default avatar"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/E1r5R41-00Ct04-Bg@rmk-PC.armlinux.org.uk


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarliwei <liwei728@huawei.com>
parent 584ef750
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+2 −27
Original line number Diff line number Diff line
@@ -10,20 +10,13 @@

#include <acpi/processor.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);
}

void arch_unregister_cpu(int cpu)
@@ -34,21 +27,3 @@ void arch_unregister_cpu(int cpu)
	unregister_cpu(c);
}
#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);