Fix alloc_node_mem_map() to work on ia64 again
Subsystems (2)
PATCH 1/1 Fix alloc_node_mem_map() to work on ia64 again
In commit a1c34a3bf00af2cede839879502e12dc68491ad5
"mm: Don't offset memmap for flatmem"
Laura fixed a problem for Srinivas relating to the bottom 2MB of RAM on an ARM IFC6410 board.
One small wrinkle on ia64 is that it allocates the node_mem_map earlier in arch code, so it skips the block of code where "offset" is initialized.
Move initialization of start and offset before the check for the node_mem_map so that they will always be available in the latter part of the function.
Tested-by Laura Abbott <[email protected]>
Fixes a1c34a3bf00a (mm: Don't offset memmap for flatmem)
Signed-off-by Tony Luck <[email protected]>
--- mm/page_alloc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
mm/page_alloc.c +4 -3
@@ -5266,6 +5266,7 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat) static void __init_refok alloc_node_mem_map(struct pglist_data *pgdat) { +unsigned long __maybe_unused start =0 ;unsigned long __maybe_unused offset =0 ;/* Skip empty nodes */
@@ -5273,9 +5274,11 @@ static void __init_refok alloc_node_mem_map(struct pglist_data *pgdat)return ;#ifdef CONFIG_FLAT_NODE_MEM_MAP + start = pgdat->node_start_pfn & ~(MAX_ORDER_NR_PAGES -1 ); + offset = pgdat->node_start_pfn - start;/* ia64 gets its own node_mem_map, before this, without bootmem */ if (!pgdat->node_mem_map) { -unsigned long size, start, end; +unsigned long size, end;struct page *map;/*
@@ -5283,8 +5286,6 @@ static void __init_refok alloc_node_mem_map(struct pglist_data *pgdat)* aligned but the node_mem_map endpoints must be in order * for the buddy allocator to function correctly. */ - start = pgdat->node_start_pfn & ~(MAX_ORDER_NR_PAGES -1 ); - offset = pgdat->node_start_pfn - start; end =pgdat_end_pfn (pgdat); end =ALIGN (end,MAX_ORDER_NR_PAGES ); size = (end - start) *sizeof (struct page );
Signature · 1 line
2.1.4