In order to be able to switch MMU on in exception prolog, save
SRR0 and SRR1 earlier.

Also save r10 and r11 into stack earlier to better match with the
normal exception prolog.

Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu>
---
 arch/powerpc/kernel/entry_32.S | 9 ---------
 arch/powerpc/kernel/head_40x.S | 8 ++++++++
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index b102b40c4988..715a8b1aafc6 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -107,15 +107,6 @@ _ASM_NOKPROBE_SYMBOL(crit_transfer_to_handler)
 #ifdef CONFIG_40x
        .globl  crit_transfer_to_handler
 crit_transfer_to_handler:
-       lwz     r0,crit_r10@l(0)
-       stw     r0,GPR10(r11)
-       lwz     r0,crit_r11@l(0)
-       stw     r0,GPR11(r11)
-       mfspr   r0,SPRN_SRR0
-       stw     r0,crit_srr0@l(0)
-       mfspr   r0,SPRN_SRR1
-       stw     r0,crit_srr1@l(0)
-
        /* set the stack limit to the current stack */
        mfspr   r8,SPRN_SPRG_THREAD
        lwz     r0,KSP_LIMIT(r8)
diff --git a/arch/powerpc/kernel/head_40x.S b/arch/powerpc/kernel/head_40x.S
index 595a4cf83391..6394040bbaba 100644
--- a/arch/powerpc/kernel/head_40x.S
+++ b/arch/powerpc/kernel/head_40x.S
@@ -103,6 +103,10 @@ _ENTRY(saved_ksp_limit)
 .macro CRITICAL_EXCEPTION_PROLOG
        stw     r10,crit_r10@l(0)       /* save two registers to work with */
        stw     r11,crit_r11@l(0)
+       mfspr   r10,SPRN_SRR0
+       mfspr   r11,SPRN_SRR1
+       stw     r10,crit_srr0@l(0)
+       stw     r11,crit_srr1@l(0)
        mfcr    r10                     /* save CR in r10 for now          */
        mfspr   r11,SPRN_SRR3           /* check whether user or kernel    */
        andi.   r11,r11,MSR_PR
@@ -120,6 +124,10 @@ _ENTRY(saved_ksp_limit)
        stw     r9,GPR9(r11)
        mflr    r10
        stw     r10,_LINK(r11)
+       lwz     r10,crit_r10@l(0)
+       lwz     r12,crit_r11@l(0)
+       stw     r10,GPR10(r11)
+       stw     r12,GPR11(r11)
        mfspr   r12,SPRN_DEAR           /* save DEAR and ESR in the frame  */
        stw     r12,_DEAR(r11)          /* since they may have had stuff   */
        mfspr   r9,SPRN_ESR             /* in them at the point where the  */
-- 
2.25.0

Reply via email to