Now io master CPUs are not hotpluggable on LoongArch, in the current code,
only /sys/devices/system/cpu/cpu0/online is not created, let us set the
hotpluggable field of all the io master CPUs as 0, then prevent to create
sysfs control file for the other io master CPUs which confuses some user
space tools. This is similar with commit 9cce844abf07 ("MIPS: CPU#0 is not
hotpluggable").
Signed-off-by: Tiezhu Yang <yangtiezhu@xxxxxxxxxxx>
---
arch/loongarch/kernel/smp.c | 8 --------
arch/loongarch/kernel/topology.c | 12 +++++++++++-
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c
index b5fab30..ef89292 100644
--- a/arch/loongarch/kernel/smp.c
+++ b/arch/loongarch/kernel/smp.c
@@ -240,19 +240,11 @@ void loongson3_smp_finish(void)
#ifdef CONFIG_HOTPLUG_CPU
-static bool io_master(int cpu)
-{
- return test_bit(cpu, &loongson_sysconf.cores_io_master);
-}
-
int loongson3_cpu_disable(void)
{
unsigned long flags;
unsigned int cpu = smp_processor_id();
- if (io_master(cpu))
- return -EBUSY;
-
#ifdef CONFIG_NUMA
numa_remove_cpu(cpu);
#endif
diff --git a/arch/loongarch/kernel/topology.c b/arch/loongarch/kernel/topology.c
index ab1a75c..7e7a77f 100644
--- a/arch/loongarch/kernel/topology.c
+++ b/arch/loongarch/kernel/topology.c
@@ -5,6 +5,7 @@
#include <linux/node.h>
#include <linux/nodemask.h>
#include <linux/percpu.h>
+#include <asm/bootinfo.h>
static DEFINE_PER_CPU(struct cpu, cpu_devices);
@@ -33,6 +34,11 @@ void arch_unregister_cpu(int cpu)
EXPORT_SYMBOL(arch_unregister_cpu);
#endif
+static bool io_master(int cpu)
+{
+ return test_bit(cpu, &loongson_sysconf.cores_io_master);
+}
+
static int __init topology_init(void)
{
int i, ret;
@@ -40,7 +46,11 @@ static int __init topology_init(void)
for_each_present_cpu(i) {
struct cpu *c = &per_cpu(cpu_devices, i);
- c->hotpluggable = !!i;
+ if (io_master(i))
+ c->hotpluggable = 0;
+ else
+ c->hotpluggable = 1;
+
ret = register_cpu(c, i);Other changes should be okay as they are in line with the previous MIPS change you referenced, but let's see what Huacai thinks.
if (ret < 0)
pr_warn("topology_init: register_cpu %d failed (%d)\n", i, ret);