From: Michael Bringmann Date: Fri, 8 Sep 2017 20:47:56 +0000 (-0500) Subject: powerpc/vphn: Fix numa update end-loop bug X-Git-Tag: v4.15-rc1~81^2~106 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=8bc931495d4bfcde6bb242a478ddd1186ae29301;p=users%2Fjedix%2Flinux-maple.git powerpc/vphn: Fix numa update end-loop bug powerpc/vphn: On Power systems with shared configurations of CPUs and memory, there are some issues with the association of additional CPUs and memory to nodes when hot-adding resources. This patch fixes an end-of-updates processing problem observed occasionally in numa_update_cpu_topology(). Signed-off-by: Michael Bringmann Signed-off-by: Michael Ellerman --- diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 32f5f8db46ec..ec098b3f7332 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c @@ -1401,16 +1401,22 @@ int numa_update_cpu_topology(bool cpus_locked) for_each_cpu(sibling, cpu_sibling_mask(cpu)) { ud = &updates[i++]; + ud->next = &updates[i]; ud->cpu = sibling; ud->new_nid = new_nid; ud->old_nid = numa_cpu_lookup_table[sibling]; cpumask_set_cpu(sibling, &updated_cpus); - if (i < weight) - ud->next = &updates[i]; } cpu = cpu_last_thread_sibling(cpu); } + /* + * Prevent processing of 'updates' from overflowing array + * where last entry filled in a 'next' pointer. + */ + if (i) + updates[i-1].next = NULL; + pr_debug("Topology update for the following CPUs:\n"); if (cpumask_weight(&updated_cpus)) { for (ud = &updates[0]; ud; ud = ud->next) {