@@ -995,10 +995,11 @@ void __init do_init_bootmem(void)
start_pfn, end_pfn);
free_bootmem_with_active_regions(nid, end_pfn);
+ }
+
+ for_each_online_node(nid) {
/*
- * Be very careful about moving this around. Future
- * calls to careful_allocation() depend on this getting
- * done correctly.
+ * Be very careful about moving this around.
*/
mark_reserved_regions_for_nid(nid);
sparse_memory_present_with_active_regions(nid);
@@ -375,10 +375,14 @@ int __init reserve_bootmem_node(pg_data_
unsigned long size, int flags)
{
unsigned long start, end;
+ bootmem_data_t *bdata = pgdat->bdata;
start = PFN_DOWN(physaddr);
end = PFN_UP(physaddr + size);
+ if (end > bdata->node_low_pfn)
+ end = bdata->node_low_pfn;
+
return mark_bootmem_node(pgdat->bdata, start, end, 1, flags);
}