lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 265/800] mm: define default MAX_PTRS_PER_* in include/pgtable.h
    Date
    From: Daniel Axtens <dja@axtens.net>

    [ Upstream commit c0f8aa4fa815daacb6eca52cae04820d6aecb7c2 ]

    Commit c65e774fb3f6 ("x86/mm: Make PGDIR_SHIFT and PTRS_PER_P4D variable")
    made PTRS_PER_P4D variable on x86 and introduced MAX_PTRS_PER_P4D as a
    constant for cases which need a compile-time constant (e.g. fixed-size
    arrays).

    powerpc likewise has boot-time selectable MMU features which can cause
    other mm "constants" to vary. For KASAN, we have some static
    PTE/PMD/PUD/P4D arrays so we need compile-time maximums for all these
    constants. Extend the MAX_PTRS_PER_ idiom, and place default definitions
    in include/pgtable.h. These define MAX_PTRS_PER_x to be PTRS_PER_x unless
    an architecture has defined MAX_PTRS_PER_x in its arch headers.

    Clean up pgtable-nop4d.h and s390's MAX_PTRS_PER_P4D definitions while
    we're at it: both can just pick up the default now.

    Link: https://lkml.kernel.org/r/20210624034050.511391-4-dja@axtens.net
    Signed-off-by: Daniel Axtens <dja@axtens.net>
    Acked-by: Andrey Konovalov <andreyknvl@gmail.com>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Reviewed-by: Marco Elver <elver@google.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Balbir Singh <bsingharora@gmail.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/s390/include/asm/pgtable.h | 2 --
    include/asm-generic/pgtable-nop4d.h | 1 -
    include/linux/pgtable.h | 22 ++++++++++++++++++++++
    3 files changed, 22 insertions(+), 3 deletions(-)

    diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
    index 29c7ecd5ad1d..b38f7b781564 100644
    --- a/arch/s390/include/asm/pgtable.h
    +++ b/arch/s390/include/asm/pgtable.h
    @@ -344,8 +344,6 @@ static inline int is_module_addr(void *addr)
    #define PTRS_PER_P4D _CRST_ENTRIES
    #define PTRS_PER_PGD _CRST_ENTRIES

    -#define MAX_PTRS_PER_P4D PTRS_PER_P4D
    -
    /*
    * Segment table and region3 table entry encoding
    * (R = read-only, I = invalid, y = young bit):
    diff --git a/include/asm-generic/pgtable-nop4d.h b/include/asm-generic/pgtable-nop4d.h
    index ce2cbb3c380f..2f6b1befb129 100644
    --- a/include/asm-generic/pgtable-nop4d.h
    +++ b/include/asm-generic/pgtable-nop4d.h
    @@ -9,7 +9,6 @@
    typedef struct { pgd_t pgd; } p4d_t;

    #define P4D_SHIFT PGDIR_SHIFT
    -#define MAX_PTRS_PER_P4D 1
    #define PTRS_PER_P4D 1
    #define P4D_SIZE (1UL << P4D_SHIFT)
    #define P4D_MASK (~(P4D_SIZE-1))
    diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
    index a43047b1030d..c32600c9e1ad 100644
    --- a/include/linux/pgtable.h
    +++ b/include/linux/pgtable.h
    @@ -1592,4 +1592,26 @@ typedef unsigned int pgtbl_mod_mask;
    #define pte_leaf_size(x) PAGE_SIZE
    #endif

    +/*
    + * Some architectures have MMUs that are configurable or selectable at boot
    + * time. These lead to variable PTRS_PER_x. For statically allocated arrays it
    + * helps to have a static maximum value.
    + */
    +
    +#ifndef MAX_PTRS_PER_PTE
    +#define MAX_PTRS_PER_PTE PTRS_PER_PTE
    +#endif
    +
    +#ifndef MAX_PTRS_PER_PMD
    +#define MAX_PTRS_PER_PMD PTRS_PER_PMD
    +#endif
    +
    +#ifndef MAX_PTRS_PER_PUD
    +#define MAX_PTRS_PER_PUD PTRS_PER_PUD
    +#endif
    +
    +#ifndef MAX_PTRS_PER_P4D
    +#define MAX_PTRS_PER_P4D PTRS_PER_P4D
    +#endif
    +
    #endif /* _LINUX_PGTABLE_H */
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 10:28    [W:2.217 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site