mirror of https://gitee.com/openkylin/linux.git
powerpc/64s: Exception macro for stack frame and initial register save
This code is common to a few exceptions, and another user will be added. This causes a trivial change to generated code: - 604: std r9,416(r1) - 608: mfspr r11,314 - 60c: std r11,368(r1) - 610: mfspr r12,315 + 604: mfspr r11,314 + 608: mfspr r12,315 + 60c: std r9,416(r1) + 610: std r11,368(r1) machine_check_powernv_early could also use this, but that requires non trivial changes to generated code, so that's for another patch. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
83a980f7f4
commit
a4087a4d38
|
@ -323,6 +323,15 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|||
|
||||
#define NOTEST(n)
|
||||
|
||||
#define EXCEPTION_PROLOG_COMMON_1() \
|
||||
std r9,_CCR(r1); /* save CR in stackframe */ \
|
||||
std r11,_NIP(r1); /* save SRR0 in stackframe */ \
|
||||
std r12,_MSR(r1); /* save SRR1 in stackframe */ \
|
||||
std r10,0(r1); /* make stack chain pointer */ \
|
||||
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
|
||||
|
@ -347,12 +356,7 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
|||
addi r3,r13,area; /* r3 -> where regs are saved*/ \
|
||||
RESTORE_CTR(r1, area); \
|
||||
b bad_stack; \
|
||||
3: std r9,_CCR(r1); /* save CR in stackframe */ \
|
||||
std r11,_NIP(r1); /* save SRR0 in stackframe */ \
|
||||
std r12,_MSR(r1); /* save SRR1 in stackframe */ \
|
||||
std r10,0(r1); /* make stack chain pointer */ \
|
||||
std r0,GPR0(r1); /* save r0 in stackframe */ \
|
||||
std r10,GPR1(r1); /* save r1 in stackframe */ \
|
||||
3: EXCEPTION_PROLOG_COMMON_1(); \
|
||||
beq 4f; /* if from kernel mode */ \
|
||||
ACCOUNT_CPU_USER_ENTRY(r13, r9, r10); \
|
||||
SAVE_PPR(area, r9, r10); \
|
||||
|
|
|
@ -930,16 +930,11 @@ TRAMP_KVM_HV(PACA_EXGEN, 0xe60)
|
|||
TRAMP_REAL_BEGIN(hmi_exception_early)
|
||||
EXCEPTION_PROLOG_1(PACA_EXGEN, KVMTEST_HV, 0xe60)
|
||||
mr r10,r1 /* Save r1 */
|
||||
ld r1,PACAEMERGSP(r13) /* Use emergency stack */
|
||||
ld r1,PACAEMERGSP(r13) /* Use emergency stack for realmode */
|
||||
subi r1,r1,INT_FRAME_SIZE /* alloc stack frame */
|
||||
std r9,_CCR(r1) /* save CR in stackframe */
|
||||
mfspr r11,SPRN_HSRR0 /* Save HSRR0 */
|
||||
std r11,_NIP(r1) /* save HSRR0 in stackframe */
|
||||
mfspr r12,SPRN_HSRR1 /* Save SRR1 */
|
||||
std r12,_MSR(r1) /* save SRR1 in stackframe */
|
||||
std r10,0(r1) /* make stack chain pointer */
|
||||
std r0,GPR0(r1) /* save r0 in stackframe */
|
||||
std r10,GPR1(r1) /* save r1 in stackframe */
|
||||
mfspr r12,SPRN_HSRR1 /* Save HSRR1 */
|
||||
EXCEPTION_PROLOG_COMMON_1()
|
||||
EXCEPTION_PROLOG_COMMON_2(PACA_EXGEN)
|
||||
EXCEPTION_PROLOG_COMMON_3(0xe60)
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
|
|
Loading…
Reference in New Issue