aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm/pgtable.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-12-27 13:43:24 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-12-27 13:43:24 -0500
commit8d6973327ee84c2f40dd9efd8928d4a1186c96e2 (patch)
tree1c6accd71b6e9c4e05d5aaae766b958ad440d320 /arch/powerpc/mm/pgtable.c
parent6d101ba6be2a26a3e1f513b5e293f0fd2b79ec5c (diff)
parent12526b0d6c580df860b31e59d68e5696e16c6e5b (diff)
Merge tag 'powerpc-4.21-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc updates from Michael Ellerman: "Notable changes: - Mitigations for Spectre v2 on some Freescale (NXP) CPUs. - A large series adding support for pass-through of Nvidia V100 GPUs to guests on Power9. - Another large series to enable hardware assistance for TLB table walk on MPC8xx CPUs. - Some preparatory changes to our DMA code, to make way for further cleanups from Christoph. - Several fixes for our Transactional Memory handling discovered by fuzzing the signal return path. - Support for generating our system call table(s) from a text file like other architectures. - A fix to our page fault handler so that instead of generating a WARN_ON_ONCE, user accesses of kernel addresses instead print a ratelimited and appropriately scary warning. - A cosmetic change to make our unhandled page fault messages more similar to other arches and also more compact and informative. - Freescale updates from Scott: "Highlights include elimination of legacy clock bindings use from dts files, an 83xx watchdog handler, fixes to old dts interrupt errors, and some minor cleanup." And many clean-ups, reworks and minor fixes etc. Thanks to: Alexandre Belloni, Alexey Kardashevskiy, Andrew Donnellan, Aneesh Kumar K.V, Arnd Bergmann, Benjamin Herrenschmidt, Breno Leitao, Christian Lamparter, Christophe Leroy, Christoph Hellwig, Daniel Axtens, Darren Stevens, David Gibson, Diana Craciun, Dmitry V. Levin, Firoz Khan, Geert Uytterhoeven, Greg Kurz, Gustavo Romero, Hari Bathini, Joel Stanley, Kees Cook, Madhavan Srinivasan, Mahesh Salgaonkar, Markus Elfring, Mathieu Malaterre, Michal Suchánek, Naveen N. Rao, Nick Desaulniers, Oliver O'Halloran, Paul Mackerras, Ram Pai, Ravi Bangoria, Rob Herring, Russell Currey, Sabyasachi Gupta, Sam Bobroff, Satheesh Rajendran, Scott Wood, Segher Boessenkool, Stephen Rothwell, Tang Yuantian, Thiago Jung Bauermann, Yangtao Li, Yuantian Tang, Yue Haibing" * tag 'powerpc-4.21-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (201 commits) Revert "powerpc/fsl_pci: simplify fsl_pci_dma_set_mask" powerpc/zImage: Also check for stdout-path powerpc: Fix HMIs on big-endian with CONFIG_RELOCATABLE=y macintosh: Use of_node_name_{eq, prefix} for node name comparisons ide: Use of_node_name_eq for node name comparisons powerpc: Use of_node_name_eq for node name comparisons powerpc/pseries/pmem: Convert to %pOFn instead of device_node.name powerpc/mm: Remove very old comment in hash-4k.h powerpc/pseries: Fix node leak in update_lmb_associativity_index() powerpc/configs/85xx: Enable CONFIG_DEBUG_KERNEL powerpc/dts/fsl: Fix dtc-flagged interrupt errors clk: qoriq: add more compatibles strings powerpc/fsl: Use new clockgen binding powerpc/83xx: handle machine check caused by watchdog timer powerpc/fsl-rio: fix spelling mistake "reserverd" -> "reserved" powerpc/fsl_pci: simplify fsl_pci_dma_set_mask arch/powerpc/fsl_rmu: Use dma_zalloc_coherent vfio_pci: Add NVIDIA GV100GL [Tesla V100 SXM2] subdriver vfio_pci: Allow regions to add own capabilities vfio_pci: Allow mapping extra regions ...
Diffstat (limited to 'arch/powerpc/mm/pgtable.c')
-rw-r--r--arch/powerpc/mm/pgtable.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c
index 010e1c616cb2..d3d61d29b4f1 100644
--- a/arch/powerpc/mm/pgtable.c
+++ b/arch/powerpc/mm/pgtable.c
@@ -74,7 +74,7 @@ static struct page *maybe_pte_to_page(pte_t pte)
74 * support falls into the same category. 74 * support falls into the same category.
75 */ 75 */
76 76
77static pte_t set_pte_filter(pte_t pte) 77static pte_t set_pte_filter_hash(pte_t pte)
78{ 78{
79 if (radix_enabled()) 79 if (radix_enabled())
80 return pte; 80 return pte;
@@ -93,14 +93,12 @@ static pte_t set_pte_filter(pte_t pte)
93 return pte; 93 return pte;
94} 94}
95 95
96static pte_t set_access_flags_filter(pte_t pte, struct vm_area_struct *vma,
97 int dirty)
98{
99 return pte;
100}
101
102#else /* CONFIG_PPC_BOOK3S */ 96#else /* CONFIG_PPC_BOOK3S */
103 97
98static pte_t set_pte_filter_hash(pte_t pte) { return pte; }
99
100#endif /* CONFIG_PPC_BOOK3S */
101
104/* Embedded type MMU with HW exec support. This is a bit more complicated 102/* Embedded type MMU with HW exec support. This is a bit more complicated
105 * as we don't have two bits to spare for _PAGE_EXEC and _PAGE_HWEXEC so 103 * as we don't have two bits to spare for _PAGE_EXEC and _PAGE_HWEXEC so
106 * instead we "filter out" the exec permission for non clean pages. 104 * instead we "filter out" the exec permission for non clean pages.
@@ -109,6 +107,9 @@ static pte_t set_pte_filter(pte_t pte)
109{ 107{
110 struct page *pg; 108 struct page *pg;
111 109
110 if (mmu_has_feature(MMU_FTR_HPTE_TABLE))
111 return set_pte_filter_hash(pte);
112
112 /* No exec permission in the first place, move on */ 113 /* No exec permission in the first place, move on */
113 if (!pte_exec(pte) || !pte_looks_normal(pte)) 114 if (!pte_exec(pte) || !pte_looks_normal(pte))
114 return pte; 115 return pte;
@@ -138,6 +139,9 @@ static pte_t set_access_flags_filter(pte_t pte, struct vm_area_struct *vma,
138{ 139{
139 struct page *pg; 140 struct page *pg;
140 141
142 if (mmu_has_feature(MMU_FTR_HPTE_TABLE))
143 return pte;
144
141 /* So here, we only care about exec faults, as we use them 145 /* So here, we only care about exec faults, as we use them
142 * to recover lost _PAGE_EXEC and perform I$/D$ coherency 146 * to recover lost _PAGE_EXEC and perform I$/D$ coherency
143 * if necessary. Also if _PAGE_EXEC is already set, same deal, 147 * if necessary. Also if _PAGE_EXEC is already set, same deal,
@@ -172,8 +176,6 @@ static pte_t set_access_flags_filter(pte_t pte, struct vm_area_struct *vma,
172 return pte_mkexec(pte); 176 return pte_mkexec(pte);
173} 177}
174 178
175#endif /* CONFIG_PPC_BOOK3S */
176
177/* 179/*
178 * set_pte stores a linux PTE into the linux page table. 180 * set_pte stores a linux PTE into the linux page table.
179 */ 181 */
@@ -221,9 +223,9 @@ int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long address,
221} 223}
222 224
223#ifdef CONFIG_HUGETLB_PAGE 225#ifdef CONFIG_HUGETLB_PAGE
224extern int huge_ptep_set_access_flags(struct vm_area_struct *vma, 226int huge_ptep_set_access_flags(struct vm_area_struct *vma,
225 unsigned long addr, pte_t *ptep, 227 unsigned long addr, pte_t *ptep,
226 pte_t pte, int dirty) 228 pte_t pte, int dirty)
227{ 229{
228#ifdef HUGETLB_NEED_PRELOAD 230#ifdef HUGETLB_NEED_PRELOAD
229 /* 231 /*