Messages in this thread Patch in this message | | | From | Laurent Vivier <> | Subject | [PATCH] powerpc/numa: fix hot-added CPU on memory-less node | Date | Wed, 14 Nov 2018 18:03:19 +0100 |
| |
Trying to hotplug a CPU on an empty NUMA node (without memory or CPU) crashes the kernel when the CPU is onlined.
During the onlining process, the kernel calls start_secondary() that ends by calling set_numa_mem(local_memory_node(numa_cpu_lookup_table[cpu])) that relies on NODE_DATA(nid)->node_zonelists and in our case NODE_DATA(nid) is NULL.
To fix that, add the same checking as we already have in find_and_online_cpu_nid(): if NODE_DATA() is NULL, use the first online node.
Bug: https://github.com/linuxppc/linux/issues/184 Fixes: ea05ba7c559c8e5a5946c3a94a2a266e9a6680a6 (powerpc/numa: Ensure nodes initialized for hotplug) Signed-off-by: Laurent Vivier <lvivier@redhat.com> --- arch/powerpc/mm/numa.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 3a048e98a132..1b2d25a3c984 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c @@ -483,6 +483,15 @@ static int numa_setup_cpu(unsigned long lcpu) if (nid < 0 || !node_possible(nid)) nid = first_online_node; + if (NODE_DATA(nid) == NULL) { + /* + * Default to using the nearest node that has memory installed. + * Otherwise, it would be necessary to patch the kernel MM code + * to deal with more memoryless-node error conditions. + */ + nid = first_online_node; + } + map_cpu_to_node(lcpu, nid); of_node_put(cpu); out: -- 2.17.2
| |