diff options
author | Michael Bringmann <mwb@linux.vnet.ibm.com> | 2017-09-08 23:47:56 +0300 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2017-10-16 15:12:05 +0300 |
commit | 8bc931495d4bfcde6bb242a478ddd1186ae29301 (patch) | |
tree | a4463bc58d0d2dad99e9dce57d1c02bca39094e4 /arch/powerpc/mm/numa.c | |
parent | cee5405da4020b0b0233bc8fb7c8da7322d2c52e (diff) | |
download | linux-8bc931495d4bfcde6bb242a478ddd1186ae29301.tar.xz |
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 <mwb@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/mm/numa.c')
-rw-r--r-- | arch/powerpc/mm/numa.c | 10 |
1 files changed, 8 insertions, 2 deletions
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) { |