Skip to content

Commit 984d7a1

Browse files
kvaneeshmpe
authored andcommitted
powerpc/mm: Fixup kernel read only mapping
With commit e58e87a ("powerpc/mm: Update _PAGE_KERNEL_RO") we started using the ppp value 0b110 to map kernel readonly. But that facility was only added as part of ISA 2.04. For earlier ISA version only supported ppp bit value for readonly mapping is 0b011. (This implies both user and kernel get mapped using the same ppp bit value for readonly mapping.). Update the code such that for earlier architecture version we use ppp value 0b011 for readonly mapping. We don't differentiate between power5+ and power5 here and apply the new ppp bits only from power6 (ISA 2.05). This keep the changes minimal. This fixes issue with PS3 spu usage reported at https://lkml.kernel.org/r/rep.1421449714.geoff@infradead.org Fixes: e58e87a ("powerpc/mm: Update _PAGE_KERNEL_RO") Cc: stable@vger.kernel.org # v4.7+ Tested-by: Geoff Levand <geoff@infradead.org> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
1 parent a1ff574 commit 984d7a1

2 files changed

Lines changed: 16 additions & 6 deletions

File tree

arch/powerpc/include/asm/mmu.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@
2828
* Individual features below.
2929
*/
3030

31+
/*
32+
* Kernel read only support.
33+
* We added the ppp value 0b110 in ISA 2.04.
34+
*/
35+
#define MMU_FTR_KERNEL_RO ASM_CONST(0x00004000)
36+
3137
/*
3238
* We need to clear top 16bits of va (from the remaining 64 bits )in
3339
* tlbie* instructions
@@ -103,10 +109,10 @@
103109
#define MMU_FTRS_POWER4 MMU_FTRS_DEFAULT_HPTE_ARCH_V2
104110
#define MMU_FTRS_PPC970 MMU_FTRS_POWER4 | MMU_FTR_TLBIE_CROP_VA
105111
#define MMU_FTRS_POWER5 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
106-
#define MMU_FTRS_POWER6 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
107-
#define MMU_FTRS_POWER7 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
108-
#define MMU_FTRS_POWER8 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
109-
#define MMU_FTRS_POWER9 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
112+
#define MMU_FTRS_POWER6 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
113+
#define MMU_FTRS_POWER7 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
114+
#define MMU_FTRS_POWER8 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
115+
#define MMU_FTRS_POWER9 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
110116
#define MMU_FTRS_CELL MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
111117
MMU_FTR_CI_LARGE_PAGE
112118
#define MMU_FTRS_PA6T MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \

arch/powerpc/mm/hash_utils_64.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,12 @@ unsigned long htab_convert_pte_flags(unsigned long pteflags)
193193
/*
194194
* Kernel read only mapped with ppp bits 0b110
195195
*/
196-
if (!(pteflags & _PAGE_WRITE))
197-
rflags |= (HPTE_R_PP0 | 0x2);
196+
if (!(pteflags & _PAGE_WRITE)) {
197+
if (mmu_has_feature(MMU_FTR_KERNEL_RO))
198+
rflags |= (HPTE_R_PP0 | 0x2);
199+
else
200+
rflags |= 0x3;
201+
}
198202
} else {
199203
if (pteflags & _PAGE_RWX)
200204
rflags |= 0x2;

0 commit comments

Comments
 (0)