Re: [PATCH v3 6/6] mm/mm_init: add zone mismatch warning during page init

From: Mike Rapoport

Date: Thu Oct 01 2026 - 10:50:31 EST


Hi Muchun,

On Tue, Sep 29, 2026 at 01:32:31PM +0800, Muchun Song wrote:
> For vmemmap-optimized sections, tail struct pages may be backed by
> shared vmemmap pages. Those shared pages must carry the same page zone
> ID as the struct pages initialized for the section.
>
> Warn in __init_single_page() if the shared tail page has a different
> page_zone_id(), which would indicate inconsistent initialization.
>
> Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx>
> Acked-by: Qi Zheng <qi.zheng@xxxxxxxxx>
> ---
> v3:
> - Collect Acked-by from Qi Zheng
>
> v2:
> - New patch.
> ---
> mm/mm_init.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/mm/mm_init.c b/mm/mm_init.c
> index 1650d6bc1211..bd02e8d06965 100644
> --- a/mm/mm_init.c
> +++ b/mm/mm_init.c
> @@ -609,6 +609,9 @@ void __meminit __init_single_page(struct page *page, unsigned long pfn,
> if (!is_highmem_idx(zone))
> set_page_address(page, __va(pfn << PAGE_SHIFT));
> #endif
> + VM_WARN_ON_ONCE(vmemmap_optimizable_order(pfn_to_section_compound_order(pfn)) &&
> + page_zone_id(page + VMEMMAP_OPTIMIZATION_NR_STRUCT_PAGES) !=
> + page_zone_id(page));

Hmm, page + VMEMMAP_OPTIMIZATION_NR_STRUCT_PAGES is initialized a tad later
than page so it'll have stale data in the page->flags, won't it?

> }
>
> #ifdef CONFIG_NUMA
> --
> 2.54.0
>

--
Sincerely yours,
Mike.