machine_check_handle_early_common can reach machine_check_handle_early
directly now that it runs at the relocated address. The only reason to
do the rfi sequence is to enable MSR[ME]. Move that into a helper
function to make the normal code path a bit easier to read.

Signed-off-by: Nicholas Piggin <npig...@gmail.com>
---
 arch/powerpc/kernel/exceptions-64s.S | 30 ++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S 
b/arch/powerpc/kernel/exceptions-64s.S
index 384f591ef078..be83a4e71814 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -1030,13 +1030,12 @@ EXC_COMMON_BEGIN(machine_check_early_common)
        std     r3,_DAR(r1)
        std     r4,_DSISR(r1)
 
-       mfmsr   r11                     /* get MSR value */
-       ori     r11,r11,MSR_ME|MSR_RI   /* turn on ME, RI */
-       LOAD_HANDLER(r12, machine_check_handle_early)
-1:     mtspr   SPRN_SRR0,r12
-       mtspr   SPRN_SRR1,r11
-       RFI_TO_KERNEL
-       b       .       /* prevent speculative execution */
+       li      r10,MSR_RI
+       mtmsrd  r10,1
+
+       bl      enable_machine_check
+       b       machine_check_handle_early
+
 2:
        /* Stack overflow. Stay on emergency stack and panic.
         * Keep the ME bit off while panic-ing, so that if we hit
@@ -1047,7 +1046,9 @@ EXC_COMMON_BEGIN(machine_check_early_common)
        LOAD_HANDLER(r12, unrecover_mce)
        li      r10,MSR_ME
        andc    r11,r11,r10             /* Turn off MSR_ME */
-       b       1b
+       mtspr   SPRN_SRR0,r12
+       mtspr   SPRN_SRR1,r11
+       RFI_TO_KERNEL
        b       .       /* prevent speculative execution */
 
 EXC_COMMON_BEGIN(machine_check_common)
@@ -2283,6 +2284,19 @@ CLOSE_FIXED_SECTION(virt_trampolines);
 
 USE_TEXT_SECTION()
 
+enable_machine_check:
+       mflr    r0
+       bcl     20,31,$+4
+0:     mflr    r3
+       addi    r3,r3,(1f - 0b)
+       mtspr   SPRN_SRR0,r3
+       mfmsr   r3
+       ori     r3,r3,MSR_ME
+       mtspr   SPRN_SRR1,r3
+       RFI_TO_KERNEL
+1:     mtlr    r0
+       blr
+
 /*
  * Hash table stuff
  */
-- 
2.20.1

Reply via email to