Messages in this thread Patch in this message | | | Date | Fri, 18 Feb 2011 10:59:03 -0800 | From | Yinghai Lu <> | Subject | [PATCH 1/4] x86, numa: Do not scan two times for setup_node_bootmem() |
| |
We don't need to scan two times for setup_node_bootmem() because We are using mapped memblock for node_data finding already.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
--- arch/x86/mm/numa_64.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-)
Index: linux-2.6/arch/x86/mm/numa_64.c =================================================================== --- linux-2.6.orig/arch/x86/mm/numa_64.c +++ linux-2.6/arch/x86/mm/numa_64.c @@ -480,7 +480,7 @@ static bool __init numa_meminfo_cover_me static int __init numa_register_memblks(struct numa_meminfo *mi) { - int i, j, nid; + int i, nid; /* Account for nodes with cpus and no memory */ node_possible_map = numa_nodes_parsed; @@ -507,27 +507,22 @@ static int __init numa_register_memblks( init_memory_mapping_high(); /* - * Finally register nodes. Do it twice in case setup_node_bootmem - * missed one due to missing bootmem. + * Do not do that twice, not needed! + * We are using mapped memblock directly for node data */ - for (i = 0; i < 2; i++) { - for_each_node_mask(nid, node_possible_map) { - u64 start = (u64)max_pfn << PAGE_SHIFT; - u64 end = 0; + for_each_node_mask(nid, node_possible_map) { + u64 start = (u64)max_pfn << PAGE_SHIFT; + u64 end = 0; - if (node_online(nid)) + for (i = 0; i < mi->nr_blks; i++) { + if (nid != mi->blk[i].nid) continue; - - for (j = 0; j < mi->nr_blks; j++) { - if (nid != mi->blk[j].nid) - continue; - start = min(mi->blk[j].start, start); - end = max(mi->blk[j].end, end); - } - - if (start < end) - setup_node_bootmem(nid, start, end); + start = min(mi->blk[i].start, start); + end = max(mi->blk[i].end, end); } + + if (start < end) + setup_node_bootmem(nid, start, end); } return 0;
| |