Re: [PATCH RFC v3 00/21] mm: change behavior of pXdp_get()/pXd_page() in compile-time folded pgtable
From: David Hildenbrand (Arm)
Date: Thu Sep 10 2026 - 07:12:50 EST
On 9/2/26 13:56, Yeoreum Yun wrote:
> Using ptep_get() and its counterparts in common code is suboptimal on
> kernel configurations with generic compile-time folded page tables.
> By default, ptep_get() and its friends expands to READ_ONCE(),
> forcing the compiler to emit a load even when the value is not used afterwards.
>
> This issue was recently reported by Christophe Leroy [1] for ppc32
> preventing futher code conversion to ptep_get()/pmdp_get()/... helper
> and the same behavior can also be observed on arm64 when built with
> 2- or 3-level page tables
>
> e.g) perf_get_page_size() in arm64 with CONFIG_PGTABLE_LEVEL=3:
>
> 00000000000052a0 <perf_get_page_size>:
> ...
> 52dc: d53b4234 mrs x20, DAIF
> 52e0: d50343df msr DAIFSet, #0x3
> ...
> 52fc: d35e9a69 ubfx x9, x19, #30, #9 /* pud_offset_lockless() */
> 5300: f9403508 ldr x8, [x8, #0x68]
> 5304: f869790a ldr x10, [x8, x9, lsl #3] /* pudp_get() */
> 5308: f90007ea str x10, [sp, #0x8]
> 530c: f8697908 ldr x8, [x8, x9, lsl #3] /* pudp_get() */
> ...
> 5360: 90000009 adrp x9, 0x5000 <perf_prepare_sample+0x548>
> 5364: 92746908 and x8, x8, #0x7ffffff000
> 5368: d3557675 ubfx x21, x19, #21, #9 /* pmd_offset_lockless() */
> ...
> 5394: f8757ac8 ldr x8, [x22, x21, lsl #3] /* pmdp_get() */
>
> Though PGTABLE_LEVEL=3, since the pudp_get() still remain with
> READ_ONCE(), there's redundant load for the pud which is folded.
It would be good to include what it looks like with this series.
--
Cheers,
David