Re: [PATCH v4 0/6] mm: Unify device DAX and HugeTLB vmemmap population paths
flat view
From: Andrew Morton <akpm@linux-foundation.org>
Date: 2026-10-10 20:42:28
Also in:
linux-mm, lkml
On Sat, 10 Oct 2026 15:57:49 +0800 Muchun Song [off-list ref] wrote:
This v4 is based on mm-new commit d5207c6d152c, which contains v6 of "mm: Switch device DAX to section-based vmemmap optimization" [1]. This series is split out from the earlier, larger series "mm: Generalize HVO for HugeTLB and device DAX" [2]. While the parent series generalizes vmemmap optimization across HugeTLB and device DAX, this subset addresses a single, self-contained step: unifying their vmemmap population paths. After the preceding Device DAX conversion, both HugeTLB and Device DAX describe optimized vmemmap mappings through memory-section metadata and use per-zone shared tail vmemmap pages. The generic code, however, still carries a Device DAX-specific population flag and compound-page population path, along with arguments and helpers needed only by that path. This series first removes VMEMMAP_POPULATE_DAX and moves selection and reference handling for the shared tail page into the common vmemmap population path. It then removes the generic Device DAX-specific compound-page population path and routes section vmemmap population through vmemmap_populate(). The powerpc radix path continues to use its architecture-specific compound-page population implementation for optimizable sections. The remaining patches remove the unused ptpfn argument, open-code vmemmap_populate_address() now that no caller needs its returned PTE, and add a warning for inconsistent zone initialization of shared tail vmemmap pages. This is the fourth smaller step toward the broader HVO generalization. After this series, HugeTLB and Device DAX use the same population model instead of parallel generic paths, while powerpc keeps its architecture-specific implementation.
Thanks, I've updated mm-unstable to this version, including the -fix.
v4: - Rebase onto mm-new commit d5207c6d152c, which contains v6 of the Device DAX section-based vmemmap series. - Factor the zone mismatch check into a local helper as suggested by Mike Rapoport. - Collect Reviewed-by tags from Lance Yang.
Here's how v4 altered mm.git: mm/mm_init.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)
--- a/mm/mm_init.c~b
+++ a/mm/mm_init.c@@ -593,6 +593,15 @@ out: node_states[N_MEMORY] = saved_node_state; } +static inline void vmemmap_optimization_verify_zone(struct page *page) +{ + const unsigned int order = pfn_to_section_compound_order(page_to_pfn(page)); + + VM_WARN_ON_ONCE(vmemmap_optimizable_order(order) && + page_zone_id(page + VMEMMAP_OPTIMIZATION_NR_STRUCT_PAGES) != + page_zone_id(page)); +} + void __meminit __init_single_page(struct page *page, unsigned long pfn, unsigned long zone, int nid) {
@@ -609,9 +618,11 @@ void __meminit __init_single_page(struct 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)); + /* + * Shared tail struct pages are initialized during vmemmap population, + * before retained struct pages reach here. + */ + vmemmap_optimization_verify_zone(page); } #ifdef CONFIG_NUMA
_