[PATCH 0/5] mm: hugetlb: add CMA support for PMD-sized page
From: Qi Zheng
Date: Fri Oct 16 2026 - 06:14:47 EST
From: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx>
Hi all,
Allocating PMD-sized HugeTLB pages at runtime can become slow or fail
as physical memory becomes fragmented. Reserving HugeTLB pages at boot
avoids this problem, but keeps unused pages unavailable to ordinary
allocations.
Live upgrades are one example: they need additional HugeTLB pages only
during the upgrade. HugeTLB already supports CMA for gigantic pages,
but reserving a CMA pool for 1 GiB pages can fail when physical KASLR
and other early reservations leave too few suitable 1 GiB-aligned
ranges. At runtime, 1 GiB allocations can also fail when pages cannot
be migrated out of a suitable contiguous range.
Extend CMA support to PMD-sized pages so their backing memory can be
reserved at boot while remaining usable for movable allocations until
needed. This relaxes the reservation alignment requirement and reduces
the contiguous range required per allocation.
The series adds an optional @<page-size> suffix to hugetlb_cma and a
separate PMD-sized pool. For example, on x86-64:
hugetlb_cma=4G hugetlb_cma=1G@2M
This reserves 4G for the existing gigantic-page pool and 1G for the
PMD-sized pool. Existing unsuffixed parameters and gigantic-page pool
sharing are preserved. The new size follows the architecture's PMD
size rather than being fixed at 2M.
The preparatory patches introduce per-pool state and prevent recursive
CMA allocation during migration before enabling PMD-sized allocation.
Thanks,
Qi
Qi Zheng (5):
mm: hugetlb: add explicit page size to hugetlb_cma
mm: hugetlb: group CMA pool and reservation state
mm: hugetlb: track CMA reservations by page order
mm: hugetlb: avoid recursive CMA allocation during migration
mm: hugetlb: enable CMA allocation for PMD-sized pages
.../admin-guide/kernel-parameters.txt | 39 ++-
include/linux/hugetlb.h | 4 +-
mm/hugetlb.c | 80 +++--
mm/hugetlb_cma.c | 328 ++++++++++++------
mm/hugetlb_cma.h | 11 +-
mm/mempolicy.c | 2 +-
mm/migrate.c | 3 +-
7 files changed, 306 insertions(+), 161 deletions(-)
base-commit: b810335a0699d1810683796b0e3ffe8827ddfe6c
--
2.54.0