|
@@ -159,8 +159,13 @@ static void __init allocate_pgdat(int nid)
|
|
if (nid && node_has_online_mem(nid))
|
|
if (nid && node_has_online_mem(nid))
|
|
NODE_DATA(nid) = (pg_data_t *)node_remap_start_vaddr[nid];
|
|
NODE_DATA(nid) = (pg_data_t *)node_remap_start_vaddr[nid];
|
|
else {
|
|
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");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|