Thread the user_addr parameter through alloc_gigantic_frozen_folio so that gigantic page allocations can benefit from cache-friendly zeroing.
Note: the CMA path (hugetlb_cma_alloc_frozen_folio) does not receive user_addr because CMA uses alloc_contig_frozen_pages, not the _user variant. CMA-allocated pages get zeroed via the normal __GFP_ZERO path without cache-friendly addressing. This is acceptable: gigantic pages are rare and the CMA path is a fallback when buddy allocation fails. Signed-off-by: Michael S. Tsirkin <[email protected]> Assisted-by: Claude:claude-opus-4-6 --- mm/hugetlb.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index f3bc15a7889a..5d7e546565f5 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1355,7 +1355,7 @@ static struct folio *dequeue_hugetlb_folio_vma(struct hstate *h, #if defined(CONFIG_ARCH_HAS_GIGANTIC_PAGE) && defined(CONFIG_CONTIG_ALLOC) static struct folio *alloc_gigantic_frozen_folio(int order, gfp_t gfp_mask, - int nid, nodemask_t *nodemask) + int nid, nodemask_t *nodemask, unsigned long addr) { struct folio *folio; @@ -1366,13 +1366,15 @@ static struct folio *alloc_gigantic_frozen_folio(int order, gfp_t gfp_mask, if (hugetlb_cma_exclusive_alloc()) return NULL; - folio = (struct folio *)alloc_contig_frozen_pages(1 << order, gfp_mask, - nid, nodemask); + folio = (struct folio *)alloc_contig_frozen_pages_user(1 << order, + gfp_mask, + nid, nodemask, + addr); return folio; } #else /* !CONFIG_ARCH_HAS_GIGANTIC_PAGE || !CONFIG_CONTIG_ALLOC */ static struct folio *alloc_gigantic_frozen_folio(int order, gfp_t gfp_mask, int nid, - nodemask_t *nodemask) + nodemask_t *nodemask, unsigned long addr) { return NULL; } @@ -1842,7 +1844,8 @@ static struct folio *only_alloc_fresh_hugetlb_folio(struct hstate *h, nid = numa_mem_id(); if (order_is_gigantic(order)) - folio = alloc_gigantic_frozen_folio(order, gfp_mask, nid, nmask); + folio = alloc_gigantic_frozen_folio(order, gfp_mask, nid, nmask, + addr); else folio = alloc_buddy_frozen_folio(order, gfp_mask, nid, nmask, node_alloc_noretry, addr); -- MST

