x86-64, NUMA: Fix distance table handling
authorYinghai Lu <yinghai@kernel.org>
Wed, 2 Mar 2011 10:22:14 +0000 (11:22 +0100)
committerTejun Heo <tj@kernel.org>
Wed, 2 Mar 2011 15:34:09 +0000 (16:34 +0100)
commitce0033307f1b45e23e0c149f56ea4855eb4687ce
treea6e87fd74269aafacf62805252de181b9d499579
parentcc28989437de5617875a2943697fe6ba51a0da8f
x86-64, NUMA: Fix distance table handling

NUMA distance table handling has the following problems.

* numa_reset_distance() uses numa_distance * sizeof(numa_distance[0])
  as the table size when it should be using the square of
  numa_distance.

* The same size miscalculation when allocation space for phys_dist in
  numa_emulation().

* In numa_emulation(), phys_dist must be reserved; otherwise, the new
  emulated distance table may overlap it.

Fix them and, while at it, take numa_distance_cnt resetting in
numa_reset_distance() out of the if block to simplify the code a bit.

David Rientjes reported incorrect handling of distance table during
emulation.

-tj: Edited out numa_alloc_distance() related changes which weren't
     necessary and rewrote patch description.

-v2: Ingo was unhappy with 80-column limit induced linebreaks.  Let
     lines run over 80-column.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Reported-by: David Rientjes <rientjes@google.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Ingo Molnar <mingo@elte.hu>
Acked-by: David Rientjes <rientjes@google.com>
arch/x86/mm/numa_64.c
arch/x86/mm/numa_emulation.c