powerpc/64s/exception: remove pointless EXCEPTION_PROLOG macro indirection
No generated code change. Final vmlinux is changed only due to change in bug table line numbers. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
f3c8b6c63e
commit
d064151fd3
|
@ -326,40 +326,6 @@ END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,948)
|
|||
std r0,GPR0(r1); /* save r0 in stackframe */ \
|
||||
std r10,GPR1(r1); /* save r1 in stackframe */ \
|
||||
|
||||
|
||||
/*
|
||||
* The common exception prolog is used for all except a few exceptions
|
||||
* such as a segment miss on a kernel address. We have to be prepared
|
||||
* to take another exception from the point where we first touch the
|
||||
* kernel stack onwards.
|
||||
*
|
||||
* On entry r13 points to the paca, r9-r13 are saved in the paca,
|
||||
* r9 contains the saved CR, r11 and r12 contain the saved SRR0 and
|
||||
* SRR1, and relocation is on.
|
||||
*/
|
||||
#define EXCEPTION_PROLOG_COMMON(n, area) \
|
||||
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; \
|
||||
ld r1,PACAKSAVE(r13); /* kernel stack to use */ \
|
||||
1: cmpdi cr1,r1,-INT_FRAME_SIZE; /* check if r1 is in userspace */ \
|
||||
blt+ cr1,3f; /* abort if it is */ \
|
||||
li r1,(n); /* will be reloaded later */ \
|
||||
sth r1,PACA_TRAP_SAVE(r13); \
|
||||
std r3,area+EX_R3(r13); \
|
||||
addi r3,r13,area; /* r3 -> where regs are saved*/ \
|
||||
RESTORE_CTR(r1, area); \
|
||||
b bad_stack; \
|
||||
3: EXCEPTION_PROLOG_COMMON_1(); \
|
||||
kuap_save_amr_and_lock r9, r10, cr1, cr0; \
|
||||
beq 4f; /* if from kernel mode */ \
|
||||
ACCOUNT_CPU_USER_ENTRY(r13, r9, r10); \
|
||||
SAVE_PPR(area, r9); \
|
||||
4: EXCEPTION_PROLOG_COMMON_2(area) \
|
||||
EXCEPTION_PROLOG_COMMON_3(n) \
|
||||
ACCOUNT_STOLEN_TIME
|
||||
|
||||
/* Save original regs values from save area to stack frame. */
|
||||
#define EXCEPTION_PROLOG_COMMON_2(area) \
|
||||
ld r9,area+EX_R9(r13); /* move r9, r10 to stackframe */ \
|
||||
|
@ -379,7 +345,7 @@ END_FTR_SECTION_NESTED(CPU_FTR_CFAR, CPU_FTR_CFAR, 66); \
|
|||
GET_CTR(r10, area); \
|
||||
std r10,_CTR(r1);
|
||||
|
||||
#define EXCEPTION_PROLOG_COMMON_3(n) \
|
||||
#define EXCEPTION_PROLOG_COMMON_3(trap) \
|
||||
std r2,GPR2(r1); /* save r2 in stackframe */ \
|
||||
SAVE_4GPRS(3, r1); /* save r3 - r6 in stackframe */ \
|
||||
SAVE_2GPRS(7, r1); /* save r7, r8 in stackframe */ \
|
||||
|
@ -390,13 +356,53 @@ END_FTR_SECTION_NESTED(CPU_FTR_CFAR, CPU_FTR_CFAR, 66); \
|
|||
mfspr r11,SPRN_XER; /* save XER in stackframe */ \
|
||||
std r10,SOFTE(r1); \
|
||||
std r11,_XER(r1); \
|
||||
li r9,(n)+1; \
|
||||
li r9,(trap)+1; \
|
||||
std r9,_TRAP(r1); /* set trap number */ \
|
||||
li r10,0; \
|
||||
ld r11,exception_marker@toc(r2); \
|
||||
std r10,RESULT(r1); /* clear regs->result */ \
|
||||
std r11,STACK_FRAME_OVERHEAD-16(r1); /* mark the frame */
|
||||
|
||||
/*
|
||||
* On entry r13 points to the paca, r9-r13 are saved in the paca,
|
||||
* r9 contains the saved CR, r11 and r12 contain the saved SRR0 and
|
||||
* SRR1, and relocation is on.
|
||||
*/
|
||||
#define EXCEPTION_COMMON(area, trap) \
|
||||
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; \
|
||||
ld r1,PACAKSAVE(r13); /* kernel stack to use */ \
|
||||
1: cmpdi cr1,r1,-INT_FRAME_SIZE; /* check if r1 is in userspace */ \
|
||||
blt+ cr1,3f; /* abort if it is */ \
|
||||
li r1,(trap); /* will be reloaded later */ \
|
||||
sth r1,PACA_TRAP_SAVE(r13); \
|
||||
std r3,area+EX_R3(r13); \
|
||||
addi r3,r13,area; /* r3 -> where regs are saved*/ \
|
||||
RESTORE_CTR(r1, area); \
|
||||
b bad_stack; \
|
||||
3: EXCEPTION_PROLOG_COMMON_1(); \
|
||||
kuap_save_amr_and_lock r9, r10, cr1, cr0; \
|
||||
beq 4f; /* if from kernel mode */ \
|
||||
ACCOUNT_CPU_USER_ENTRY(r13, r9, r10); \
|
||||
SAVE_PPR(area, r9); \
|
||||
4: EXCEPTION_PROLOG_COMMON_2(area); \
|
||||
EXCEPTION_PROLOG_COMMON_3(trap); \
|
||||
ACCOUNT_STOLEN_TIME
|
||||
|
||||
|
||||
/*
|
||||
* Exception where stack is already set in r1, r1 is saved in r10.
|
||||
* PPR save and CPU accounting is not done (for some reason).
|
||||
*/
|
||||
#define EXCEPTION_COMMON_STACK(area, trap) \
|
||||
EXCEPTION_PROLOG_COMMON_1(); \
|
||||
kuap_save_amr_and_lock r9, r10, cr1; \
|
||||
EXCEPTION_PROLOG_COMMON_2(area); \
|
||||
EXCEPTION_PROLOG_COMMON_3(trap)
|
||||
|
||||
|
||||
#define RUNLATCH_ON \
|
||||
BEGIN_FTR_SECTION \
|
||||
ld r3, PACA_THREAD_INFO(r13); \
|
||||
|
@ -405,18 +411,6 @@ BEGIN_FTR_SECTION \
|
|||
beql ppc64_runlatch_on_trampoline; \
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
|
||||
|
||||
#define EXCEPTION_COMMON(area, trap) \
|
||||
EXCEPTION_PROLOG_COMMON(trap, area); \
|
||||
|
||||
/*
|
||||
* Exception where stack is already set in r1, r1 is saved in r10
|
||||
*/
|
||||
#define EXCEPTION_COMMON_STACK(area, trap) \
|
||||
EXCEPTION_PROLOG_COMMON_1(); \
|
||||
kuap_save_amr_and_lock r9, r10, cr1; \
|
||||
EXCEPTION_PROLOG_COMMON_2(area); \
|
||||
EXCEPTION_PROLOG_COMMON_3(trap)
|
||||
|
||||
/*
|
||||
* When the idle code in power4_idle puts the CPU into NAP mode,
|
||||
* it has to do so in a loop, and relies on the external interrupt
|
||||
|
@ -1048,7 +1042,7 @@ EXC_COMMON_BEGIN(machine_check_common)
|
|||
std r10,PACA_EXMC+EX_DAR(r13)
|
||||
mfspr r10,SPRN_DSISR
|
||||
stw r10,PACA_EXMC+EX_DSISR(r13)
|
||||
EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC)
|
||||
EXCEPTION_COMMON(PACA_EXMC, 0x200)
|
||||
FINISH_NAP
|
||||
RECONCILE_IRQ_STATE(r10, r11)
|
||||
ld r3,PACA_EXMC+EX_DAR(r13)
|
||||
|
@ -1299,7 +1293,7 @@ EXC_COMMON_BEGIN(data_access_common)
|
|||
* r9 - r13 are saved in paca->exgen.
|
||||
* EX_DAR and EX_DSISR have saved DAR/DSISR
|
||||
*/
|
||||
EXCEPTION_PROLOG_COMMON(0x300, PACA_EXGEN)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0x300)
|
||||
RECONCILE_IRQ_STATE(r10, r11)
|
||||
ld r12,_MSR(r1)
|
||||
ld r3,PACA_EXGEN+EX_DAR(r13)
|
||||
|
@ -1338,7 +1332,7 @@ EXC_VIRT_END(data_access_slb, 0x4380, 0x80)
|
|||
TRAMP_KVM_SKIP(PACA_EXSLB, 0x380)
|
||||
|
||||
EXC_COMMON_BEGIN(data_access_slb_common)
|
||||
EXCEPTION_PROLOG_COMMON(0x380, PACA_EXSLB)
|
||||
EXCEPTION_COMMON(PACA_EXSLB, 0x380)
|
||||
ld r4,PACA_EXSLB+EX_DAR(r13)
|
||||
std r4,_DAR(r1)
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
|
@ -1368,7 +1362,7 @@ EXC_VIRT(instruction_access, 0x4400, 0x80, 0x400)
|
|||
TRAMP_KVM(PACA_EXGEN, 0x400)
|
||||
|
||||
EXC_COMMON_BEGIN(instruction_access_common)
|
||||
EXCEPTION_PROLOG_COMMON(0x400, PACA_EXGEN)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0x400)
|
||||
RECONCILE_IRQ_STATE(r10, r11)
|
||||
ld r12,_MSR(r1)
|
||||
ld r3,_NIP(r1)
|
||||
|
@ -1388,7 +1382,7 @@ __EXC_VIRT(instruction_access_slb, 0x4480, 0x80, 0x480, PACA_EXSLB)
|
|||
TRAMP_KVM(PACA_EXSLB, 0x480)
|
||||
|
||||
EXC_COMMON_BEGIN(instruction_access_slb_common)
|
||||
EXCEPTION_PROLOG_COMMON(0x480, PACA_EXSLB)
|
||||
EXCEPTION_COMMON(PACA_EXSLB, 0x480)
|
||||
ld r4,_NIP(r1)
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
BEGIN_MMU_FTR_SECTION
|
||||
|
@ -1465,7 +1459,7 @@ EXC_VIRT_END(alignment, 0x4600, 0x100)
|
|||
|
||||
TRAMP_KVM(PACA_EXGEN, 0x600)
|
||||
EXC_COMMON_BEGIN(alignment_common)
|
||||
EXCEPTION_PROLOG_COMMON(0x600, PACA_EXGEN)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0x600)
|
||||
ld r3,PACA_EXGEN+EX_DAR(r13)
|
||||
lwz r4,PACA_EXGEN+EX_DSISR(r13)
|
||||
std r3,_DAR(r1)
|
||||
|
@ -1503,7 +1497,7 @@ EXC_COMMON_BEGIN(program_check_common)
|
|||
ld r1,PACAEMERGSP(r13) /* Use emergency stack */
|
||||
subi r1,r1,INT_FRAME_SIZE /* alloc stack frame */
|
||||
b 3f /* Jump into the macro !! */
|
||||
1: EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN)
|
||||
1: EXCEPTION_COMMON(PACA_EXGEN, 0x700)
|
||||
bl save_nvgprs
|
||||
RECONCILE_IRQ_STATE(r10, r11)
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
|
@ -1515,7 +1509,7 @@ EXC_REAL(fp_unavailable, 0x800, 0x100)
|
|||
EXC_VIRT(fp_unavailable, 0x4800, 0x100, 0x800)
|
||||
TRAMP_KVM(PACA_EXGEN, 0x800)
|
||||
EXC_COMMON_BEGIN(fp_unavailable_common)
|
||||
EXCEPTION_PROLOG_COMMON(0x800, PACA_EXGEN)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0x800)
|
||||
bne 1f /* if from user, just load it up */
|
||||
bl save_nvgprs
|
||||
RECONCILE_IRQ_STATE(r10, r11)
|
||||
|
@ -1728,7 +1722,7 @@ EXC_COMMON_BEGIN(h_data_storage_common)
|
|||
std r10,PACA_EXGEN+EX_DAR(r13)
|
||||
mfspr r10,SPRN_HDSISR
|
||||
stw r10,PACA_EXGEN+EX_DSISR(r13)
|
||||
EXCEPTION_PROLOG_COMMON(0xe00, PACA_EXGEN)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0xe00)
|
||||
bl save_nvgprs
|
||||
RECONCILE_IRQ_STATE(r10, r11)
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
|
@ -1860,7 +1854,7 @@ EXC_REAL_OOL(altivec_unavailable, 0xf20, 0x20)
|
|||
EXC_VIRT_OOL(altivec_unavailable, 0x4f20, 0x20, 0xf20)
|
||||
TRAMP_KVM(PACA_EXGEN, 0xf20)
|
||||
EXC_COMMON_BEGIN(altivec_unavailable_common)
|
||||
EXCEPTION_PROLOG_COMMON(0xf20, PACA_EXGEN)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0xf20)
|
||||
#ifdef CONFIG_ALTIVEC
|
||||
BEGIN_FTR_SECTION
|
||||
beq 1f
|
||||
|
@ -1897,7 +1891,7 @@ EXC_REAL_OOL(vsx_unavailable, 0xf40, 0x20)
|
|||
EXC_VIRT_OOL(vsx_unavailable, 0x4f40, 0x20, 0xf40)
|
||||
TRAMP_KVM(PACA_EXGEN, 0xf40)
|
||||
EXC_COMMON_BEGIN(vsx_unavailable_common)
|
||||
EXCEPTION_PROLOG_COMMON(0xf40, PACA_EXGEN)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0xf40)
|
||||
#ifdef CONFIG_VSX
|
||||
BEGIN_FTR_SECTION
|
||||
beq 1f
|
||||
|
|
Loading…
Reference in New Issue