lkml.org 
[lkml]   [2022]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V6 03/26] powerpc/mm: Move protection_map[] inside the platform
    Date
    This moves protection_map[] inside the platform and while here, also enable
    ARCH_HAS_VM_GET_PAGE_PROT on 32 bit and nohash 64 (aka book3e/64) platforms
    via DECLARE_VM_GET_PAGE_PROT.

    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: linuxppc-dev@lists.ozlabs.org
    Cc: linux-kernel@vger.kernel.org
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
    ---
    arch/powerpc/Kconfig | 2 +-
    arch/powerpc/include/asm/pgtable.h | 20 +-------------------
    arch/powerpc/mm/pgtable.c | 24 ++++++++++++++++++++++++
    3 files changed, 26 insertions(+), 20 deletions(-)

    diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
    index c2ce2e60c8f0..1035d172c7dd 100644
    --- a/arch/powerpc/Kconfig
    +++ b/arch/powerpc/Kconfig
    @@ -140,7 +140,7 @@ config PPC
    select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
    select ARCH_HAS_UACCESS_FLUSHCACHE
    select ARCH_HAS_UBSAN_SANITIZE_ALL
    - select ARCH_HAS_VM_GET_PAGE_PROT if PPC_BOOK3S_64
    + select ARCH_HAS_VM_GET_PAGE_PROT
    select ARCH_HAVE_NMI_SAFE_CMPXCHG
    select ARCH_KEEP_MEMBLOCK
    select ARCH_MIGHT_HAVE_PC_PARPORT
    diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h
    index d564d0ecd4cd..33f4bf8d22b0 100644
    --- a/arch/powerpc/include/asm/pgtable.h
    +++ b/arch/powerpc/include/asm/pgtable.h
    @@ -20,25 +20,6 @@ struct mm_struct;
    #include <asm/nohash/pgtable.h>
    #endif /* !CONFIG_PPC_BOOK3S */

    -/* Note due to the way vm flags are laid out, the bits are XWR */
    -#define __P000 PAGE_NONE
    -#define __P001 PAGE_READONLY
    -#define __P010 PAGE_COPY
    -#define __P011 PAGE_COPY
    -#define __P100 PAGE_READONLY_X
    -#define __P101 PAGE_READONLY_X
    -#define __P110 PAGE_COPY_X
    -#define __P111 PAGE_COPY_X
    -
    -#define __S000 PAGE_NONE
    -#define __S001 PAGE_READONLY
    -#define __S010 PAGE_SHARED
    -#define __S011 PAGE_SHARED
    -#define __S100 PAGE_READONLY_X
    -#define __S101 PAGE_READONLY_X
    -#define __S110 PAGE_SHARED_X
    -#define __S111 PAGE_SHARED_X
    -
    #ifndef __ASSEMBLY__

    #ifndef MAX_PTRS_PER_PGD
    @@ -79,6 +60,7 @@ extern void paging_init(void);
    void poking_init(void);

    extern unsigned long ioremap_bot;
    +extern const pgprot_t protection_map[16];

    /*
    * kern_addr_valid is intended to indicate whether an address is a valid
    diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c
    index e6166b71d36d..cb2dcdb18f8e 100644
    --- a/arch/powerpc/mm/pgtable.c
    +++ b/arch/powerpc/mm/pgtable.c
    @@ -472,3 +472,27 @@ pte_t *__find_linux_pte(pgd_t *pgdir, unsigned long ea,
    return ret_pte;
    }
    EXPORT_SYMBOL_GPL(__find_linux_pte);
    +
    +/* Note due to the way vm flags are laid out, the bits are XWR */
    +const pgprot_t protection_map[16] = {
    + [VM_NONE] = PAGE_NONE,
    + [VM_READ] = PAGE_READONLY,
    + [VM_WRITE] = PAGE_COPY,
    + [VM_WRITE | VM_READ] = PAGE_COPY,
    + [VM_EXEC] = PAGE_READONLY_X,
    + [VM_EXEC | VM_READ] = PAGE_READONLY_X,
    + [VM_EXEC | VM_WRITE] = PAGE_COPY_X,
    + [VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_X,
    + [VM_SHARED] = PAGE_NONE,
    + [VM_SHARED | VM_READ] = PAGE_READONLY,
    + [VM_SHARED | VM_WRITE] = PAGE_SHARED,
    + [VM_SHARED | VM_WRITE | VM_READ] = PAGE_SHARED,
    + [VM_SHARED | VM_EXEC] = PAGE_READONLY_X,
    + [VM_SHARED | VM_EXEC | VM_READ] = PAGE_READONLY_X,
    + [VM_SHARED | VM_EXEC | VM_WRITE] = PAGE_SHARED_X,
    + [VM_SHARED | VM_EXEC | VM_WRITE | VM_READ] = PAGE_SHARED_X
    +};
    +
    +#ifndef CONFIG_PPC_BOOK3S_64
    +DECLARE_VM_GET_PAGE_PROT
    +#endif
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-06-30 07:19    [W:3.268 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site