lkml.org 
[lkml]   [2023]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 4/5] mm: Add new ptep_deref() helper to fully encapsulate pte_t
    Date
    There are many call sites that directly dereference a pte_t pointer.
    This makes it very difficult to properly encapsulate a page table in the
    arch code without having to allocate shadow page tables. ptep_deref()
    aims to solve this by replacing all direct dereferences with a call to
    this function.

    The default implementation continues to just dereference the pointer
    (*ptep), so generated code should be exactly the same. However, it is
    possible for the architecture to override the default with their own
    implementation, that can (e.g.) hide certain bits from the core code, or
    determine young/dirty status by mixing in state from another source.

    While ptep_get() and ptep_get_lockless() already exist, these are
    implemented as atomic accesses (e.g. READ_ONCE() in the default case).
    So rather than using ptep_get() and risking performance regressions,
    introduce an new variant.

    Call sites will be converted to use the accessor in future commits.

    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    ---
    include/linux/pgtable.h | 7 +++++++
    1 file changed, 7 insertions(+)

    diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
    index c5a51481bbb9..1161beab2492 100644
    --- a/include/linux/pgtable.h
    +++ b/include/linux/pgtable.h
    @@ -204,6 +204,13 @@ static inline int pudp_set_access_flags(struct vm_area_struct *vma,
    #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
    #endif

    +#ifndef ptep_deref
    +static inline pte_t ptep_deref(pte_t *ptep)
    +{
    + return *(pte_t *)ptep;
    +}
    +#endif
    +
    #ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
    static inline int ptep_test_and_clear_young(struct vm_area_struct *vma,
    unsigned long address,
    --
    2.25.1
    \
     
     \ /
      Last update: 2023-05-18 13:08    [W:4.082 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site