Use vma_alloc_folio_hints() and check PGHINT_ZEROED to skip
folio_zero_user() in the mTHP anonymous page allocation path
when the page is already zeroed.

Signed-off-by: Michael S. Tsirkin <[email protected]>
Assisted-by: Claude:claude-opus-4-6
Assisted-by: cursor-agent:GPT-5.4-xhigh
---
 mm/memory.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/mm/memory.c b/mm/memory.c
index c65e82c86fed..066e2c9781dc 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -5179,8 +5179,10 @@ static struct folio *alloc_anon_folio(struct vm_fault 
*vmf)
        /* Try allocating the highest of the remaining orders. */
        gfp = vma_thp_gfp_mask(vma);
        while (orders) {
+               pghint_t hints;
+
                addr = ALIGN_DOWN(vmf->address, PAGE_SIZE << order);
-               folio = vma_alloc_folio(gfp, order, vma, addr);
+               folio = vma_alloc_folio_hints(gfp, order, vma, addr, &hints);
                if (folio) {
                        if (mem_cgroup_charge(folio, vma->vm_mm, gfp)) {
                                count_mthp_stat(order, 
MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE);
@@ -5188,14 +5190,8 @@ static struct folio *alloc_anon_folio(struct vm_fault 
*vmf)
                                goto next;
                        }
                        folio_throttle_swaprate(folio, gfp);
-                       /*
-                        * When a folio is not zeroed during allocation
-                        * (__GFP_ZERO not used) or user folios require special
-                        * handling, folio_zero_user() is used to make sure
-                        * that the page corresponding to the faulting address
-                        * will be hot in the cache after zeroing.
-                        */
-                       if (user_alloc_needs_zeroing())
+                       if (user_alloc_needs_zeroing() &&
+                           !(hints & PGHINT_ZEROED))
                                folio_zero_user(folio, vmf->address);
                        return folio;
                }
-- 
MST


Reply via email to