|
@@ -1143,10 +1143,9 @@ static void free_one_page(struct zone *zone,
|
|
|
}
|
|
|
|
|
|
static void __meminit __init_single_page(struct page *page, unsigned long pfn,
|
|
|
- unsigned long zone, int nid, bool zero)
|
|
|
+ unsigned long zone, int nid)
|
|
|
{
|
|
|
- if (zero)
|
|
|
- mm_zero_struct_page(page);
|
|
|
+ mm_zero_struct_page(page);
|
|
|
set_page_links(page, zone, nid, pfn);
|
|
|
init_page_count(page);
|
|
|
page_mapcount_reset(page);
|
|
@@ -1160,12 +1159,6 @@ static void __meminit __init_single_page(struct page *page, unsigned long pfn,
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-static void __meminit __init_single_pfn(unsigned long pfn, unsigned long zone,
|
|
|
- int nid, bool zero)
|
|
|
-{
|
|
|
- return __init_single_page(pfn_to_page(pfn), pfn, zone, nid, zero);
|
|
|
-}
|
|
|
-
|
|
|
#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
|
|
|
static void __meminit init_reserved_page(unsigned long pfn)
|
|
|
{
|
|
@@ -1184,7 +1177,7 @@ static void __meminit init_reserved_page(unsigned long pfn)
|
|
|
if (pfn >= zone->zone_start_pfn && pfn < zone_end_pfn(zone))
|
|
|
break;
|
|
|
}
|
|
|
- __init_single_pfn(pfn, zid, nid, true);
|
|
|
+ __init_single_page(pfn_to_page(pfn), pfn, zid, nid);
|
|
|
}
|
|
|
#else
|
|
|
static inline void init_reserved_page(unsigned long pfn)
|
|
@@ -1501,7 +1494,7 @@ static unsigned long __init deferred_init_pages(int nid, int zid,
|
|
|
} else {
|
|
|
page++;
|
|
|
}
|
|
|
- __init_single_page(page, pfn, zid, nid, true);
|
|
|
+ __init_single_page(page, pfn, zid, nid);
|
|
|
nr_pages++;
|
|
|
}
|
|
|
return (nr_pages);
|
|
@@ -5434,6 +5427,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
|
|
|
pg_data_t *pgdat = NODE_DATA(nid);
|
|
|
unsigned long pfn;
|
|
|
unsigned long nr_initialised = 0;
|
|
|
+ struct page *page;
|
|
|
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
|
|
|
struct memblock_region *r = NULL, *tmp;
|
|
|
#endif
|
|
@@ -5486,6 +5480,11 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
|
|
|
#endif
|
|
|
|
|
|
not_early:
|
|
|
+ page = pfn_to_page(pfn);
|
|
|
+ __init_single_page(page, pfn, zone, nid);
|
|
|
+ if (context == MEMMAP_HOTPLUG)
|
|
|
+ SetPageReserved(page);
|
|
|
+
|
|
|
/*
|
|
|
* Mark the block movable so that blocks are reserved for
|
|
|
* movable at startup. This will force kernel allocations
|
|
@@ -5502,15 +5501,8 @@ not_early:
|
|
|
* because this is done early in sparse_add_one_section
|
|
|
*/
|
|
|
if (!(pfn & (pageblock_nr_pages - 1))) {
|
|
|
- struct page *page = pfn_to_page(pfn);
|
|
|
-
|
|
|
- __init_single_page(page, pfn, zone, nid,
|
|
|
- context != MEMMAP_HOTPLUG);
|
|
|
set_pageblock_migratetype(page, MIGRATE_MOVABLE);
|
|
|
cond_resched();
|
|
|
- } else {
|
|
|
- __init_single_pfn(pfn, zone, nid,
|
|
|
- context != MEMMAP_HOTPLUG);
|
|
|
}
|
|
|
}
|
|
|
}
|