Thread the user_addr parameter through alloc_gigantic_frozen_folio so that
gigantic page allocations can benefit from cache-friendly zeroing.

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 a999f3ead852..3a6afbe99116 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1375,7 +1375,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;
 
@@ -1386,13 +1386,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;
 }
@@ -1862,7 +1864,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


Reply via email to