powerpc/64s/exception: move machine check windup in_mce handling
authorNicholas Piggin <npiggin@gmail.com>
Fri, 28 Jun 2019 05:33:24 +0000 (15:33 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 2 Jul 2019 11:39:48 +0000 (21:39 +1000)
Move in_mce decrement earlier before registers are restored (but
still after RI=0). This helps with later consolidation.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/exceptions-64s.S

index 823e930..d8f1d70 100644 (file)
@@ -1080,6 +1080,10 @@ EXC_COMMON_BEGIN(machine_check_common)
        /* Clear MSR_RI before setting SRR0 and SRR1. */\
        li      r9,0;                                   \
        mtmsrd  r9,1;           /* Clear MSR_RI */      \
+       /* Decrement paca->in_mce now RI is clear. */   \
+       lhz     r12,PACA_IN_MCE(r13);                   \
+       subi    r12,r12,1;                              \
+       sth     r12,PACA_IN_MCE(r13);                   \
        /* Move original SRR0 and SRR1 into the respective regs */      \
        ld      r9,_MSR(r1);                            \
        mtspr   SPRN_SRR1,r9;                           \
@@ -1096,10 +1100,6 @@ EXC_COMMON_BEGIN(machine_check_common)
        REST_GPR(10, r1);                               \
        ld      r11,_CCR(r1);                           \
        mtcr    r11;                                    \
-       /* Decrement paca->in_mce. */                   \
-       lhz     r12,PACA_IN_MCE(r13);                   \
-       subi    r12,r12,1;                              \
-       sth     r12,PACA_IN_MCE(r13);                   \
        REST_GPR(11, r1);                               \
        REST_2GPRS(12, r1);                             \
        /* restore original r1. */                      \