x86: extend e820 early_res support 32bit -fix #4
authorYinghai Lu <yhlu.kernel@gmail.com>
Thu, 29 May 2008 19:57:22 +0000 (12:57 -0700)
committerIngo Molnar <mingo@elte.hu>
Sat, 31 May 2008 07:55:50 +0000 (09:55 +0200)
reserve_early pgdata for 32bit numa

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/discontig_32.c

index 914ccf983687dd276b8cc5827d4430cf093fd822..47749727907ed84e2d801ddec6bc268e38ef1452 100644 (file)
@@ -159,8 +159,13 @@ static void __init allocate_pgdat(int nid)
        if (nid && node_has_online_mem(nid))
                NODE_DATA(nid) = (pg_data_t *)node_remap_start_vaddr[nid];
        else {
-               NODE_DATA(nid) = (pg_data_t *)(pfn_to_kaddr(min_low_pfn));
-               min_low_pfn += PFN_UP(sizeof(pg_data_t));
+               unsigned long pgdat_phys;
+               pgdat_phys = find_e820_area(min_low_pfn<<PAGE_SHIFT,
+                                max_low_pfn<<PAGE_SHIFT, sizeof(pg_data_t),
+                                PAGE_SIZE);
+               NODE_DATA(nid) = (pg_data_t *)(pfn_to_kaddr(pgdat_phys>>PAGE_SHIFT));
+               reserve_early(pgdat_phys, pgdat_phys + sizeof(pg_data_t),
+                             "NODE_DATA");
        }
 }