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: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Родитель
c06075f3d3
Коммит
47169fba3a
|
@ -640,21 +640,6 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|||
EXCEPTION_PROLOG_1 EXC_HV, PACA_EXGEN, 1, vec, bitmask ; \
|
||||
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 \
|
||||
BEGIN_FTR_SECTION \
|
||||
ld r3, PACA_THREAD_INFO(r13); \
|
||||
|
@ -663,25 +648,22 @@ BEGIN_FTR_SECTION \
|
|||
beql ppc64_runlatch_on_trampoline; \
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
|
||||
|
||||
#define EXCEPTION_COMMON(area, trap, label, additions) \
|
||||
#define EXCEPTION_COMMON(area, trap) \
|
||||
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
|
||||
* continues rather than returns.
|
||||
* Exception where stack is already set in r1, r1 is saved in r10
|
||||
*/
|
||||
#define EXCEPTION_COMMON_NORET_STACK(area, trap, label, additions) \
|
||||
#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); \
|
||||
/* Volatile regs are potentially clobbered here */ \
|
||||
additions
|
||||
EXCEPTION_PROLOG_COMMON_3(trap)
|
||||
|
||||
#define STD_EXCEPTION_COMMON(trap, label, hdlr) \
|
||||
EXCEPTION_COMMON(PACA_EXGEN, trap, label, ADD_NVGPRS;ADD_RECONCILE); \
|
||||
#define STD_EXCEPTION_COMMON(trap, hdlr) \
|
||||
EXCEPTION_COMMON(PACA_EXGEN, trap); \
|
||||
bl save_nvgprs; \
|
||||
RECONCILE_IRQ_STATE(r10, r11); \
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD; \
|
||||
bl hdlr; \
|
||||
b ret_from_except
|
||||
|
@ -691,9 +673,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
|
|||
* in the idle task and therefore need the special idle handling
|
||||
* (finish nap and runlatch)
|
||||
*/
|
||||
#define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr) \
|
||||
EXCEPTION_COMMON(PACA_EXGEN, trap, label, \
|
||||
FINISH_NAP;ADD_RECONCILE;RUNLATCH_ON); \
|
||||
#define STD_EXCEPTION_COMMON_ASYNC(trap, hdlr) \
|
||||
EXCEPTION_COMMON(PACA_EXGEN, trap); \
|
||||
FINISH_NAP; \
|
||||
RECONCILE_IRQ_STATE(r10, r11); \
|
||||
RUNLATCH_ON; \
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD; \
|
||||
bl hdlr; \
|
||||
b ret_from_except_lite
|
||||
|
|
|
@ -403,11 +403,11 @@ name:
|
|||
|
||||
#define EXC_COMMON(name, realvec, hdlr) \
|
||||
EXC_COMMON_BEGIN(name); \
|
||||
STD_EXCEPTION_COMMON(realvec, name, hdlr)
|
||||
STD_EXCEPTION_COMMON(realvec, hdlr)
|
||||
|
||||
#define EXC_COMMON_ASYNC(name, realvec, hdlr) \
|
||||
EXC_COMMON_BEGIN(name); \
|
||||
STD_EXCEPTION_COMMON_ASYNC(realvec, name, hdlr)
|
||||
STD_EXCEPTION_COMMON_ASYNC(realvec, hdlr)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
|
|
|
@ -164,21 +164,6 @@ EXC_COMMON_BEGIN(system_reset_idle_common)
|
|||
b idle_return_gpr_loss
|
||||
#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)
|
||||
/*
|
||||
* Increment paca->in_nmi then enable MSR_RI. SLB or MCE will be able
|
||||
|
@ -195,8 +180,22 @@ EXC_COMMON_BEGIN(system_reset_common)
|
|||
mr r10,r1
|
||||
ld r1,PACA_NMI_EMERG_SP(r13)
|
||||
subi r1,r1,INT_FRAME_SIZE
|
||||
EXCEPTION_COMMON_NORET_STACK(PACA_EXNMI, 0x100, system_reset,
|
||||
ADD_NVGPRS;ADD_RECONCILE_NMI)
|
||||
EXCEPTION_COMMON_STACK(PACA_EXNMI, 0x100)
|
||||
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
|
||||
bl system_reset_exception
|
||||
|
||||
|
@ -1172,8 +1171,11 @@ hmi_exception_after_realmode:
|
|||
b tramp_real_hmi_exception
|
||||
|
||||
EXC_COMMON_BEGIN(hmi_exception_common)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0xe60, hmi_exception_common,
|
||||
FINISH_NAP;ADD_NVGPRS;ADD_RECONCILE;RUNLATCH_ON)
|
||||
EXCEPTION_COMMON(PACA_EXGEN, 0xe60)
|
||||
FINISH_NAP
|
||||
bl save_nvgprs
|
||||
RECONCILE_IRQ_STATE(r10, r11)
|
||||
RUNLATCH_ON
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
bl handle_hmi_exception
|
||||
b ret_from_except
|
||||
|
@ -1471,8 +1473,9 @@ EXC_COMMON_BEGIN(soft_nmi_common)
|
|||
mr r10,r1
|
||||
ld r1,PACAEMERGSP(r13)
|
||||
subi r1,r1,INT_FRAME_SIZE
|
||||
EXCEPTION_COMMON_NORET_STACK(PACA_EXGEN, 0x900, system_reset,
|
||||
ADD_NVGPRS;ADD_RECONCILE)
|
||||
EXCEPTION_COMMON_STACK(PACA_EXGEN, 0x900)
|
||||
bl save_nvgprs
|
||||
RECONCILE_IRQ_STATE(r10, r11)
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
bl soft_nmi_interrupt
|
||||
b ret_from_except
|
||||
|
|
Загрузка…
Ссылка в новой задаче