162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci#include <linux/highmem.h>
362306a36Sopenharmony_ci#include <linux/export.h>
462306a36Sopenharmony_ci#include <linux/swap.h> /* for totalram_pages */
562306a36Sopenharmony_ci#include <linux/memblock.h>
662306a36Sopenharmony_ci#include <asm/numa.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_civoid __init set_highmem_pages_init(void)
962306a36Sopenharmony_ci{
1062306a36Sopenharmony_ci	struct zone *zone;
1162306a36Sopenharmony_ci	int nid;
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci	/*
1462306a36Sopenharmony_ci	 * Explicitly reset zone->managed_pages because set_highmem_pages_init()
1562306a36Sopenharmony_ci	 * is invoked before memblock_free_all()
1662306a36Sopenharmony_ci	 */
1762306a36Sopenharmony_ci	reset_all_zones_managed_pages();
1862306a36Sopenharmony_ci	for_each_zone(zone) {
1962306a36Sopenharmony_ci		unsigned long zone_start_pfn, zone_end_pfn;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci		if (!is_highmem(zone))
2262306a36Sopenharmony_ci			continue;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci		zone_start_pfn = zone->zone_start_pfn;
2562306a36Sopenharmony_ci		zone_end_pfn = zone_start_pfn + zone->spanned_pages;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci		nid = zone_to_nid(zone);
2862306a36Sopenharmony_ci		printk(KERN_INFO "Initializing %s for node %d (%08lx:%08lx)\n",
2962306a36Sopenharmony_ci				zone->name, nid, zone_start_pfn, zone_end_pfn);
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci		add_highpages_with_active_regions(nid, zone_start_pfn,
3262306a36Sopenharmony_ci				 zone_end_pfn);
3362306a36Sopenharmony_ci	}
3462306a36Sopenharmony_ci}
35