From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> To: benh@kernel.crashing.org, paulus@samba.org, mpe@ellerman.id.au Cc: linuxppc-dev@lists.ozlabs.org, linux-mm@kvack.org, "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> Subject: [PATCH V2 07/29] mm: Make vm_get_page_prot arch specific. Date: Mon, 8 Feb 2016 14:50:19 +0530 [thread overview] Message-ID: <1454923241-6681-8-git-send-email-aneesh.kumar@linux.vnet.ibm.com> (raw) In-Reply-To: <1454923241-6681-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> With next generation power processor, we are having a new mmu model [1] that require us to maintain a different linux page table format. Inorder to support both current and future ppc64 systems with a single kernel we need to make sure kernel can select between different page table format at runtime. With the new MMU (radix MMU) added, we will have to dynamically switch between different protection map. Hence override vm_get_page_prot instead of using arch_vm_get_page_prot. We also drop arch_vm_get_page_prot since only powerpc used it. [1] http://ibm.biz/power-isa3 (Needs registration). Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> --- arch/powerpc/include/asm/book3s/64/hash.h | 3 +++ arch/powerpc/include/asm/mman.h | 6 ------ arch/powerpc/mm/hash_utils_64.c | 19 +++++++++++++++++++ include/linux/mman.h | 4 ---- mm/mmap.c | 9 ++++++--- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/64/hash.h b/arch/powerpc/include/asm/book3s/64/hash.h index 6aae0b0b649b..c568eaa1c26d 100644 --- a/arch/powerpc/include/asm/book3s/64/hash.h +++ b/arch/powerpc/include/asm/book3s/64/hash.h @@ -538,6 +538,9 @@ static inline pgprot_t pgprot_writecombine(pgprot_t prot) return pgprot_noncached_wc(prot); } +extern pgprot_t vm_get_page_prot(unsigned long vm_flags); +#define vm_get_page_prot vm_get_page_prot + #ifdef CONFIG_TRANSPARENT_HUGEPAGE extern void hpte_do_hugepage_flush(struct mm_struct *mm, unsigned long addr, pmd_t *pmdp, unsigned long old_pmd); diff --git a/arch/powerpc/include/asm/mman.h b/arch/powerpc/include/asm/mman.h index 8565c254151a..9f48698af024 100644 --- a/arch/powerpc/include/asm/mman.h +++ b/arch/powerpc/include/asm/mman.h @@ -24,12 +24,6 @@ static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot) } #define arch_calc_vm_prot_bits(prot) arch_calc_vm_prot_bits(prot) -static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) -{ - return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0); -} -#define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags) - static inline int arch_validate_prot(unsigned long prot) { if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_SAO)) diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index ba59d5977f34..3199bbc654c5 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c @@ -1564,3 +1564,22 @@ void setup_initial_memory_limit(phys_addr_t first_memblock_base, /* Finally limit subsequent allocations */ memblock_set_current_limit(ppc64_rma_size); } + +static pgprot_t hash_protection_map[16] = { + __P000, __P001, __P010, __P011, __P100, + __P101, __P110, __P111, __S000, __S001, + __S010, __S011, __S100, __S101, __S110, __S111 +}; + +pgprot_t vm_get_page_prot(unsigned long vm_flags) +{ + pgprot_t prot_soa = __pgprot(0); + + if (vm_flags & VM_SAO) + prot_soa = __pgprot(_PAGE_SAO); + + return __pgprot(pgprot_val(hash_protection_map[vm_flags & + (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]) | + pgprot_val(prot_soa)); +} +EXPORT_SYMBOL(vm_get_page_prot); diff --git a/include/linux/mman.h b/include/linux/mman.h index 16373c8f5f57..d44abea464e2 100644 --- a/include/linux/mman.h +++ b/include/linux/mman.h @@ -38,10 +38,6 @@ static inline void vm_unacct_memory(long pages) #define arch_calc_vm_prot_bits(prot) 0 #endif -#ifndef arch_vm_get_page_prot -#define arch_vm_get_page_prot(vm_flags) __pgprot(0) -#endif - #ifndef arch_validate_prot /* * This is called from mprotect(). PROT_GROWSDOWN and PROT_GROWSUP have diff --git a/mm/mmap.c b/mm/mmap.c index cfc0cdca421e..aa2e901029d0 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -92,6 +92,10 @@ static void unmap_region(struct mm_struct *mm, * x: (no) no x: (no) yes x: (no) yes x: (yes) yes * */ +/* + * Give arch an option to override the below in dynamic matter + */ +#ifndef vm_get_page_prot pgprot_t protection_map[16] = { __P000, __P001, __P010, __P011, __P100, __P101, __P110, __P111, __S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111 @@ -99,11 +103,10 @@ pgprot_t protection_map[16] = { pgprot_t vm_get_page_prot(unsigned long vm_flags) { - return __pgprot(pgprot_val(protection_map[vm_flags & - (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]) | - pgprot_val(arch_vm_get_page_prot(vm_flags))); + return protection_map[vm_flags & (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]; } EXPORT_SYMBOL(vm_get_page_prot); +#endif static pgprot_t vm_pgprot_modify(pgprot_t oldprot, unsigned long vm_flags) { -- 2.5.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> To: benh@kernel.crashing.org, paulus@samba.org, mpe@ellerman.id.au Cc: linuxppc-dev@lists.ozlabs.org, linux-mm@kvack.org, "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> Subject: [PATCH V2 07/29] mm: Make vm_get_page_prot arch specific. Date: Mon, 8 Feb 2016 14:50:19 +0530 [thread overview] Message-ID: <1454923241-6681-8-git-send-email-aneesh.kumar@linux.vnet.ibm.com> (raw) In-Reply-To: <1454923241-6681-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> With next generation power processor, we are having a new mmu model [1] that require us to maintain a different linux page table format. Inorder to support both current and future ppc64 systems with a single kernel we need to make sure kernel can select between different page table format at runtime. With the new MMU (radix MMU) added, we will have to dynamically switch between different protection map. Hence override vm_get_page_prot instead of using arch_vm_get_page_prot. We also drop arch_vm_get_page_prot since only powerpc used it. [1] http://ibm.biz/power-isa3 (Needs registration). Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> --- arch/powerpc/include/asm/book3s/64/hash.h | 3 +++ arch/powerpc/include/asm/mman.h | 6 ------ arch/powerpc/mm/hash_utils_64.c | 19 +++++++++++++++++++ include/linux/mman.h | 4 ---- mm/mmap.c | 9 ++++++--- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/64/hash.h b/arch/powerpc/include/asm/book3s/64/hash.h index 6aae0b0b649b..c568eaa1c26d 100644 --- a/arch/powerpc/include/asm/book3s/64/hash.h +++ b/arch/powerpc/include/asm/book3s/64/hash.h @@ -538,6 +538,9 @@ static inline pgprot_t pgprot_writecombine(pgprot_t prot) return pgprot_noncached_wc(prot); } +extern pgprot_t vm_get_page_prot(unsigned long vm_flags); +#define vm_get_page_prot vm_get_page_prot + #ifdef CONFIG_TRANSPARENT_HUGEPAGE extern void hpte_do_hugepage_flush(struct mm_struct *mm, unsigned long addr, pmd_t *pmdp, unsigned long old_pmd); diff --git a/arch/powerpc/include/asm/mman.h b/arch/powerpc/include/asm/mman.h index 8565c254151a..9f48698af024 100644 --- a/arch/powerpc/include/asm/mman.h +++ b/arch/powerpc/include/asm/mman.h @@ -24,12 +24,6 @@ static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot) } #define arch_calc_vm_prot_bits(prot) arch_calc_vm_prot_bits(prot) -static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) -{ - return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0); -} -#define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags) - static inline int arch_validate_prot(unsigned long prot) { if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_SAO)) diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index ba59d5977f34..3199bbc654c5 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c @@ -1564,3 +1564,22 @@ void setup_initial_memory_limit(phys_addr_t first_memblock_base, /* Finally limit subsequent allocations */ memblock_set_current_limit(ppc64_rma_size); } + +static pgprot_t hash_protection_map[16] = { + __P000, __P001, __P010, __P011, __P100, + __P101, __P110, __P111, __S000, __S001, + __S010, __S011, __S100, __S101, __S110, __S111 +}; + +pgprot_t vm_get_page_prot(unsigned long vm_flags) +{ + pgprot_t prot_soa = __pgprot(0); + + if (vm_flags & VM_SAO) + prot_soa = __pgprot(_PAGE_SAO); + + return __pgprot(pgprot_val(hash_protection_map[vm_flags & + (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]) | + pgprot_val(prot_soa)); +} +EXPORT_SYMBOL(vm_get_page_prot); diff --git a/include/linux/mman.h b/include/linux/mman.h index 16373c8f5f57..d44abea464e2 100644 --- a/include/linux/mman.h +++ b/include/linux/mman.h @@ -38,10 +38,6 @@ static inline void vm_unacct_memory(long pages) #define arch_calc_vm_prot_bits(prot) 0 #endif -#ifndef arch_vm_get_page_prot -#define arch_vm_get_page_prot(vm_flags) __pgprot(0) -#endif - #ifndef arch_validate_prot /* * This is called from mprotect(). PROT_GROWSDOWN and PROT_GROWSUP have diff --git a/mm/mmap.c b/mm/mmap.c index cfc0cdca421e..aa2e901029d0 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -92,6 +92,10 @@ static void unmap_region(struct mm_struct *mm, * x: (no) no x: (no) yes x: (no) yes x: (yes) yes * */ +/* + * Give arch an option to override the below in dynamic matter + */ +#ifndef vm_get_page_prot pgprot_t protection_map[16] = { __P000, __P001, __P010, __P011, __P100, __P101, __P110, __P111, __S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111 @@ -99,11 +103,10 @@ pgprot_t protection_map[16] = { pgprot_t vm_get_page_prot(unsigned long vm_flags) { - return __pgprot(pgprot_val(protection_map[vm_flags & - (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]) | - pgprot_val(arch_vm_get_page_prot(vm_flags))); + return protection_map[vm_flags & (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]; } EXPORT_SYMBOL(vm_get_page_prot); +#endif static pgprot_t vm_pgprot_modify(pgprot_t oldprot, unsigned long vm_flags) { -- 2.5.0
next prev parent reply other threads:[~2016-02-08 9:21 UTC|newest] Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-02-08 9:20 [PATCH V2 00/29] Book3s abstraction in preparation for new MMU model Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 01/29] powerpc/mm: add _PAGE_HASHPTE similar to 4K hash Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-12 2:49 ` Paul Mackerras 2016-02-12 2:49 ` Paul Mackerras 2016-02-13 5:08 ` Aneesh Kumar K.V 2016-02-13 5:08 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 02/29] powerpc/mm: Split pgtable types to separate header Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-12 2:52 ` Paul Mackerras 2016-02-12 2:52 ` Paul Mackerras 2016-02-13 5:12 ` Aneesh Kumar K.V 2016-02-13 5:12 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 03/29] powerpc/mm: Switch book3s 64 with 64K page size to 4 level page table Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 04/29] powerpc/mm: Copy pgalloc (part 1) Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 05/29] powerpc/mm: Copy pgalloc (part 2) Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-12 3:53 ` Paul Mackerras 2016-02-12 3:53 ` Paul Mackerras 2016-02-15 5:25 ` Aneesh Kumar K.V 2016-02-15 5:25 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 06/29] powerpc/mm: Copy pgalloc (part 3) Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V [this message] 2016-02-08 9:20 ` [PATCH V2 07/29] mm: Make vm_get_page_prot arch specific Aneesh Kumar K.V 2016-02-15 3:21 ` Paul Mackerras 2016-02-15 3:21 ` Paul Mackerras 2016-02-15 4:40 ` Aneesh Kumar K.V 2016-02-15 4:40 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 08/29] mm: Some arch may want to use HPAGE_PMD related values as variables Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-15 4:11 ` Paul Mackerras 2016-02-15 4:11 ` Paul Mackerras 2016-02-16 8:12 ` Aneesh Kumar K.V 2016-02-16 8:12 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 09/29] powerpc/mm: Hugetlbfs is book3s_64 and fsl_book3e (32 or 64) Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-15 5:01 ` Paul Mackerras 2016-02-15 5:01 ` Paul Mackerras 2016-02-16 8:20 ` Aneesh Kumar K.V 2016-02-16 8:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 10/29] powerpc/mm: free_hugepd_range split to hash and nonhash Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 11/29] powerpc/mm: Use helper instead of opencoding Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 12/29] powerpc/mm: Move hash64 specific defintions to seperate header Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-15 5:24 ` Paul Mackerras 2016-02-15 5:24 ` Paul Mackerras 2016-02-16 8:25 ` Aneesh Kumar K.V 2016-02-16 8:25 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 13/29] powerpc/mm: Move swap related definition ot hash64 header Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 14/29] powerpc/mm: Move hash page table related functions to pgtable-hash64.c Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 15/29] powerpc/mm: Rename hash specific page table bits (_PAGE* -> H_PAGE*) Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 16/29] powerpc/mm: Use flush_tlb_page in ptep_clear_flush_young Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 17/29] powerpc/mm: THP is only available on hash64 as of now Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 18/29] powerpc/mm: Use generic version of pmdp_clear_flush_young Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 19/29] powerpc/mm: Create a new headers for tlbflush for hash64 Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 20/29] powerpc/mm: Hash linux abstraction for page table accessors Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 21/29] powerpc/mm: Hash linux abstraction for functions in pgtable-hash.c Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 22/29] powerpc/mm: Hash linux abstraction for mmu context handling code Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 23/29] powerpc/mm: Move hash related mmu-*.h headers to book3s/ Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 24/29] powerpc/mm: Hash linux abstractions for early init routines Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 25/29] powerpc/mm: Hash linux abstraction for THP Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 26/29] powerpc/mm: Hash linux abstraction for HugeTLB Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 27/29] powerpc/mm: Hash linux abstraction for page table allocator Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 28/29] powerpc/mm: Hash linux abstraction for tlbflush routines Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-08 9:20 ` [PATCH V2 29/29] powerpc/mm: Hash linux abstraction for pte swap encoding Aneesh Kumar K.V 2016-02-08 9:20 ` Aneesh Kumar K.V 2016-02-09 13:22 ` [PATCH V2 00/29] Book3s abstraction in preparation for new MMU model Aneesh Kumar K.V 2016-02-09 13:22 ` Aneesh Kumar K.V 2016-02-23 1:59 ` Scott Wood 2016-02-23 1:59 ` Scott Wood 2016-02-23 2:17 ` Aneesh Kumar K.V 2016-02-23 2:17 ` Aneesh Kumar K.V 2016-02-12 4:14 ` Paul Mackerras 2016-02-12 4:14 ` Paul Mackerras 2016-02-13 5:15 ` Aneesh Kumar K.V 2016-02-13 5:15 ` Aneesh Kumar K.V 2016-02-13 8:39 ` Denis Kirjanov 2016-02-13 8:39 ` Denis Kirjanov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1454923241-6681-8-git-send-email-aneesh.kumar@linux.vnet.ibm.com \ --to=aneesh.kumar@linux.vnet.ibm.com \ --cc=benh@kernel.crashing.org \ --cc=linux-mm@kvack.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=mpe@ellerman.id.au \ --cc=paulus@samba.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.