powerpc/64s/exception: merge KVM handler and skip variants
Conditionally expand the skip case if it is specified. 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:
parent
fa4cf6b703
commit
17bdc064a1
@ -436,26 +436,17 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro KVM_HANDLER area, hsrr, n
|
||||
.macro KVM_HANDLER area, hsrr, n, skip
|
||||
.if \skip
|
||||
cmpwi r10,KVM_GUEST_MODE_SKIP
|
||||
beq 89f
|
||||
.else
|
||||
BEGIN_FTR_SECTION_NESTED(947)
|
||||
ld r10,\area+EX_CFAR(r13)
|
||||
std r10,HSTATE_CFAR(r13)
|
||||
END_FTR_SECTION_NESTED(CPU_FTR_CFAR,CPU_FTR_CFAR,947)
|
||||
BEGIN_FTR_SECTION_NESTED(948)
|
||||
ld r10,\area+EX_PPR(r13)
|
||||
std r10,HSTATE_PPR(r13)
|
||||
END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,948)
|
||||
ld r10,\area+EX_R10(r13)
|
||||
std r12,HSTATE_SCRATCH0(r13)
|
||||
sldi r12,r9,32
|
||||
ori r12,r12,(\n)
|
||||
/* This reloads r9 before branching to kvmppc_interrupt */
|
||||
__BRANCH_TO_KVM_EXIT(\area, kvmppc_interrupt)
|
||||
.endm
|
||||
.endif
|
||||
|
||||
.macro KVM_HANDLER_SKIP area, hsrr, n
|
||||
cmpwi r10,KVM_GUEST_MODE_SKIP
|
||||
beq 89f
|
||||
BEGIN_FTR_SECTION_NESTED(948)
|
||||
ld r10,\area+EX_PPR(r13)
|
||||
std r10,HSTATE_PPR(r13)
|
||||
@ -466,6 +457,8 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
||||
ori r12,r12,(\n)
|
||||
/* This reloads r9 before branching to kvmppc_interrupt */
|
||||
__BRANCH_TO_KVM_EXIT(\area, kvmppc_interrupt)
|
||||
|
||||
.if \skip
|
||||
89: mtocrf 0x80,r9
|
||||
ld r9,\area+EX_R9(r13)
|
||||
ld r10,\area+EX_R10(r13)
|
||||
@ -474,14 +467,13 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
||||
.else
|
||||
b kvmppc_skip_interrupt
|
||||
.endif
|
||||
.endif
|
||||
.endm
|
||||
|
||||
#else
|
||||
.macro KVMTEST hsrr, n
|
||||
.endm
|
||||
.macro KVM_HANDLER area, hsrr, n
|
||||
.endm
|
||||
.macro KVM_HANDLER_SKIP area, hsrr, n
|
||||
.macro KVM_HANDLER area, hsrr, n, skip
|
||||
.endm
|
||||
#endif
|
||||
|
||||
|
@ -387,22 +387,22 @@ name:
|
||||
|
||||
#define TRAMP_KVM(area, n) \
|
||||
TRAMP_KVM_BEGIN(do_kvm_##n); \
|
||||
KVM_HANDLER area, EXC_STD, n
|
||||
KVM_HANDLER area, EXC_STD, n, 0
|
||||
|
||||
#define TRAMP_KVM_SKIP(area, n) \
|
||||
TRAMP_KVM_BEGIN(do_kvm_##n); \
|
||||
KVM_HANDLER_SKIP area, EXC_STD, n
|
||||
KVM_HANDLER area, EXC_STD, n, 1
|
||||
|
||||
/*
|
||||
* HV variant exceptions get the 0x2 bit added to their trap number.
|
||||
*/
|
||||
#define TRAMP_KVM_HV(area, n) \
|
||||
TRAMP_KVM_BEGIN(do_kvm_H##n); \
|
||||
KVM_HANDLER area, EXC_HV, n + 0x2
|
||||
KVM_HANDLER area, EXC_HV, n + 0x2, 0
|
||||
|
||||
#define TRAMP_KVM_HV_SKIP(area, n) \
|
||||
TRAMP_KVM_BEGIN(do_kvm_H##n); \
|
||||
KVM_HANDLER_SKIP area, EXC_HV, n + 0x2
|
||||
KVM_HANDLER area, EXC_HV, n + 0x2, 1
|
||||
|
||||
#define EXC_COMMON(name, realvec, hdlr) \
|
||||
EXC_COMMON_BEGIN(name); \
|
||||
|
@ -1063,7 +1063,7 @@ TRAMP_KVM_BEGIN(do_kvm_0xc00)
|
||||
SET_SCRATCH0(r10)
|
||||
std r9,PACA_EXGEN+EX_R9(r13)
|
||||
mfcr r9
|
||||
KVM_HANDLER PACA_EXGEN, EXC_STD, 0xc00
|
||||
KVM_HANDLER PACA_EXGEN, EXC_STD, 0xc00, 0
|
||||
#endif
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user