Commit 8b7b8538 authored by Mike Rapoport (Microsoft)'s avatar Mike Rapoport (Microsoft)
Browse files

memblock: move reserve_bootmem_range() to memblock.c and make it static



reserve_bootmem_region() is only called from
memmap_init_reserved_pages() and it was in mm/mm_init.c because of its
dependecies on static init_deferred_page().

Since init_deferred_page() is not static anymore, move
reserve_bootmem_region(), rename it to memmap_init_reserved_range() and
make it static.

Update the comment describing it to better reflect what the function
does and drop bogus comment about reserved pages in free_bootmem_page().

Update memblock test stubs to reflect the core changes.

Reviewed-by: default avatarLorenzo Stoakes (Oracle) <ljs@kernel.org>
Reviewed-by: default avatarDavid Hildenbrand (Arm) <david@kernel.org>
Link: https://patch.msgid.link/20260323072042.3651061-1-rppt@kernel.org


Signed-off-by: default avatarMike Rapoport (Microsoft) <rppt@kernel.org>
parent 0709682c
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -44,10 +44,6 @@ static inline void free_bootmem_page(struct page *page)
{
	enum bootmem_type type = bootmem_type(page);

	/*
	 * The reserve_bootmem_region sets the reserved flag on bootmem
	 * pages.
	 */
	VM_BUG_ON_PAGE(page_ref_count(page) != 2, page);

	if (type == SECTION_INFO || type == MIX_SECTION_INFO)
+0 −3
Original line number Diff line number Diff line
@@ -3686,9 +3686,6 @@ extern unsigned long free_reserved_area(void *start, void *end,

extern void adjust_managed_page_count(struct page *page, long count);

extern void reserve_bootmem_region(phys_addr_t start,
				   phys_addr_t end, int nid);

/* Free the reserved page into the buddy system, so it gets managed. */
void free_reserved_page(struct page *page);

+28 −3
Original line number Diff line number Diff line
@@ -974,7 +974,7 @@ __init void memmap_init_kho_scratch_pages(void)
	/*
	 * Initialize struct pages for free scratch memory.
	 * The struct pages for reserved scratch memory will be set up in
	 * reserve_bootmem_region()
	 * memmap_init_reserved_pages()
	 */
	__for_each_mem_range(i, &memblock.memory, NULL, NUMA_NO_NODE,
			     MEMBLOCK_KHO_SCRATCH, &start, &end, &nid) {
@@ -2241,6 +2241,31 @@ static unsigned long __init __free_memory_core(phys_addr_t start,
	return end_pfn - start_pfn;
}

/*
 * Initialised pages do not have PageReserved set. This function is called
 * for each reserved range and marks the pages PageReserved.
 * When deferred initialization of struct pages is enabled it also ensures
 * that struct pages are properly initialised.
 */
static void __init memmap_init_reserved_range(phys_addr_t start,
					      phys_addr_t end, int nid)
{
	unsigned long pfn;

	for_each_valid_pfn(pfn, PFN_DOWN(start), PFN_UP(end)) {
		struct page *page = pfn_to_page(pfn);

		init_deferred_page(pfn, nid);

		/*
		 * no need for atomic set_bit because the struct
		 * page is not visible yet so nobody should
		 * access it yet.
		 */
		__SetPageReserved(page);
	}
}

static void __init memmap_init_reserved_pages(void)
{
	struct memblock_region *region;
@@ -2260,7 +2285,7 @@ static void __init memmap_init_reserved_pages(void)
		end = start + region->size;

		if (memblock_is_nomap(region))
			reserve_bootmem_region(start, end, nid);
			memmap_init_reserved_range(start, end, nid);

		memblock_set_node(start, region->size, &memblock.reserved, nid);
	}
@@ -2285,7 +2310,7 @@ static void __init memmap_init_reserved_pages(void)
			if (!numa_valid_node(nid))
				nid = early_pfn_to_nid(PFN_DOWN(start));

			reserve_bootmem_region(start, end, nid);
			memmap_init_reserved_range(start, end, nid);
		}
	}
}
+0 −25
Original line number Diff line number Diff line
@@ -772,31 +772,6 @@ void __meminit init_deferred_page(unsigned long pfn, int nid)
	__init_deferred_page(pfn, nid);
}

/*
 * Initialised pages do not have PageReserved set. This function is
 * called for each range allocated by the bootmem allocator and
 * marks the pages PageReserved. The remaining valid pages are later
 * sent to the buddy page allocator.
 */
void __meminit reserve_bootmem_region(phys_addr_t start,
				      phys_addr_t end, int nid)
{
	unsigned long pfn;

	for_each_valid_pfn(pfn, PFN_DOWN(start), PFN_UP(end)) {
		struct page *page = pfn_to_page(pfn);

		__init_deferred_page(pfn, nid);

		/*
		 * no need for atomic set_bit because the struct
		 * page is not visible yet so nobody should
		 * access it yet.
		 */
		__SetPageReserved(page);
	}
}

/* If zone is ZONE_MOVABLE but memory is mirrored, it is an overlapped init */
static bool __meminit
overlap_memmap_init(unsigned long zone, unsigned long *pfn)
+0 −2
Original line number Diff line number Diff line
@@ -32,8 +32,6 @@ static inline phys_addr_t virt_to_phys(volatile void *address)
	return (phys_addr_t)address;
}

void reserve_bootmem_region(phys_addr_t start, phys_addr_t end, int nid);

static inline void totalram_pages_inc(void)
{
}
Loading