Commit 1b5821c6 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

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: default avatarNicholas Piggin <npiggin@gmail.com>
Reviewed-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210528090752.3542186-7-npiggin@gmail.com
parent 69fdd674
...@@ -107,16 +107,12 @@ do_kvm_interrupt: ...@@ -107,16 +107,12 @@ do_kvm_interrupt:
beq- .Lmaybe_skip beq- .Lmaybe_skip
.Lno_skip: .Lno_skip:
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
cmpwi r9,KVM_GUEST_MODE_HOST_HV
beq kvmppc_bad_host_intr
#ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE #ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE
cmpwi r9,KVM_GUEST_MODE_GUEST cmpwi r9,KVM_GUEST_MODE_GUEST
ld r9,HSTATE_SCRATCH2(r13)
beq kvmppc_interrupt_pr beq kvmppc_interrupt_pr
#endif #endif
b kvmppc_interrupt_hv b kvmppc_interrupt_hv
#else #else
ld r9,HSTATE_SCRATCH2(r13)
b kvmppc_interrupt_pr b kvmppc_interrupt_pr
#endif #endif
......
...@@ -1268,6 +1268,7 @@ hdec_soon: ...@@ -1268,6 +1268,7 @@ hdec_soon:
kvmppc_interrupt_hv: kvmppc_interrupt_hv:
/* /*
* Register contents: * Register contents:
* R9 = HSTATE_IN_GUEST
* R12 = (guest CR << 32) | interrupt vector * R12 = (guest CR << 32) | interrupt vector
* R13 = PACA * R13 = PACA
* guest R12 saved in shadow VCPU SCRATCH0 * guest R12 saved in shadow VCPU SCRATCH0
...@@ -1275,6 +1276,8 @@ kvmppc_interrupt_hv: ...@@ -1275,6 +1276,8 @@ kvmppc_interrupt_hv:
* guest R9 saved in HSTATE_SCRATCH2 * guest R9 saved in HSTATE_SCRATCH2
*/ */
/* We're now back in the host but in guest MMU context */ /* 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 li r9, KVM_GUEST_MODE_HOST_HV
stb r9, HSTATE_IN_GUEST(r13) stb r9, HSTATE_IN_GUEST(r13)
...@@ -3279,7 +3282,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_P9_TM_HV_ASSIST) ...@@ -3279,7 +3282,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_P9_TM_HV_ASSIST)
* cfar is saved in HSTATE_CFAR(r13) * cfar is saved in HSTATE_CFAR(r13)
* ppr is saved in HSTATE_PPR(r13) * ppr is saved in HSTATE_PPR(r13)
*/ */
.global kvmppc_bad_host_intr
kvmppc_bad_host_intr: kvmppc_bad_host_intr:
/* /*
* Switch to the emergency stack, but start half-way down in * Switch to the emergency stack, but start half-way down in
......
...@@ -164,12 +164,15 @@ kvmppc_interrupt_pr: ...@@ -164,12 +164,15 @@ kvmppc_interrupt_pr:
/* 64-bit entry. Register usage at this point: /* 64-bit entry. Register usage at this point:
* *
* SPRG_SCRATCH0 = guest R13 * SPRG_SCRATCH0 = guest R13
* R9 = HSTATE_IN_GUEST
* R12 = (guest CR << 32) | exit handler id * R12 = (guest CR << 32) | exit handler id
* R13 = PACA * R13 = PACA
* HSTATE.SCRATCH0 = guest R12 * HSTATE.SCRATCH0 = guest R12
* HSTATE.SCRATCH2 = guest R9
*/ */
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
/* Match 32-bit entry */ /* Match 32-bit entry */
ld r9,HSTATE_SCRATCH2(r13)
rotldi r12, r12, 32 /* Flip R12 halves for stw */ rotldi r12, r12, 32 /* Flip R12 halves for stw */
stw r12, HSTATE_SCRATCH1(r13) /* CR is now in the low half */ stw r12, HSTATE_SCRATCH1(r13) /* CR is now in the low half */
srdi r12, r12, 32 /* shift trap into low half */ srdi r12, r12, 32 /* shift trap into low half */
......
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