[PATCH v2 12/15] arm64: mm: avoid contpte A/D aggregation in fast-GUP
Yunhui Cui <[email protected]> Thu, 16 Jul 2026 20:41:47 +0800
| Newsgroups | org.kernel.vger.linux-efi,org.infradead.lists.kvm-riscv,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-arch,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users,org.kvack.linux-mm |
|---|---|
| Message-ID | <92fbae3247b4bf0d7989ba20a8763ecb836d0279.1784201104.git.cuiyunhui@bytedance.com> |
fast-GUP only needs the PTE state for the current virtual address and revalidates the raw PTE after pinning the page. It does not consume the contpte block-wide accessed/dirty aggregation provided by the public lockless getter. Override the fast-GUP PTE helpers to use the raw PTE for the current entry and raw revalidation. Keep the public ptep_get_lockless() semantics unchanged for other lockless users. Signed-off-by: Yunhui Cui <[email protected]> --- arch/arm64/include/asm/pgtable.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index 018781a1fcbee..d1e08dce9f7c5 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -1760,6 +1760,22 @@ static inline pte_t ptep_get_lockless(pte_t *ptep) return contpte_ptep_get_lockless(ptep); } +#define gup_ptep_get_lockless gup_ptep_get_lockless +static inline pte_t gup_ptep_get_lockless(pte_t *ptep, pte_t *rawp) +{ + pte_t pte = __ptep_get(ptep); + + *rawp = pte; + + return pte; +} + +#define gup_ptep_revalidate gup_ptep_revalidate +static inline bool gup_ptep_revalidate(pte_t *ptep, pte_t raw_pte) +{ + return pte_val(raw_pte) == pte_val(__ptep_get(ptep)); +} + static inline void set_pte(pte_t *ptep, pte_t pte) { /* -- 2.39.5