Re: [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access

From: Wei Yang

Date: Thu May 28 2026 - 05:21:17 EST


On Thu, May 28, 2026 at 09:55:07AM +0200, Alexander Gordeev wrote:
>Switch from ptep_get() to ptep_get_lockless() accessor for
>PTE reads when no lock is taken.
>
>Signed-off-by: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
>---
> mm/page_vma_mapped.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
>diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c
>index a4d52fdb3056..2ccbabfb2cc1 100644
>--- a/mm/page_vma_mapped.c
>+++ b/mm/page_vma_mapped.c
>@@ -41,7 +41,7 @@ static bool map_pte(struct page_vma_mapped_walk *pvmw, pmd_t *pmdvalp,
> if (!pvmw->pte)
> return false;
>
>- ptent = ptep_get(pvmw->pte);
>+ ptent = ptep_get_lockless(pvmw->pte);
>
> if (pte_none(ptent)) {
> return false;
>@@ -183,6 +183,7 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw)
> struct mm_struct *mm = vma->vm_mm;
> unsigned long end;
> spinlock_t *ptl;
>+ pte_t pteval;
> pgd_t *pgd;
> p4d_t *p4d;
> pud_t *pud;
>@@ -310,7 +311,11 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw)
> goto restart;
> }
> pvmw->pte++;
>- } while (pte_none(ptep_get(pvmw->pte)));
>+ if (!pvmw->ptl)
>+ pteval = ptep_get_lockless(pvmw->pte);
>+ else
>+ pteval = ptep_get(pvmw->pte);
>+ } while (pte_none(pteval));

Use ptep_get_lockless() when lock is not taken.

LGTM, thanks

Reviewed-by: Wei Yang <richard.weiyang@xxxxxxxxx>

>
> if (!pvmw->ptl) {
> spin_lock(ptl);
>--
>2.51.0

--
Wei Yang
Help you, Help me