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));
        }
 }
 

Reply via email to