From: Mahesh Salgaonkar <mah...@linux.vnet.ibm.com> With the powrpc next commit e7e81847478 (poewrpc/mce: Fix SLB rebolting during MCE recovery path.), the SLB error recovery is broken. The commit missed a crucial change of OR-ing index value to RB[52-63] which selects the SLB entry while rebolting. This patch fixes that.
Signed-off-by: Mahesh Salgaonkar <mah...@linux.vnet.ibm.com> Reviewed-by: Nicholas Piggin <npig...@gmail.com> --- arch/powerpc/mm/slb.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c index 0b095fa54049..6dd9913425bc 100644 --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c @@ -101,9 +101,12 @@ void __slb_restore_bolted_realmode(void) /* No isync needed because realmode. */ for (index = 0; index < SLB_NUM_BOLTED; index++) { + unsigned long rb = be64_to_cpu(p->save_area[index].esid); + + rb = (rb & ~0xFFFul) | index; asm volatile("slbmte %0,%1" : : "r" (be64_to_cpu(p->save_area[index].vsid)), - "r" (be64_to_cpu(p->save_area[index].esid))); + "r" (rb)); } }