Commit 47169fba authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

powerpc/64s/exception: Move EXCEPTION_COMMON additions into callers

More cases of code insertion via macros that does not add a great
deal. All the additions have to be specified in the macro arguments,
so they can just as well go after the macro.

No generated code change.
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent c06075f3
...@@ -640,21 +640,6 @@ END_FTR_SECTION_NESTED(ftr,ftr,943) ...@@ -640,21 +640,6 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
EXCEPTION_PROLOG_1 EXC_HV, PACA_EXGEN, 1, vec, bitmask ; \ EXCEPTION_PROLOG_1 EXC_HV, PACA_EXGEN, 1, vec, bitmask ; \
EXCEPTION_PROLOG_2_VIRT label, EXC_HV EXCEPTION_PROLOG_2_VIRT label, EXC_HV
/*
* Our exception common code can be passed various "additions"
* to specify the behaviour of interrupts, whether to kick the
* runlatch, etc...
*/
/*
* This addition reconciles our actual IRQ state with the various software
* flags that track it. This may call C code.
*/
#define ADD_RECONCILE RECONCILE_IRQ_STATE(r10,r11)
#define ADD_NVGPRS \
bl save_nvgprs
#define RUNLATCH_ON \ #define RUNLATCH_ON \
BEGIN_FTR_SECTION \ BEGIN_FTR_SECTION \
ld r3, PACA_THREAD_INFO(r13); \ ld r3, PACA_THREAD_INFO(r13); \
...@@ -663,25 +648,22 @@ BEGIN_FTR_SECTION \ ...@@ -663,25 +648,22 @@ BEGIN_FTR_SECTION \
beql ppc64_runlatch_on_trampoline; \ beql ppc64_runlatch_on_trampoline; \
END_FTR_SECTION_IFSET(CPU_FTR_CTRL) END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
#define EXCEPTION_COMMON(area, trap, label, additions) \ #define EXCEPTION_COMMON(area, trap) \
EXCEPTION_PROLOG_COMMON(trap, area); \ EXCEPTION_PROLOG_COMMON(trap, area); \
/* Volatile regs are potentially clobbered here */ \
additions
/* /*
* Exception where stack is already set in r1, r1 is saved in r10, and it * Exception where stack is already set in r1, r1 is saved in r10
* continues rather than returns.
*/ */
#define EXCEPTION_COMMON_NORET_STACK(area, trap, label, additions) \ #define EXCEPTION_COMMON_STACK(area, trap) \
EXCEPTION_PROLOG_COMMON_1(); \ EXCEPTION_PROLOG_COMMON_1(); \
kuap_save_amr_and_lock r9, r10, cr1; \ kuap_save_amr_and_lock r9, r10, cr1; \
EXCEPTION_PROLOG_COMMON_2(area); \ EXCEPTION_PROLOG_COMMON_2(area); \
EXCEPTION_PROLOG_COMMON_3(trap); \ EXCEPTION_PROLOG_COMMON_3(trap)
/* Volatile regs are potentially clobbered here */ \
additions
#define STD_EXCEPTION_COMMON(trap, label, hdlr) \ #define STD_EXCEPTION_COMMON(trap, hdlr) \
EXCEPTION_COMMON(PACA_EXGEN, trap, label, ADD_NVGPRS;ADD_RECONCILE); \ EXCEPTION_COMMON(PACA_EXGEN, trap); \
bl save_nvgprs; \
RECONCILE_IRQ_STATE(r10, r11); \
addi r3,r1,STACK_FRAME_OVERHEAD; \ addi r3,r1,STACK_FRAME_OVERHEAD; \
bl hdlr; \ bl hdlr; \
b ret_from_except b ret_from_except
...@@ -691,9 +673,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_CTRL) ...@@ -691,9 +673,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
* in the idle task and therefore need the special idle handling * in the idle task and therefore need the special idle handling
* (finish nap and runlatch) * (finish nap and runlatch)
*/ */
#define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr) \ #define STD_EXCEPTION_COMMON_ASYNC(trap, hdlr) \
EXCEPTION_COMMON(PACA_EXGEN, trap, label, \ EXCEPTION_COMMON(PACA_EXGEN, trap); \
FINISH_NAP;ADD_RECONCILE;RUNLATCH_ON); \ FINISH_NAP; \
RECONCILE_IRQ_STATE(r10, r11); \
RUNLATCH_ON; \
addi r3,r1,STACK_FRAME_OVERHEAD; \ addi r3,r1,STACK_FRAME_OVERHEAD; \
bl hdlr; \ bl hdlr; \
b ret_from_except_lite b ret_from_except_lite
......
...@@ -403,11 +403,11 @@ end_##sname: ...@@ -403,11 +403,11 @@ end_##sname:
#define EXC_COMMON(name, realvec, hdlr) \ #define EXC_COMMON(name, realvec, hdlr) \
EXC_COMMON_BEGIN(name); \ EXC_COMMON_BEGIN(name); \
STD_EXCEPTION_COMMON(realvec, name, hdlr) STD_EXCEPTION_COMMON(realvec, hdlr)
#define EXC_COMMON_ASYNC(name, realvec, hdlr) \ #define EXC_COMMON_ASYNC(name, realvec, hdlr) \
EXC_COMMON_BEGIN(name); \ EXC_COMMON_BEGIN(name); \
STD_EXCEPTION_COMMON_ASYNC(realvec, name, hdlr) STD_EXCEPTION_COMMON_ASYNC(realvec, hdlr)
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
......
...@@ -164,21 +164,6 @@ EXC_COMMON_BEGIN(system_reset_idle_common) ...@@ -164,21 +164,6 @@ EXC_COMMON_BEGIN(system_reset_idle_common)
b idle_return_gpr_loss b idle_return_gpr_loss
#endif #endif
/*
* Set IRQS_ALL_DISABLED unconditionally so arch_irqs_disabled does
* the right thing. We do not want to reconcile because that goes
* through irq tracing which we don't want in NMI.
*
* Save PACAIRQHAPPENED because some code will do a hard disable
* (e.g., xmon). So we want to restore this back to where it was
* when we return. DAR is unused in the stack, so save it there.
*/
#define ADD_RECONCILE_NMI \
li r10,IRQS_ALL_DISABLED; \
stb r10,PACAIRQSOFTMASK(r13); \
lbz r10,PACAIRQHAPPENED(r13); \
std r10,_DAR(r1)
EXC_COMMON_BEGIN(system_reset_common) EXC_COMMON_BEGIN(system_reset_common)
/* /*
* Increment paca->in_nmi then enable MSR_RI. SLB or MCE will be able * Increment paca->in_nmi then enable MSR_RI. SLB or MCE will be able
...@@ -195,8 +180,22 @@ EXC_COMMON_BEGIN(system_reset_common) ...@@ -195,8 +180,22 @@ EXC_COMMON_BEGIN(system_reset_common)
mr r10,r1 mr r10,r1
ld r1,PACA_NMI_EMERG_SP(r13) ld r1,PACA_NMI_EMERG_SP(r13)
subi r1,r1,INT_FRAME_SIZE subi r1,r1,INT_FRAME_SIZE
EXCEPTION_COMMON_NORET_STACK(PACA_EXNMI, 0x100, system_reset, EXCEPTION_COMMON_STACK(PACA_EXNMI, 0x100)
ADD_NVGPRS;ADD_RECONCILE_NMI) bl save_nvgprs
/*
* Set IRQS_ALL_DISABLED unconditionally so arch_irqs_disabled does
* the right thing. We do not want to reconcile because that goes
* through irq tracing which we don't want in NMI.
*
* Save PACAIRQHAPPENED because some code will do a hard disable
* (e.g., xmon). So we want to restore this back to where it was
* when we return. DAR is unused in the stack, so save it there.
*/
li r10,IRQS_ALL_DISABLED
stb r10,PACAIRQSOFTMASK(r13)
lbz r10,PACAIRQHAPPENED(r13)
std r10,_DAR(r1)
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
bl system_reset_exception bl system_reset_exception
...@@ -1172,8 +1171,11 @@ hmi_exception_after_realmode: ...@@ -1172,8 +1171,11 @@ hmi_exception_after_realmode:
b tramp_real_hmi_exception b tramp_real_hmi_exception
EXC_COMMON_BEGIN(hmi_exception_common) EXC_COMMON_BEGIN(hmi_exception_common)
EXCEPTION_COMMON(PACA_EXGEN, 0xe60, hmi_exception_common, EXCEPTION_COMMON(PACA_EXGEN, 0xe60)
FINISH_NAP;ADD_NVGPRS;ADD_RECONCILE;RUNLATCH_ON) FINISH_NAP
bl save_nvgprs
RECONCILE_IRQ_STATE(r10, r11)
RUNLATCH_ON
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
bl handle_hmi_exception bl handle_hmi_exception
b ret_from_except b ret_from_except
...@@ -1471,8 +1473,9 @@ EXC_COMMON_BEGIN(soft_nmi_common) ...@@ -1471,8 +1473,9 @@ EXC_COMMON_BEGIN(soft_nmi_common)
mr r10,r1 mr r10,r1
ld r1,PACAEMERGSP(r13) ld r1,PACAEMERGSP(r13)
subi r1,r1,INT_FRAME_SIZE subi r1,r1,INT_FRAME_SIZE
EXCEPTION_COMMON_NORET_STACK(PACA_EXGEN, 0x900, system_reset, EXCEPTION_COMMON_STACK(PACA_EXGEN, 0x900)
ADD_NVGPRS;ADD_RECONCILE) bl save_nvgprs
RECONCILE_IRQ_STATE(r10, r11)
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
bl soft_nmi_interrupt bl soft_nmi_interrupt
b ret_from_except b ret_from_except
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment