Re: [PATCH v3] mm/memory hotplug/unplug: Optimize zone contiguous check when changing pfn range

From: David Hildenbrand (Arm)

Date: Fri Apr 17 2026 - 05:04:53 EST


On 4/17/26 08:34, Liu, Yuan1 wrote:
>
>>>
>>> Hi David & Mike
>>>
>>> I’ve spent some time working through these issues to better understand
>> them.
>>> For the overlapping physical spans(mirrored kernelcore), should I avoid
>> counting
>>> overlap_memmap_init in memmap_init_range in the next version?
>>> For example, change it as follows:
>>>
>>> +unsigned long __meminit
>>> +memmap_init_range(unsigned long size, int nid, unsigned long zone,
>>> + unsigned long start_pfn,
>>> + unsigned long zone_end_pfn,
>>> enum meminit_context context,
>>> struct vmem_altmap *altmap, int migratetype,
>>> bool isolate_pageblock)
>>> {
>>> unsigned long pfn, end_pfn = start_pfn + size;
>>> + unsigned long nr_init = 0;
>>> struct page *page;
>>>
>>> if (highest_memmap_pfn < end_pfn - 1)
>>> @@ -893,7 +897,7 @@ void __meminit memmap_init_range(unsigned long size,
>> int nid, unsigned long zone
>>> if (zone == ZONE_DEVICE) {
>>> if (!altmap)
>>> - return;
>>> + return 0;
>>>
>>> if (start_pfn == altmap->base_pfn)
>>> start_pfn += altmap->reserve;
>>> @@ -911,6 +915,7 @@ void __meminit memmap_init_range(unsigned long size,
>> int nid, unsigned long zone
>>> if (defer_init(nid, pfn, zone_end_pfn)) {
>>> deferred_struct_pages = true;
>>> + nr_init += end_pfn - pfn;
>>
>> It's confusing. Could the remaining range also include overlapping inits?
>>
>> Maybe the whole "skip overlapping init" should actually be handled on a
>> higher level?
>>
>> I guess we'd want to skip any memblock_is_mirror(r) regions entirely.
>>
>> @Mike?
>
> Hi Mike
>
> David suggested moving the overlap handling to a higher level and
> skipping memblock_is_mirror() regions entirely. I think this makes sense.
>
> Would this work for you, or do you have a different preference?

Would that allow for removing overlap_memmap_init() entirely? The more I
look at that function, the more I hate it with passion :D

--
Cheers,

David