Re: [PATCH 2/2] mm/mm_init: drop overlap_memmap_init()
From: Mike Rapoport
Date: Fri Jun 26 2026 - 03:40:46 EST
Hi Wei,
On Thu, Jun 25, 2026 at 09:58:47AM +0000, Wei Yang wrote:
> 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().
> >
>
> Do you think this is valuable to mention the double init for the overlapped
> range?
Not sure I follow.
We had this weird overlap_memmap_init() exactly to avoid double init.
> >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
--
Sincerely yours,
Mike.