powerpc/pseries/ras: fwnmi avoid modifying r3 in error case
authorNicholas Piggin <npiggin@gmail.com>
Fri, 8 May 2020 04:33:59 +0000 (14:33 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 18 May 2020 11:58:45 +0000 (21:58 +1000)
If there is some error with the fwnmi save area, r3 has already been
modified which doesn't help with debugging.

Only update r3 when to restore the saved value.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200508043408.886394-8-npiggin@gmail.com
arch/powerpc/platforms/pseries/ras.c

index a5bd0f7..fe14186 100644 (file)
@@ -423,18 +423,19 @@ static inline struct rtas_error_log *fwnmi_get_errlog(void)
  */
 static struct rtas_error_log *fwnmi_get_errinfo(struct pt_regs *regs)
 {
+       unsigned long savep_ra;
        unsigned long *savep;
        struct rtas_error_log *h;
 
        /* Mask top two bits */
-       regs->gpr[3] &= ~(0x3UL << 62);
+       savep_ra = regs->gpr[3] & ~(0x3UL << 62);
 
-       if (!VALID_FWNMI_BUFFER(regs->gpr[3])) {
+       if (!VALID_FWNMI_BUFFER(savep_ra)) {
                printk(KERN_ERR "FWNMI: corrupt r3 0x%016lx\n", regs->gpr[3]);
                return NULL;
        }
 
-       savep = __va(regs->gpr[3]);
+       savep = __va(savep_ra);
        regs->gpr[3] = be64_to_cpu(savep[0]);   /* restore original r3 */
 
        h = (struct rtas_error_log *)&savep[1];