Commit 3de9c42d authored by Jiaxun Yang's avatar Jiaxun Yang Committed by Huacai Chen
Browse files

LoongArch: Add all CPUs enabled by fdt to NUMA node 0



NUMA enabled kernel on FDT based machine fails to boot because CPUs
are all in NUMA_NO_NODE and mm subsystem won't accept that.

Fix by adding them to default NUMA node at FDT parsing phase and move
numa_add_cpu(0) to a later point.

Cc: stable@vger.kernel.org
Fixes: 88d4d957 ("LoongArch: Add FDT booting support from efi system table")
Signed-off-by: default avatarJiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent b56f67a6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ extern int early_cpu_to_node(int cpu);
static inline void early_numa_add_cpu(int cpuid, s16 node)	{ }
static inline void numa_add_cpu(unsigned int cpu)		{ }
static inline void numa_remove_cpu(unsigned int cpu)		{ }
static inline void set_cpuid_to_node(int cpuid, s16 node)	{ }

static inline int early_cpu_to_node(int cpu)
{
+4 −1
Original line number Diff line number Diff line
@@ -273,7 +273,6 @@ static void __init fdt_smp_setup(void)

		if (cpuid == loongson_sysconf.boot_cpu_id) {
			cpu = 0;
			numa_add_cpu(cpu);
		} else {
			cpu = cpumask_next_zero(-1, cpu_present_mask);
		}
@@ -283,6 +282,9 @@ static void __init fdt_smp_setup(void)
		set_cpu_present(cpu, true);
		__cpu_number_map[cpuid] = cpu;
		__cpu_logical_map[cpu] = cpuid;

		early_numa_add_cpu(cpu, 0);
		set_cpuid_to_node(cpuid, 0);
	}

	loongson_sysconf.nr_cpus = num_processors;
@@ -468,6 +470,7 @@ void smp_prepare_boot_cpu(void)
	set_cpu_possible(0, true);
	set_cpu_online(0, true);
	set_my_cpu_offset(per_cpu_offset(0));
	numa_add_cpu(0);

	rr_node = first_node(node_online_map);
	for_each_possible_cpu(cpu) {