KVM: PPC: Book3S 64: move bad_host_intr check to HV handler
The bad_host_intr check will never be true with PR KVM, move it to HV code. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20210528090752.3542186-7-npiggin@gmail.com
This commit is contained in:
parent
69fdd67499
commit
1b5821c630
@ -107,16 +107,12 @@ do_kvm_interrupt:
|
||||
beq- .Lmaybe_skip
|
||||
.Lno_skip:
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
||||
cmpwi r9,KVM_GUEST_MODE_HOST_HV
|
||||
beq kvmppc_bad_host_intr
|
||||
#ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE
|
||||
cmpwi r9,KVM_GUEST_MODE_GUEST
|
||||
ld r9,HSTATE_SCRATCH2(r13)
|
||||
beq kvmppc_interrupt_pr
|
||||
#endif
|
||||
b kvmppc_interrupt_hv
|
||||
#else
|
||||
ld r9,HSTATE_SCRATCH2(r13)
|
||||
b kvmppc_interrupt_pr
|
||||
#endif
|
||||
|
||||
|
@ -1268,6 +1268,7 @@ hdec_soon:
|
||||
kvmppc_interrupt_hv:
|
||||
/*
|
||||
* Register contents:
|
||||
* R9 = HSTATE_IN_GUEST
|
||||
* R12 = (guest CR << 32) | interrupt vector
|
||||
* R13 = PACA
|
||||
* guest R12 saved in shadow VCPU SCRATCH0
|
||||
@ -1275,6 +1276,8 @@ kvmppc_interrupt_hv:
|
||||
* guest R9 saved in HSTATE_SCRATCH2
|
||||
*/
|
||||
/* We're now back in the host but in guest MMU context */
|
||||
cmpwi r9,KVM_GUEST_MODE_HOST_HV
|
||||
beq kvmppc_bad_host_intr
|
||||
li r9, KVM_GUEST_MODE_HOST_HV
|
||||
stb r9, HSTATE_IN_GUEST(r13)
|
||||
|
||||
@ -3279,7 +3282,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_P9_TM_HV_ASSIST)
|
||||
* cfar is saved in HSTATE_CFAR(r13)
|
||||
* ppr is saved in HSTATE_PPR(r13)
|
||||
*/
|
||||
.global kvmppc_bad_host_intr
|
||||
kvmppc_bad_host_intr:
|
||||
/*
|
||||
* Switch to the emergency stack, but start half-way down in
|
||||
|
@ -164,12 +164,15 @@ kvmppc_interrupt_pr:
|
||||
/* 64-bit entry. Register usage at this point:
|
||||
*
|
||||
* SPRG_SCRATCH0 = guest R13
|
||||
* R9 = HSTATE_IN_GUEST
|
||||
* R12 = (guest CR << 32) | exit handler id
|
||||
* R13 = PACA
|
||||
* HSTATE.SCRATCH0 = guest R12
|
||||
* HSTATE.SCRATCH2 = guest R9
|
||||
*/
|
||||
#ifdef CONFIG_PPC64
|
||||
/* Match 32-bit entry */
|
||||
ld r9,HSTATE_SCRATCH2(r13)
|
||||
rotldi r12, r12, 32 /* Flip R12 halves for stw */
|
||||
stw r12, HSTATE_SCRATCH1(r13) /* CR is now in the low half */
|
||||
srdi r12, r12, 32 /* shift trap into low half */
|
||||
|
Loading…
Reference in New Issue
Block a user