vmemmap: No need to use node_mem_map If we have a virtual memory map then we will not need a per node memory map. Do not defined node_mem_map if we have a virtual memory map and #ifdef out the code in alloc_node_mem_map. Signed-off-by: Christoph Lameter Index: linux-2.6.19-rc1-mm1/arch/ia64/mm/discontig.c =================================================================== --- linux-2.6.19-rc1-mm1.orig/arch/ia64/mm/discontig.c 2006-10-16 03:43:05.956043206 -0500 +++ linux-2.6.19-rc1-mm1/arch/ia64/mm/discontig.c 2006-10-16 20:05:20.719111828 -0500 @@ -705,10 +705,6 @@ void __init paging_init(void) for_each_online_node(node) { num_physpages += mem_data[node].num_physpages; pfn_offset = mem_data[node].min_pfn; - -#ifdef CONFIG_VIRTUAL_MEM_MAP - NODE_DATA(node)->node_mem_map = vmem_map + pfn_offset; -#endif if (mem_data[node].max_pfn > max_pfn) max_pfn = mem_data[node].max_pfn; } Index: linux-2.6.19-rc1-mm1/include/linux/mmzone.h =================================================================== --- linux-2.6.19-rc1-mm1.orig/include/linux/mmzone.h 2006-10-16 19:24:44.378702936 -0500 +++ linux-2.6.19-rc1-mm1/include/linux/mmzone.h 2006-10-16 20:05:20.761107578 -0500 @@ -361,7 +361,7 @@ typedef struct pglist_data { struct zone node_zones[MAX_NR_ZONES]; struct zonelist node_zonelists[MAX_NR_ZONES]; int nr_zones; -#ifdef CONFIG_FLAT_NODE_MEM_MAP +#if !defined(CONFIG_VIRTUAL_MEM_MAP) || defined(CONFIG_FLAT_NODE_MEM_MAP) struct page *node_mem_map; #endif struct bootmem_data *bdata; Index: linux-2.6.19-rc1-mm1/mm/page_alloc.c =================================================================== --- linux-2.6.19-rc1-mm1.orig/mm/page_alloc.c 2006-10-16 19:32:56.838407647 -0500 +++ linux-2.6.19-rc1-mm1/mm/page_alloc.c 2006-10-16 20:05:20.781617131 -0500 @@ -2505,13 +2505,13 @@ static void __meminit free_area_init_cor static void __init alloc_node_mem_map(struct pglist_data *pgdat) { +#ifndef CONFIG_VIRTUAL_MEM_MAP /* Skip empty nodes */ if (!pgdat->node_spanned_pages) return; #ifdef CONFIG_FLAT_NODE_MEM_MAP - /* ia64 gets its own node_mem_map, before this, without bootmem */ - if (!pgdat->node_mem_map) { + { unsigned long size, start, end; struct page *map; @@ -2542,6 +2542,7 @@ static void __init alloc_node_mem_map(st } #endif #endif /* CONFIG_FLAT_NODE_MEM_MAP */ +#endif /* CONFIG_VIRTUAL_MEM_MAP */ } void __meminit free_area_init_node(int nid, struct pglist_data *pgdat,