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

Reply via email to