From: Anshuman Khandual Date: Fri, 27 Feb 2026 06:27:44 +0000 (+0000) Subject: perf/events: Replace READ_ONCE() with standard pgtable accessors X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5a84b600050c5f16b8bba25dd0e7aea845880407;p=thirdparty%2Fkernel%2Flinux.git perf/events: Replace READ_ONCE() with standard pgtable accessors Replace raw READ_ONCE() dereferences of pgtable entries with corresponding standard page table accessors pxdp_get() in perf_get_pgtable_size(). These accessors default to READ_ONCE() on platforms that don't override them. So there is no functional change on such platforms. However arm64 platform is being extended to support 128 bit page tables via a new architecture feature i.e FEAT_D128 in which case READ_ONCE() will not provide required single copy atomic access for 128 bit page table entries. Although pxdp_get() accessors can later be overridden on arm64 platform to extend required single copy atomicity support on 128 bit entries. Signed-off-by: Anshuman Khandual Signed-off-by: Peter Zijlstra (Intel) Acked-by: Peter Zijlstra (Intel) Link: https://patch.msgid.link/20260227062744.2215491-1-anshuman.khandual@arm.com --- diff --git a/kernel/events/core.c b/kernel/events/core.c index 5eeae8636996c..95d7a3e57268b 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -8421,7 +8421,7 @@ static u64 perf_get_pgtable_size(struct mm_struct *mm, unsigned long addr) pte_t *ptep, pte; pgdp = pgd_offset(mm, addr); - pgd = READ_ONCE(*pgdp); + pgd = pgdp_get(pgdp); if (pgd_none(pgd)) return 0; @@ -8429,7 +8429,7 @@ static u64 perf_get_pgtable_size(struct mm_struct *mm, unsigned long addr) return pgd_leaf_size(pgd); p4dp = p4d_offset_lockless(pgdp, pgd, addr); - p4d = READ_ONCE(*p4dp); + p4d = p4dp_get(p4dp); if (!p4d_present(p4d)) return 0; @@ -8437,7 +8437,7 @@ static u64 perf_get_pgtable_size(struct mm_struct *mm, unsigned long addr) return p4d_leaf_size(p4d); pudp = pud_offset_lockless(p4dp, p4d, addr); - pud = READ_ONCE(*pudp); + pud = pudp_get(pudp); if (!pud_present(pud)) return 0;