linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
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 V3 01/30] mm: Make vm_get_page_prot arch specific.
Date: Thu, 18 Feb 2016 22:20:25 +0530	[thread overview]
Message-ID: <1455814254-10226-2-git-send-email-aneesh.kumar@linux.vnet.ibm.com> (raw)
In-Reply-To: <1455814254-10226-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).

Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
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 8d1c8162f0c1..650f7e7b5410 100644
--- a/arch/powerpc/include/asm/book3s/64/hash.h
+++ b/arch/powerpc/include/asm/book3s/64/hash.h
@@ -530,6 +530,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 2f2415a7a688..69cfacc94f9b 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

  reply	other threads:[~2016-02-18 16:51 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-18 16:50 [PATCH V3 00/30] Book3s abstraction in preparation for new MMU model Aneesh Kumar K.V
2016-02-18 16:50 ` Aneesh Kumar K.V [this message]
2016-02-18 23:15   ` [PATCH V3 01/30] mm: Make vm_get_page_prot arch specific Paul Mackerras
2016-02-19  2:40     ` Aneesh Kumar K.V
2016-02-21  0:32       ` Benjamin Herrenschmidt
2016-02-19  1:28   ` Dave Hansen
2016-02-19  2:40     ` Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 02/30] mm: Some arch may want to use HPAGE_PMD related values as variables Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 03/30] powerpc/mm: add _PAGE_HASHPTE similar to 4K hash Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 04/30] powerpc/mm: Split pgtable types to separate header Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 05/30] powerpc/mm: Don't have conditional defines for real_pte_t Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 06/30] powerpc/mm: Switch book3s 64 with 64K page size to 4 level page table Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 07/30] powerpc/mm: Copy pgalloc (part 1) Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 08/30] powerpc/mm: Copy pgalloc (part 2) Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 09/30] powerpc/mm: Copy pgalloc (part 3) Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 10/30] powerpc/mm: Hugetlbfs is book3s_64 and fsl_book3e (32 or 64) Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 11/30] powerpc/mm: free_hugepd_range split to hash and nonhash Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 12/30] powerpc/mm: Use helper instead of opencoding Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 13/30] powerpc/mm: Move hash64 specific definitions to separate header Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 14/30] powerpc/mm: Move swap related definition ot hash64 header Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 15/30] powerpc/mm: Move hash page table related functions to pgtable-hash64.c Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 16/30] powerpc/mm: Rename hash specific page table bits (_PAGE* -> H_PAGE*) Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 17/30] powerpc/mm: Use flush_tlb_page in ptep_clear_flush_young Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 18/30] powerpc/mm: THP is only available on hash64 as of now Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 19/30] powerpc/mm: Use generic version of pmdp_clear_flush_young Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 20/30] powerpc/mm: Create a new headers for tlbflush for hash64 Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 21/30] powerpc/mm: Hash linux abstraction for page table accessors Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 22/30] powerpc/mm: Hash linux abstraction for functions in pgtable-hash.c Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 23/30] powerpc/mm: Hash linux abstraction for mmu context handling code Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 24/30] powerpc/mm: Move hash related mmu-*.h headers to book3s/ Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 25/30] powerpc/mm: Hash linux abstractions for early init routines Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 26/30] powerpc/mm: Hash linux abstraction for THP Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 27/30] powerpc/mm: Hash linux abstraction for HugeTLB Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 28/30] powerpc/mm: Hash linux abstraction for page table allocator Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 29/30] powerpc/mm: Hash linux abstraction for tlbflush routines Aneesh Kumar K.V
2016-02-18 16:50 ` [PATCH V3 30/30] powerpc/mm: Hash linux abstraction for pte swap encoding Aneesh Kumar K.V
2016-02-18 23:13 ` [PATCH V3 00/30] Book3s abstraction in preparation for new MMU model Paul Mackerras
2016-02-19  2:34   ` Aneesh Kumar K.V

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=1455814254-10226-2-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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).