Re: [PATCH v6 1/2] mm/memory_hotplug: optimize zone contiguous check when changing pfn range

From: David Hildenbrand (Arm)

Date: Fri Aug 07 2026 - 07:32:51 EST


On 8/6/26 11:52, Liu, Yuan1 wrote:
>> -----Original Message-----
>> From: David Hildenbrand (Arm) <david@xxxxxxxxxx>
>> Sent: Thursday, August 6, 2026 4:46 PM
>> To: Liu, Yuan1 <yuan1.liu@xxxxxxxxx>; Oscar Salvador <osalvador@xxxxxxx>;
>> Mike Rapoport <rppt@xxxxxxxxxx>; Wei Yang <richard.weiyang@xxxxxxxxx>
>> Cc: linux-mm@xxxxxxxxx; Zou, Nanhai <nanhai.zou@xxxxxxxxx>; Deng, Pan
>> <pan.deng@xxxxxxxxx>; Li, Tianyou <tianyou.li@xxxxxxxxx>; Chen Zhang
>> <zhangchen.kidd@xxxxxx>; Zeng, Jason <jason.zeng@xxxxxxxxx>; linux-
>> kernel@xxxxxxxxxxxxxxx
>> Subject: Re: [PATCH v6 1/2] mm/memory_hotplug: optimize zone contiguous
>> check when changing pfn range
>>
>>
>>>
>>> Will do.
>>>
>>>
>>> pages_with_online_memmap counts all PFNs where pfn_to_online_page() is
>>> valid. With CONFIG_SPARSEMEM_VMEMMAP, pfn_section_valid() operates at
>>> PAGES_PER_SUBSECTION granularity — when any page in a subsection has
>>> memory, the entire subsection is valid/online. So we align to subsection
>>> boundaries to include hole pages within partially-populated subsections.
>>
>> But we must never account exceeding the zone range. So I don't understand
>> why we
>> would have to care about PAGES_PER_SUBSECTION here at all?
>
> We never account beyond the zone range, because `sub_start` and
> `sub_end` are still clamped to the zone boundaries after the
> alignment.
>
> The subsection alignment is needed for hole PFNs between memblocks
> within the zone. These hole PFNs are valid for
> `pfn_to_online_page()`, because they sit in a subsection that has
> memory, so the whole subsection's memmap is online.
>
> |----------- zone range -----------|
>
> +-----------+---------+------------+
> + memblock 1| hole | memblock 2 |
> +-----------+---------+------------+
> ^
> |
> |
> subsection boundary

Right, but init_unavailable_range() can just return how many were actually
initalized? Why can't we piggy-back on that?

I think we had something similar previously, why can't we use that?

We know the zone span, so we can just account all the mmap in the zone span
that we initialize.

What is the problem with that?

--
Cheers,

David