Messages in this thread Patch in this message | | | From | Christophe Leroy <> | Subject | [RFC PATCH v1 33/41] powerpc/32: Save remaining registers in exception prolog | Date | Tue, 9 Feb 2021 09:56:58 +0000 (UTC) |
| |
Save non volatile registers, XER, CTR, MSR and NIP in exception prolog.
Also assign proper value to r2 and r3 there.
For now, recalculate thread pointer in prepare_transfer_to_handler. It will disappear once KUAP is ported to C.
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> --- arch/powerpc/kernel/entry_32.S | 18 +++--------------- arch/powerpc/kernel/head_32.h | 12 ++++++++++++ 2 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 75ca010bd78d..fd24520b2e0c 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S @@ -57,20 +57,9 @@ */ .globl prepare_transfer_to_handler prepare_transfer_to_handler: - SAVE_NVGPRS(r11) - addi r3,r1,STACK_FRAME_OVERHEAD - stw r2,GPR2(r11) - stw r12,_NIP(r11) - stw r9,_MSR(r11) - andi. r2,r9,MSR_PR - mfctr r12 - mfspr r2,SPRN_XER - stw r12,_CTR(r11) - stw r2,_XER(r11) - mfspr r12,SPRN_SPRG_THREAD - tovirt(r12, r12) + andi. r0,r9,MSR_PR + addi r12, r2, THREAD beq 2f /* if from user, fix up THREAD.regs */ - addi r2, r12, -THREAD stw r3,PT_REGS(r12) #ifdef CONFIG_PPC_BOOK3S_32 kuep_lock r11, r12 @@ -80,8 +69,7 @@ prepare_transfer_to_handler: 2: /* if from kernel, check interrupted DOZE/NAP mode and * check for stack overflow */ - kuap_save_and_lock r11, r12, r9, r2, r6 - addi r2, r12, -THREAD + kuap_save_and_lock r11, r12, r9, r5, r6 #if defined(CONFIG_PPC_BOOK3S_32) || defined(CONFIG_E500) lwz r12,TI_LOCAL_FLAGS(r2) mtcrf 0x01,r12 diff --git a/arch/powerpc/kernel/head_32.h b/arch/powerpc/kernel/head_32.h index 12c39178a1d2..b29c13221baa 100644 --- a/arch/powerpc/kernel/head_32.h +++ b/arch/powerpc/kernel/head_32.h @@ -116,6 +116,18 @@ stw r10,_TRAP(r1) SAVE_4GPRS(3, r1) SAVE_2GPRS(7, r1) + SAVE_NVGPRS(r1) + stw r2,GPR2(r1) + stw r12,_NIP(r1) + stw r9,_MSR(r1) + mfctr r0 + mfspr r10,SPRN_XER + mfspr r2,SPRN_SPRG_THREAD + stw r0,_CTR(r1) + tovirt(r2, r2) + stw r10,_XER(r1) + addi r2, r2, -THREAD + addi r3,r1,STACK_FRAME_OVERHEAD _ASM_NOKPROBE_SYMBOL(\name\()_virt) .endm -- 2.25.0
| |