* [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access
@ 2026-05-28 7:55 Alexander Gordeev
2026-05-28 9:09 ` Wei Yang
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Alexander Gordeev @ 2026-05-28 7:55 UTC (permalink / raw)
To: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
Anshuman Khandual, Oscar Salvador, Wei Yang
Cc: linux-s390, linux-mm, linux-kernel
Switch from ptep_get() to ptep_get_lockless() accessor for
PTE reads when no lock is taken.
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
---
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));
if (!pvmw->ptl) {
spin_lock(ptl);
--
2.51.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access
2026-05-28 7:55 [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access Alexander Gordeev
@ 2026-05-28 9:09 ` Wei Yang
2026-05-28 11:24 ` Lorenzo Stoakes
2026-05-29 17:34 ` Oscar Salvador (SUSE)
2 siblings, 0 replies; 6+ messages in thread
From: Wei Yang @ 2026-05-28 9:09 UTC (permalink / raw)
To: Alexander Gordeev
Cc: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
Anshuman Khandual, Oscar Salvador, Wei Yang, linux-s390, linux-mm,
linux-kernel
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@linux.ibm.com>
>---
> 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@gmail.com>
>
> if (!pvmw->ptl) {
> spin_lock(ptl);
>--
>2.51.0
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access
2026-05-28 7:55 [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access Alexander Gordeev
2026-05-28 9:09 ` Wei Yang
@ 2026-05-28 11:24 ` Lorenzo Stoakes
2026-05-28 14:14 ` Oscar Salvador (SUSE)
2026-05-29 17:34 ` Oscar Salvador (SUSE)
2 siblings, 1 reply; 6+ messages in thread
From: Lorenzo Stoakes @ 2026-05-28 11:24 UTC (permalink / raw)
To: Alexander Gordeev
Cc: Andrew Morton, David Hildenbrand, Anshuman Khandual,
Oscar Salvador, Wei Yang, linux-s390, linux-mm, linux-kernel
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.
This is an insufficient commit message that's just saying what you're doing,
which isn't very useful.
Please explain why you're doing this and what the benefit is please.
Thanks, Lorenzo
>
> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
> ---
> 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));
>
> if (!pvmw->ptl) {
> spin_lock(ptl);
> --
> 2.51.0
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access
2026-05-28 11:24 ` Lorenzo Stoakes
@ 2026-05-28 14:14 ` Oscar Salvador (SUSE)
2026-05-28 14:30 ` Alexander Gordeev
0 siblings, 1 reply; 6+ messages in thread
From: Oscar Salvador (SUSE) @ 2026-05-28 14:14 UTC (permalink / raw)
To: Lorenzo Stoakes
Cc: Alexander Gordeev, Andrew Morton, David Hildenbrand,
Anshuman Khandual, Oscar Salvador, Wei Yang, linux-s390, linux-mm,
linux-kernel
On Thu, May 28, 2026 at 12:24:35PM +0100, Lorenzo Stoakes wrote:
> 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.
>
> This is an insufficient commit message that's just saying what you're doing,
> which isn't very useful.
>
> Please explain why you're doing this and what the benefit is please.
Maybe something like
"When not holding the lock, there is a chance that the pte gets modified
under our feet, so we need to use the lockless API to make sure that
the entries remain consistent during the read."
Only arm64 makes use of it though, due to the contpte stuff and being
unable to do it atomically.
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access
2026-05-28 14:14 ` Oscar Salvador (SUSE)
@ 2026-05-28 14:30 ` Alexander Gordeev
0 siblings, 0 replies; 6+ messages in thread
From: Alexander Gordeev @ 2026-05-28 14:30 UTC (permalink / raw)
To: Oscar Salvador (SUSE), Lorenzo Stoakes
Cc: Andrew Morton, David Hildenbrand, Anshuman Khandual,
Oscar Salvador, Wei Yang, linux-s390, linux-mm, linux-kernel
On Thu, May 28, 2026 at 04:14:03PM +0200, Oscar Salvador (SUSE) wrote:
> On Thu, May 28, 2026 at 12:24:35PM +0100, Lorenzo Stoakes wrote:
> > 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.
> >
> > This is an insufficient commit message that's just saying what you're doing,
> > which isn't very useful.
> >
> > Please explain why you're doing this and what the benefit is please.
>
> Maybe something like
>
> "When not holding the lock, there is a chance that the pte gets modified
> under our feet, so we need to use the lockless API to make sure that
> the entries remain consistent during the read."
I would gladly use this, if it makes sense for everyone.
@Lorenzo?
> Only arm64 makes use of it though, due to the contpte stuff and being
> unable to do it atomically.
Thanks!
> --
> Oscar Salvador
> SUSE Labs
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access
2026-05-28 7:55 [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access Alexander Gordeev
2026-05-28 9:09 ` Wei Yang
2026-05-28 11:24 ` Lorenzo Stoakes
@ 2026-05-29 17:34 ` Oscar Salvador (SUSE)
2 siblings, 0 replies; 6+ messages in thread
From: Oscar Salvador (SUSE) @ 2026-05-29 17:34 UTC (permalink / raw)
To: Alexander Gordeev
Cc: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
Anshuman Khandual, Oscar Salvador, Wei Yang, linux-s390, linux-mm,
linux-kernel
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@linux.ibm.com>
I see Andrew has picked up the patch with the amended changelog, so with
that:
Reviewed-by: Oscar Salvador (SUSE) <osalvador@kernel.org>
> ---
> 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));
>
> if (!pvmw->ptl) {
> spin_lock(ptl);
> --
> 2.51.0
>
--
Oscar Salvador
SUSE Labs
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-05-29 17:34 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-28 7:55 [PATCH v3] mm/page_vma_mapped_walk: Use ptep_get_lockless() for lockless access Alexander Gordeev
2026-05-28 9:09 ` Wei Yang
2026-05-28 11:24 ` Lorenzo Stoakes
2026-05-28 14:14 ` Oscar Salvador (SUSE)
2026-05-28 14:30 ` Alexander Gordeev
2026-05-29 17:34 ` Oscar Salvador (SUSE)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox