lkml.org 
[lkml]   [2019]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v15 01/23] mm: Add generic p?d_leaf() macros
    Date
    Exposing the pud/pgd levels of the page tables to walk_page_range() means
    we may come across the exotic large mappings that come with large areas
    of contiguous memory (such as the kernel's linear map).

    For architectures that don't provide all p?d_leaf() macros, provide
    generic do nothing default that are suitable where there cannot be leaf
    pages at that level. Futher patches will add implementations for
    individual architectures.

    The name p?d_leaf() is chosen to minimize the confusion with existing
    uses of "large" pages and "huge" pages which do not necessary mean that
    the entry is a leaf (for example it may be a set of contiguous entries
    that only take 1 TLB slot). For the purpose of walking the page tables
    we don't need to know how it will be represented in the TLB, but we do
    need to know for sure if it is a leaf of the tree.

    Signed-off-by: Steven Price <steven.price@arm.com>
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    ---
    include/asm-generic/pgtable.h | 20 ++++++++++++++++++++
    1 file changed, 20 insertions(+)

    diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
    index 818691846c90..7f9eced287b7 100644
    --- a/include/asm-generic/pgtable.h
    +++ b/include/asm-generic/pgtable.h
    @@ -1187,4 +1187,24 @@ static inline bool arch_has_pfn_modify_check(void)
    #define mm_pmd_folded(mm) __is_defined(__PAGETABLE_PMD_FOLDED)
    #endif

    +/*
    + * p?d_leaf() - true if this entry is a final mapping to a physical address.
    + * This differs from p?d_huge() by the fact that they are always available (if
    + * the architecture supports large pages at the appropriate level) even
    + * if CONFIG_HUGETLB_PAGE is not defined.
    + * Only meaningful when called on a valid entry.
    + */
    +#ifndef pgd_leaf
    +#define pgd_leaf(x) 0
    +#endif
    +#ifndef p4d_leaf
    +#define p4d_leaf(x) 0
    +#endif
    +#ifndef pud_leaf
    +#define pud_leaf(x) 0
    +#endif
    +#ifndef pmd_leaf
    +#define pmd_leaf(x) 0
    +#endif
    +
    #endif /* _ASM_GENERIC_PGTABLE_H */
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-01 15:10    [W:8.449 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site