Messages in this thread Patch in this message | | | Date | Thu, 24 Feb 2011 15:31:24 -0800 (PST) | From | David Rientjes <> | Subject | Re: [patch] x86, mm: Fix size of numa_distance array |
| |
On Thu, 24 Feb 2011, David Rientjes wrote:
> numa_distance should be sized like the SLIT, an NxN matrix where N is the > highest node id. This patch fixes the calulcation to avoid overflowing > the array on the subsequent iteration. > > Signed-off-by: David Rientjes <rientjes@google.com> > --- > arch/x86/mm/numa_64.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c > index cccc01d..abf0131 100644 > --- a/arch/x86/mm/numa_64.c > +++ b/arch/x86/mm/numa_64.c > @@ -414,7 +414,7 @@ static int __init numa_alloc_distance(void) > > for_each_node_mask(i, nodes_parsed) > cnt = i; > - size = ++cnt * sizeof(numa_distance[0]); > + size = cnt * cnt * sizeof(numa_distance[0]); > > phys = memblock_find_in_range(0, (u64)max_pfn_mapped << PAGE_SHIFT, > size, PAGE_SIZE); >
This also looks like it needs the following to not erroneously consider a node id to be out of bounds. Why were we oversizing cnt in the old code above by 1?
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c --- a/arch/x86/mm/numa_64.c +++ b/arch/x86/mm/numa_64.c @@ -454,7 +454,7 @@ void __init numa_set_distance(int from, int to, int distance) if (!numa_distance && numa_alloc_distance() < 0) return; - if (from >= numa_distance_cnt || to >= numa_distance_cnt) { + if (from > numa_distance_cnt || to > numa_distance_cnt) { printk_once(KERN_DEBUG "NUMA: Debug: distance out of bound, from=%d to=%d distance=%d\n", from, to, distance); return; @@ -472,7 +472,7 @@ void __init numa_set_distance(int from, int to, int distance) int __node_distance(int from, int to) { - if (from >= numa_distance_cnt || to >= numa_distance_cnt) + if (from > numa_distance_cnt || to > numa_distance_cnt) return from == to ? LOCAL_DISTANCE : REMOTE_DISTANCE; return numa_distance[from * numa_distance_cnt + to]; }
| |