lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC V1 17/31] sh/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
    Date
    This defines and exports a platform specific custom vm_get_page_prot() via
    subscribing ARCH_HAS_VM_GET_PAGE_PROT. Subsequently all __SXXX and __PXXX
    macros can be dropped which are no longer needed.

    Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
    Cc: Rich Felker <dalias@libc.org>
    Cc: linux-sh@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
    ---
    arch/sh/Kconfig | 1 +
    arch/sh/include/asm/pgtable.h | 17 --------------
    arch/sh/mm/mmap.c | 43 +++++++++++++++++++++++++++++++++++
    3 files changed, 44 insertions(+), 17 deletions(-)

    diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
    index 2474a04ceac4..f3fcd1c5e002 100644
    --- a/arch/sh/Kconfig
    +++ b/arch/sh/Kconfig
    @@ -11,6 +11,7 @@ config SUPERH
    select ARCH_HAS_GCOV_PROFILE_ALL
    select ARCH_HAS_PTE_SPECIAL
    select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
    + select ARCH_HAS_VM_GET_PAGE_PROT
    select ARCH_HIBERNATION_POSSIBLE if MMU
    select ARCH_MIGHT_HAVE_PC_PARPORT
    select ARCH_WANT_IPC_PARSE_VERSION
    diff --git a/arch/sh/include/asm/pgtable.h b/arch/sh/include/asm/pgtable.h
    index d7ddb1ec86a0..6fb9ec54cf9b 100644
    --- a/arch/sh/include/asm/pgtable.h
    +++ b/arch/sh/include/asm/pgtable.h
    @@ -89,23 +89,6 @@ static inline unsigned long phys_addr_mask(void)
    * completely separate permission bits for user and kernel space.
    */
    /*xwr*/
    -#define __P000 PAGE_NONE
    -#define __P001 PAGE_READONLY
    -#define __P010 PAGE_COPY
    -#define __P011 PAGE_COPY
    -#define __P100 PAGE_EXECREAD
    -#define __P101 PAGE_EXECREAD
    -#define __P110 PAGE_COPY
    -#define __P111 PAGE_COPY
    -
    -#define __S000 PAGE_NONE
    -#define __S001 PAGE_READONLY
    -#define __S010 PAGE_WRITEONLY
    -#define __S011 PAGE_SHARED
    -#define __S100 PAGE_EXECREAD
    -#define __S101 PAGE_EXECREAD
    -#define __S110 PAGE_RWX
    -#define __S111 PAGE_RWX

    typedef pte_t *pte_addr_t;

    diff --git a/arch/sh/mm/mmap.c b/arch/sh/mm/mmap.c
    index 6a1a1297baae..21b3fae77a4e 100644
    --- a/arch/sh/mm/mmap.c
    +++ b/arch/sh/mm/mmap.c
    @@ -162,3 +162,46 @@ int valid_mmap_phys_addr_range(unsigned long pfn, size_t size)
    {
    return 1;
    }
    +
    +#ifdef CONFIG_MMU
    +pgprot_t vm_get_page_prot(unsigned long vm_flags)
    +{
    + switch (vm_flags & (VM_READ | VM_WRITE | VM_EXEC | VM_SHARED)) {
    + case VM_NONE:
    + return PAGE_NONE;
    + case VM_READ:
    + return PAGE_READONLY;
    + case VM_WRITE:
    + return PAGE_COPY;
    + case VM_READ | VM_WRITE:
    + return PAGE_COPY;
    + case VM_EXEC:
    + return PAGE_EXECREAD;
    + case VM_EXEC | VM_READ:
    + return PAGE_EXECREAD;
    + case VM_EXEC | VM_WRITE:
    + return PAGE_COPY;
    + case VM_EXEC | VM_READ | VM_WRITE:
    + return PAGE_COPY;
    + case VM_SHARED:
    + return PAGE_COPY;
    + case VM_SHARED | VM_READ:
    + return PAGE_READONLY;
    + case VM_SHARED | VM_WRITE:
    + return PAGE_WRITEONLY;
    + case VM_SHARED | VM_READ | VM_WRITE:
    + return PAGE_SHARED;
    + case VM_SHARED | VM_EXEC:
    + return PAGE_EXECREAD;
    + case VM_SHARED | VM_EXEC | VM_READ:
    + return PAGE_EXECREAD;
    + case VM_SHARED | VM_EXEC | VM_WRITE:
    + return PAGE_RWX;
    + case VM_SHARED | VM_EXEC | VM_READ | VM_WRITE:
    + return PAGE_RWX;
    + default:
    + BUILD_BUG();
    + }
    +}
    +EXPORT_SYMBOL(vm_get_page_prot);
    +#endif
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-01-24 13:59    [W:2.650 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site