aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>2016-07-13 05:35:27 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2016-07-17 02:42:53 -0400
commit09cf5bcb0c93550db87f738b6012d97dbf73beb7 (patch)
treebf81619b962e1bea5fbbfb8d9dc248776f9e4e85
parent4b7a350480506bf292193e9c1db6fc19d57321ec (diff)
powerpc/mm/radix: Update PID switch sequence
Update the PID switch as per ISA doc. slbia is needed in radix to invalidate any implementation specific lookaside information. We use the .long format due to build errors with the below compiler version. gcc (Ubuntu 5.3.1-14ubuntu2.1) 5.3.1 20160413 GNU assembler (GNU Binutils for Ubuntu) 2.26 CC arch/powerpc/mm//mmu_context_book3s64.o {standard input}: Assembler messages: {standard input}:506: Error: junk at end of line: `0x7' scripts/Makefile.build:291: recipe for target 'arch/powerpc/mm//mmu_context_book3s64.o' failed make[1]: *** [arch/powerpc/mm//mmu_context_book3s64.o] Error 1 Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r--arch/powerpc/include/asm/ppc-opcode.h3
-rw-r--r--arch/powerpc/mm/mmu_context_book3s64.c5
2 files changed, 7 insertions, 1 deletions
diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h
index 1c18a43e0d65..5ecfb04fec98 100644
--- a/arch/powerpc/include/asm/ppc-opcode.h
+++ b/arch/powerpc/include/asm/ppc-opcode.h
@@ -181,6 +181,7 @@
181#define PPC_INST_MTSPR_DSCR_USER 0x7c0303a6 181#define PPC_INST_MTSPR_DSCR_USER 0x7c0303a6
182#define PPC_INST_MTSPR_DSCR_USER_MASK 0xfc1fffff 182#define PPC_INST_MTSPR_DSCR_USER_MASK 0xfc1fffff
183#define PPC_INST_SLBFEE 0x7c0007a7 183#define PPC_INST_SLBFEE 0x7c0007a7
184#define PPC_INST_SLBIA 0x7c0003e4
184 185
185#define PPC_INST_STRING 0x7c00042a 186#define PPC_INST_STRING 0x7c00042a
186#define PPC_INST_STRING_MASK 0xfc0007fe 187#define PPC_INST_STRING_MASK 0xfc0007fe
@@ -442,5 +443,7 @@
442 ___PPC_RA(a) | \ 443 ___PPC_RA(a) | \
443 ___PPC_RB(b)) 444 ___PPC_RB(b))
444 445
446#define PPC_SLBIA(IH) stringify_in_c(.long PPC_INST_SLBIA | \
447 ((IH & 0x7) << 21))
445 448
446#endif /* _ASM_POWERPC_PPC_OPCODE_H */ 449#endif /* _ASM_POWERPC_PPC_OPCODE_H */
diff --git a/arch/powerpc/mm/mmu_context_book3s64.c b/arch/powerpc/mm/mmu_context_book3s64.c
index 196222227e82..b114f8b93ec9 100644
--- a/arch/powerpc/mm/mmu_context_book3s64.c
+++ b/arch/powerpc/mm/mmu_context_book3s64.c
@@ -181,7 +181,10 @@ void destroy_context(struct mm_struct *mm)
181#ifdef CONFIG_PPC_RADIX_MMU 181#ifdef CONFIG_PPC_RADIX_MMU
182void radix__switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) 182void radix__switch_mmu_context(struct mm_struct *prev, struct mm_struct *next)
183{ 183{
184 mtspr(SPRN_PID, next->context.id);
185 asm volatile("isync": : :"memory"); 184 asm volatile("isync": : :"memory");
185 mtspr(SPRN_PID, next->context.id);
186 asm volatile("isync \n"
187 PPC_SLBIA(0x7)
188 : : :"memory");
186} 189}
187#endif 190#endif