Re: [RFC PATCH 1/2] mm/gup: add missing pXdp_get() conversions
From: David Hildenbrand (Arm)
Date: Mon Apr 20 2026 - 15:29:30 EST
On 4/20/26 14:13, Alexander Gordeev wrote:
> PMD and PUD entries revalidation has the same semantics as
> PTE entry revalidation. Convert the remaining direct entry
> dereferences to the corresponding pXdp_get() accessors.
>
> Signed-off-by: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
> ---
> mm/gup.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/mm/gup.c b/mm/gup.c
> index 8e7dc2c6ee73..d149a4b0df71 100644
> --- a/mm/gup.c
> +++ b/mm/gup.c
> @@ -2865,7 +2865,7 @@ static int gup_fast_pte_range(pmd_t pmd, pmd_t *pmdp, unsigned long addr,
> if (!folio)
> goto pte_unmap;
>
> - if (unlikely(pmd_val(pmd) != pmd_val(*pmdp)) ||
> + if (unlikely(pmd_val(pmd) != pmd_val(pmdp_get(pmdp))) ||
> unlikely(pte_val(pte) != pte_val(ptep_get(ptep)))) {
> gup_put_folio(folio, 1, flags);
> goto pte_unmap;
> @@ -2942,7 +2942,7 @@ static int gup_fast_pmd_leaf(pmd_t orig, pmd_t *pmdp, unsigned long addr,
> if (!folio)
> return 0;
>
> - if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) {
> + if (unlikely(pmd_val(orig) != pmd_val(pmdp_get(pmdp)))) {
> gup_put_folio(folio, refs, flags);
> return 0;
> }
> @@ -2985,7 +2985,7 @@ static int gup_fast_pud_leaf(pud_t orig, pud_t *pudp, unsigned long addr,
> if (!folio)
> return 0;
>
> - if (unlikely(pud_val(orig) != pud_val(*pudp))) {
> + if (unlikely(pud_val(orig) != pud_val(pudp_get(pudp)))) {
> gup_put_folio(folio, refs, flags);
> return 0;
> }
These are all on lockless code paths. Shouldn't we be using the lockless
pte/pmd variants?
(not a matter of correctness, rather a matter of semantics)
--
Cheers,
David