diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 78c430b7f9d943316c8c538ee8ab164c3f32d995..8528b4c7f9d3e7762359a36e62ddd49716a204fa 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 9cef423d574b47ae97f1a71d78c5adb8e1dcf207..067ae1302c1ccd29b9a8a09bc0788f5c38974eb5 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 */