On Thu, Oct 01, 2026 at 04:42:53PM +0200, Mike Rapoport wrote: >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 <[email protected]> >> Acked-by: Qi Zheng <[email protected]> >> --- >> 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?
IIUC, the shared tail struct pages already initialized by vmemmap_shared_tail_page() during vmemmap population, no? It calls set_page_node() and set_page_zone() there :) Cheers, Lance
