[PATCH v4 00/13] mm: Decouple folio-based vmemmap optimization from HugeTLB
From: Muchun Song
Date: Fri Nov 06 2026 - 21:32:29 EST
Hi,
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.
Patch 1 is a standalone prerequisite fix for best-effort HVO head-page
allocation. Patches 2-9 generalize the underlying vmemmap remapping
infrastructure by removing HugeTLB-specific assumptions and simplifying
remap control and resource handling. Patches 10-13 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.
v4:
- Rebase onto mm/mm-new at f735a2c21aa9
- Split the HVO head-page allocation fix into a standalone prerequisite
and retain Yili Zhang as its author
- Add __GFP_NOWARN and pass caller-selected GFP masks through the
generalized allocator and folio-oriented helpers
- Propagate alloc_vmemmap_page_list() errors directly (suggested by Oscar
Salvador)
- Remove the redundant order check from vmemmap_pteify_folio() (suggested
by Oscar Salvador)
- Collect Reviewed-by tags from Oscar Salvador and Mike Rapoport
- Collect Tested-by from Andrew Morton
v3: https://lore.kernel.org/20261104023510.260766-1-songmuchun@xxxxxxxxxxxxx/
- Rebase onto mm/mm-new at 74d73ffcffe0
- Use two tabs for continued function parameters in modified declarations
(suggested by Mike Rapoport)
- Rework vmemmap page allocation failure cleanup to free temporary pages
directly while keeping accounting batched (suggested by Mike Rapoport)
- Collect Reviewed-by tags from Mike Rapoport
v2: https://lore.kernel.org/20261102032525.3597743-1-songmuchun@xxxxxxxxxxxxx/
- Rebase onto mm/mm-new at d42dfde37af7
- Rename the unified TLB flag to VMEMMAP_DEFER_TLB_FLUSH and clarify that
it defers only safely batchable flushes (suggested by Qi Zheng)
- Update the vmemmap page-list documentation to describe its input/output
contract (suggested by Lance Yang and Qi Zheng)
- Use page_address() instead of page_to_virt() when copying a vmemmap
replacement page
- Collect Reviewed-by tags from Lance Yang and Qi Zheng
v1: https://lore.kernel.org/20261020115306.813483-1-songmuchun@xxxxxxxxxxxxx/
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
Yili Zhang (1):
mm: hugetlb_vmemmap: fix OOM during head page allocation
include/linux/vmemmap-optimization.h | 10 +-
mm/hugetlb.c | 4 +-
mm/hugetlb_vmemmap.c | 379 ++++++++++++---------------
mm/hugetlb_vmemmap.h | 10 +-
mm/mm_init.c | 6 +-
mm/sparse-vmemmap.c | 7 +-
6 files changed, 186 insertions(+), 230 deletions(-)
base-commit: f735a2c21aa94b7b86a93d36f3b17eecc6d49aba
--
2.54.0