mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 13:41:55 +00:00
powerpc/64s/exception: program check handler do not branch into a macro
It is clever, but the small code saving is not worth the spaghetti of jumping to a label in an expanded macro, particularly when the label is just a number rather than a descriptive name. So expand the INT_COMMON macro twice, once for the stack and no stack cases, and branch to those. The slight code size increase is worth the improved clarity of branches for this non-performance critical code. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20190802105709.27696-35-npiggin@gmail.com
This commit is contained in:
parent
c7c5cbb42d
commit
1b3599829a
@ -533,11 +533,10 @@ END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,948)
|
||||
andi. r10,r12,MSR_PR /* See if coming from user */
|
||||
mr r10,r1 /* Save r1 */
|
||||
subi r1,r1,INT_FRAME_SIZE /* alloc frame on kernel stack */
|
||||
beq- 1f
|
||||
beq- 100f
|
||||
ld r1,PACAKSAVE(r13) /* kernel stack to use */
|
||||
1: tdgei r1,-INT_FRAME_SIZE /* trap if r1 is in userspace */
|
||||
EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,0
|
||||
3:
|
||||
100: tdgei r1,-INT_FRAME_SIZE /* trap if r1 is in userspace */
|
||||
EMIT_BUG_ENTRY 100b,__FILE__,__LINE__,0
|
||||
.endif
|
||||
|
||||
std r9,_CCR(r1) /* save CR in stackframe */
|
||||
@ -551,10 +550,10 @@ END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,948)
|
||||
.if \kaup
|
||||
kuap_save_amr_and_lock r9, r10, cr1, cr0
|
||||
.endif
|
||||
beq 4f /* if from kernel mode */
|
||||
beq 101f /* if from kernel mode */
|
||||
ACCOUNT_CPU_USER_ENTRY(r13, r9, r10)
|
||||
SAVE_PPR(\area, r9)
|
||||
4:
|
||||
101:
|
||||
.else
|
||||
.if \kaup
|
||||
kuap_save_amr_and_lock r9, r10, cr1
|
||||
@ -1325,9 +1324,11 @@ EXC_COMMON_BEGIN(program_check_common)
|
||||
mr r10,r1 /* Save r1 */
|
||||
ld r1,PACAEMERGSP(r13) /* Use emergency stack */
|
||||
subi r1,r1,INT_FRAME_SIZE /* alloc stack frame */
|
||||
b 3f /* Jump into the macro !! */
|
||||
INT_COMMON 0x700, PACA_EXGEN, 0, 1, 1, 0, 0
|
||||
b 3f
|
||||
2:
|
||||
INT_COMMON 0x700, PACA_EXGEN, 1, 1, 1, 0, 0
|
||||
3:
|
||||
bl save_nvgprs
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
bl program_check_exception
|
||||
|
Loading…
Reference in New Issue
Block a user