Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Aneesh Kumar K.V and committed by
Michael Ellerman
09cf5bcb 4b7a3504

+7 -1
+3
arch/powerpc/include/asm/ppc-opcode.h
··· 181 181 #define PPC_INST_MTSPR_DSCR_USER 0x7c0303a6 182 182 #define PPC_INST_MTSPR_DSCR_USER_MASK 0xfc1fffff 183 183 #define PPC_INST_SLBFEE 0x7c0007a7 184 + #define PPC_INST_SLBIA 0x7c0003e4 184 185 185 186 #define PPC_INST_STRING 0x7c00042a 186 187 #define PPC_INST_STRING_MASK 0xfc0007fe ··· 443 442 ___PPC_RA(a) | \ 444 443 ___PPC_RB(b)) 445 444 445 + #define PPC_SLBIA(IH) stringify_in_c(.long PPC_INST_SLBIA | \ 446 + ((IH & 0x7) << 21)) 446 447 447 448 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
+4 -1
arch/powerpc/mm/mmu_context_book3s64.c
··· 181 181 #ifdef CONFIG_PPC_RADIX_MMU 182 182 void radix__switch_mmu_context(struct mm_struct *prev, struct mm_struct *next) 183 183 { 184 - mtspr(SPRN_PID, next->context.id); 185 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 190 #endif