For empty zone, it's unnecessary to account for pages used by memmap. Also, the pages reserved in dma zone can be ignored. Signed-off-by: Haifeng Xu <haifeng.xu@xxxxxxxxxx> --- mm/mm_init.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mm/mm_init.c b/mm/mm_init.c index 232efac9a929..b82718d596c3 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -1543,6 +1543,13 @@ static void __init free_area_init_core(struct pglist_data *pgdat) size = zone->spanned_pages; freesize = zone->present_pages; + if (!size) { + nr_kernel_pages += 0; + nr_all_pages += 0; + zone_init_internals(zone, j, nid, 0); + continue; + } + /* * Adjust freesize so that it accounts for how much memory * is used by this zone for memmap. This affects the watermark @@ -1579,10 +1586,6 @@ static void __init free_area_init_core(struct pglist_data *pgdat) * And all highmem pages will be managed by the buddy system. */ zone_init_internals(zone, j, nid, freesize); - - if (!size) - continue; - setup_usemap(zone); init_currently_empty_zone(zone, zone->zone_start_pfn, size); } -- 2.25.1