powerpc/64s/hash: Do not use PPC_INVALIDATE_ERAT on CPUs before POWER9
PPC_INVALIDATE_ERAT is slbia IH=7 which is a new variant introduced with POWER9, and the result is undefined on earlier CPUs. Commits7b9f71f974
("powerpc/64s: POWER9 machine check handler") andd4748276ae
("powerpc/64s: Improve local TLB flush for boot and MCE on POWER9") caused POWER7/8 code to use this instruction. Remove it. An ERAT flush can be made by invalidatig the SLB, but before POWER9 that requires a flush and rebolt. Fixes:7b9f71f974
("powerpc/64s: POWER9 machine check handler") Fixes:d4748276ae
("powerpc/64s: Improve local TLB flush for boot and MCE on POWER9") Cc: stable@vger.kernel.org # v4.11+ Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
817593604e
commit
bc276ecba1
@@ -115,6 +115,8 @@ static void tlbiel_all_isa300(unsigned int num_sets, unsigned int is)
|
||||
tlbiel_hash_set_isa300(0, is, 0, 2, 1);
|
||||
|
||||
asm volatile("ptesync": : :"memory");
|
||||
|
||||
asm volatile(PPC_INVALIDATE_ERAT "; isync" : : :"memory");
|
||||
}
|
||||
|
||||
void hash__tlbiel_all(unsigned int action)
|
||||
@@ -140,8 +142,6 @@ void hash__tlbiel_all(unsigned int action)
|
||||
tlbiel_all_isa206(POWER7_TLB_SETS, is);
|
||||
else
|
||||
WARN(1, "%s called on pre-POWER7 CPU\n", __func__);
|
||||
|
||||
asm volatile(PPC_INVALIDATE_ERAT "; isync" : : :"memory");
|
||||
}
|
||||
|
||||
static inline unsigned long ___tlbie(unsigned long vpn, int psize,
|
||||
|
Reference in New Issue
Block a user