Skip to content

Commit a305597

Browse files
chleroympe
authored andcommitted
powerpc/32: Refactor saving of volatile registers in exception prologs
Exception prologs all do the same at the end: - Save trapno in stack - Mark stack with exception marker - Save r0 - Save r3 to r8 Refactor that into a COMMON_EXCEPTION_PROLOG_END macro. At the same time use r1 instead of r11. Signed-off-by: Christophe Leroy <[email protected]> Signed-off-by: Michael Ellerman <[email protected]> Link: https://lore.kernel.org/r/e1c45d2e895e0693c42d2a6840df1105a148efea.1615552867.git.christophe.leroy@csgroup.eu
1 parent acc142b commit a305597

File tree

3 files changed

+24
-27
lines changed

3 files changed

+24
-27
lines changed

arch/powerpc/kernel/head_32.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,15 +104,19 @@
104104
li r10, MSR_KERNEL /* can take exceptions */
105105
mtmsr r10 /* (except for mach check in rtas) */
106106
#endif
107-
stw r0,GPR0(r11)
107+
COMMON_EXCEPTION_PROLOG_END \trapno
108+
_ASM_NOKPROBE_SYMBOL(\name\()_virt)
109+
.endm
110+
111+
.macro COMMON_EXCEPTION_PROLOG_END trapno
112+
stw r0,GPR0(r1)
108113
lis r10,STACK_FRAME_REGS_MARKER@ha /* exception frame marker */
109114
addi r10,r10,STACK_FRAME_REGS_MARKER@l
110-
stw r10,8(r11)
115+
stw r10,8(r1)
111116
li r10, \trapno
112-
stw r10,_TRAP(r11)
113-
SAVE_4GPRS(3, r11)
114-
SAVE_2GPRS(7, r11)
115-
_ASM_NOKPROBE_SYMBOL(\name\()_virt)
117+
stw r10,_TRAP(r1)
118+
SAVE_4GPRS(3, r1)
119+
SAVE_2GPRS(7, r1)
116120
.endm
117121

118122
.macro prepare_transfer_to_handler

arch/powerpc/kernel/head_40x.S

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,7 @@ _ENTRY(crit_esr)
157157
mfspr r12,SPRN_SRR2
158158
mfspr r9,SPRN_SRR3
159159
rlwinm r9,r9,0,14,12 /* clear MSR_WE (necessary?) */
160-
stw r0,GPR0(r11)
161-
lis r10, STACK_FRAME_REGS_MARKER@ha /* exception frame marker */
162-
addi r10, r10, STACK_FRAME_REGS_MARKER@l
163-
stw r10, 8(r11)
164-
li r10, \trapno + 2
165-
stw r10,_TRAP(r11)
166-
SAVE_4GPRS(3, r11)
167-
SAVE_2GPRS(7, r11)
160+
COMMON_EXCEPTION_PROLOG_END \trapno + 2
168161
_ASM_NOKPROBE_SYMBOL(\name\()_virt)
169162
.endm
170163

arch/powerpc/kernel/head_booke.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,18 @@ END_BTB_FLUSH_SECTION
7878
stw r1, 0(r11); \
7979
mr r1, r11; \
8080
rlwinm r9,r9,0,14,12; /* clear MSR_WE (necessary?) */\
81-
stw r0,GPR0(r11); \
82-
lis r10, STACK_FRAME_REGS_MARKER@ha;/* exception frame marker */ \
83-
addi r10, r10, STACK_FRAME_REGS_MARKER@l; \
84-
stw r10, 8(r11); \
85-
li r10, trapno; \
86-
stw r10,_TRAP(r11); \
87-
SAVE_4GPRS(3, r11); \
88-
SAVE_2GPRS(7, r11)
81+
COMMON_EXCEPTION_PROLOG_END trapno
82+
83+
.macro COMMON_EXCEPTION_PROLOG_END trapno
84+
stw r0,GPR0(r1)
85+
lis r10, STACK_FRAME_REGS_MARKER@ha /* exception frame marker */
86+
addi r10, r10, STACK_FRAME_REGS_MARKER@l
87+
stw r10, 8(r1)
88+
li r10, \trapno
89+
stw r10,_TRAP(r1)
90+
SAVE_4GPRS(3, r1)
91+
SAVE_2GPRS(7, r1)
92+
.endm
8993

9094
.macro prepare_transfer_to_handler
9195
bl prepare_transfer_to_handler
@@ -231,11 +235,7 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV)
231235
stw r1,0(r11); \
232236
mr r1,r11; \
233237
rlwinm r9,r9,0,14,12; /* clear MSR_WE (necessary?) */\
234-
li r10, trapno; \
235-
stw r10,_TRAP(r11); \
236-
stw r0,GPR0(r11); \
237-
SAVE_4GPRS(3, r11); \
238-
SAVE_2GPRS(7, r11)
238+
COMMON_EXCEPTION_PROLOG_END trapno
239239

240240
#define SAVE_xSRR(xSRR) \
241241
mfspr r0,SPRN_##xSRR##0; \

0 commit comments

Comments
 (0)