Re: [PATCH 2/2] mm/mm_init: drop overlap_memmap_init()

From: Wei Yang

Date: Thu Jun 25 2026 - 06:01:30 EST


On Thu, Jun 25, 2026 at 10:39:40AM +0300, Mike Rapoport wrote:
>From: "Mike Rapoport (Microsoft)" <rppt@xxxxxxxxxx>
>
>When ZONE_NORMAL and ZONE_MOVABLE could overlap because kernelcore=mirror
>didn't reduce the span of ZONE_NORMAL, initialization of the memory map had
>to skip overlapping pages during initialization of ZONE_MOVABLE to avoid
>double initialization of the same struct pages.
>
>Since kernelcore=mirror works now the same way as other variants of
>kernelcore=/movablecore=, and adjusts the span of ZONE_NORMAL, there can't
>be an overlap between ZONE_NORMAL and ZONE_MOVABLE.
>
>Remove overlap_memmap_init().
>

Hi, Mike

Do you think this is valuable to mention the double init for the overlapped
range?

>Co-developed-by: Wei Yang <richard.weiyang@xxxxxxxxx>
>Signed-off-by: Wei Yang <richard.weiyang@xxxxxxxxx>
>Signed-off-by: Mike Rapoport (Microsoft) <rppt@xxxxxxxxxx>
>---
> mm/mm_init.c | 24 ------------------------
> 1 file changed, 24 deletions(-)
>
>diff --git a/mm/mm_init.c b/mm/mm_init.c
>index dce9dc9f2302..6f0a71ccca30 100644
>--- a/mm/mm_init.c
>+++ b/mm/mm_init.c
>@@ -783,28 +783,6 @@ void __meminit init_deferred_page(unsigned long pfn, int nid)
> __init_deferred_page(pfn, nid);
> }
>
>-/* 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)
>-{
>- static struct memblock_region *r __meminitdata;
>-
>- if (mirrored_kernelcore && zone == ZONE_MOVABLE) {
>- if (!r || *pfn >= memblock_region_memory_end_pfn(r)) {
>- for_each_mem_region(r) {
>- if (*pfn < memblock_region_memory_end_pfn(r))
>- break;
>- }
>- }
>- if (*pfn >= memblock_region_memory_base_pfn(r) &&
>- memblock_is_mirror(r)) {
>- *pfn = memblock_region_memory_end_pfn(r);
>- return true;
>- }
>- }
>- return false;
>-}
>-
> /*
> * Only struct pages that correspond to ranges defined by memblock.memory
> * are zeroed and initialized by going through __init_single_page() during
>@@ -891,8 +869,6 @@ void __meminit memmap_init_range(unsigned long size, int nid, unsigned long zone
> * function. They do not exist on hotplugged memory.
> */
> if (context == MEMINIT_EARLY) {
>- if (overlap_memmap_init(zone, &pfn))
>- continue;
> if (defer_init(nid, pfn, zone_end_pfn)) {
> deferred_struct_pages = true;
> break;
>--
>2.53.0

--
Wei Yang
Help you, Help me