[PATCH 00/12] mm: Decouple folio-based vmemmap optimization from HugeTLB

From: Muchun Song

Date: Tue Oct 20 2026 - 07:54:17 EST


Section-based vmemmap optimization is implemented in sparse-vmemmap.c,
while folio-based optimization currently lives in hugetlb_vmemmap.c.
The latter is tightly coupled to HugeTLB-specific state even though the
underlying page-table remapping operates on one folio at a time.

To make these interfaces easier to maintain, the folio-based remapping
mechanics first need a boundary that is independent of HugeTLB-specific
state and raw address ranges. This will allow the mechanics to be moved
into a common vmemmap optimization layer alongside the section-based
interface.

This series establishes that boundary through three folio-oriented
operations, each with a distinct role:

- vmemmap_optimize_folio() optimizes the vmemmap backing of a folio;
- vmemmap_restore_folio() restores the vmemmap backing of a folio; and
- vmemmap_pteify_folio() converts the vmemmap backing of a folio to
PTE mappings.

Together, these operations encapsulate the address-range calculation and
remapping mechanics for a folio. HugeTLB wrappers retain policy decisions
such as eligibility, optimized state, batching and TLB flush handling.

Patches 1-8 generalize the underlying vmemmap remapping infrastructure by
removing HugeTLB-specific assumptions and simplifying remap control and
resource handling. Patches 9-12 then establish folio-oriented operations
for optimization, restoration and PTE conversion.

The implementation remains in hugetlb_vmemmap.c for now. A follow-up can
move the folio-based operations into the common vmemmap optimization layer
once the interface boundary is in place.

Muchun Song (12):
mm: hugetlb_vmemmap: remove HugeTLB-specific vmemmap optimization
macros
mm: hugetlb_vmemmap: unify VMEMMAP_{SPLIT,REMAP}_NO_TLB_FLUSH
mm: hugetlb_vmemmap: simplify vmemmap head page handling
mm: hugetlb_vmemmap: generalize vmemmap page allocation
mm: hugetlb_vmemmap: unify writable vmemmap page preparation
mm: hugetlb_vmemmap: rename vmemmap_remap_pte() to
vmemmap_optimize_pte()
mm: hugetlb_vmemmap: simplify shared tail page handling
mm: hugetlb_vmemmap: move alloc_vmemmap_page_list() next to its free
helper
mm: hugetlb_vmemmap: make vmemmap optimization folio-oriented
mm: hugetlb_vmemmap: make vmemmap restoration folio-oriented
mm: hugetlb_vmemmap: unify vmemmap range restoration
mm: hugetlb_vmemmap: make vmemmap PTE conversion folio-oriented

include/linux/vmemmap-optimization.h | 10 +-
mm/hugetlb.c | 4 +-
mm/hugetlb_vmemmap.c | 364 ++++++++++++---------------
mm/hugetlb_vmemmap.h | 10 +-
mm/mm_init.c | 6 +-
mm/sparse-vmemmap.c | 5 +-
6 files changed, 176 insertions(+), 223 deletions(-)


base-commit: 59d7f9ec14ad4b6f38c04d254f8f2bfb991e888e
--
2.54.0