Skip to content

Commit

Permalink
LoongArch: Add all CPUs enabled by fdt to NUMA node 0
Browse files Browse the repository at this point in the history
commit 3de9c42d02a79a5e09bbee7a4421ddc00cfd5c6d upstream.

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: [email protected]
Fixes: 88d4d95 ("LoongArch: Add FDT booting support from efi system table")
Signed-off-by: Jiaxun Yang <[email protected]>
Signed-off-by: Huacai Chen <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
FlyGoat authored and Avenger-285714 committed Dec 10, 2024
1 parent 95d2323 commit 4bf71e2
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 1 deletion.
1 change: 1 addition & 0 deletions arch/loongarch/include/asm/numa.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,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)
{
Expand Down
5 changes: 4 additions & 1 deletion arch/loongarch/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,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);
}
Expand All @@ -294,6 +293,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;
Expand Down Expand Up @@ -477,6 +479,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) {
Expand Down

0 comments on commit 4bf71e2

Please sign in to comment.