Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

authored by

Nicholas Piggin and committed by
Michael Ellerman
1b5821c6 69fdd674

+6 -5
-4
arch/powerpc/kvm/book3s_64_entry.S
··· 107 107 beq- .Lmaybe_skip 108 108 .Lno_skip: 109 109 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE 110 - cmpwi r9,KVM_GUEST_MODE_HOST_HV 111 - beq kvmppc_bad_host_intr 112 110 #ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE 113 111 cmpwi r9,KVM_GUEST_MODE_GUEST 114 - ld r9,HSTATE_SCRATCH2(r13) 115 112 beq kvmppc_interrupt_pr 116 113 #endif 117 114 b kvmppc_interrupt_hv 118 115 #else 119 - ld r9,HSTATE_SCRATCH2(r13) 120 116 b kvmppc_interrupt_pr 121 117 #endif 122 118
+3 -1
arch/powerpc/kvm/book3s_hv_rmhandlers.S
··· 1268 1268 kvmppc_interrupt_hv: 1269 1269 /* 1270 1270 * Register contents: 1271 + * R9 = HSTATE_IN_GUEST 1271 1272 * R12 = (guest CR << 32) | interrupt vector 1272 1273 * R13 = PACA 1273 1274 * guest R12 saved in shadow VCPU SCRATCH0 ··· 1276 1275 * guest R9 saved in HSTATE_SCRATCH2 1277 1276 */ 1278 1277 /* We're now back in the host but in guest MMU context */ 1278 + cmpwi r9,KVM_GUEST_MODE_HOST_HV 1279 + beq kvmppc_bad_host_intr 1279 1280 li r9, KVM_GUEST_MODE_HOST_HV 1280 1281 stb r9, HSTATE_IN_GUEST(r13) 1281 1282 ··· 3282 3279 * cfar is saved in HSTATE_CFAR(r13) 3283 3280 * ppr is saved in HSTATE_PPR(r13) 3284 3281 */ 3285 - .global kvmppc_bad_host_intr 3286 3282 kvmppc_bad_host_intr: 3287 3283 /* 3288 3284 * Switch to the emergency stack, but start half-way down in
+3
arch/powerpc/kvm/book3s_segment.S
··· 164 164 /* 64-bit entry. Register usage at this point: 165 165 * 166 166 * SPRG_SCRATCH0 = guest R13 167 + * R9 = HSTATE_IN_GUEST 167 168 * R12 = (guest CR << 32) | exit handler id 168 169 * R13 = PACA 169 170 * HSTATE.SCRATCH0 = guest R12 171 + * HSTATE.SCRATCH2 = guest R9 170 172 */ 171 173 #ifdef CONFIG_PPC64 172 174 /* Match 32-bit entry */ 175 + ld r9,HSTATE_SCRATCH2(r13) 173 176 rotldi r12, r12, 32 /* Flip R12 halves for stw */ 174 177 stw r12, HSTATE_SCRATCH1(r13) /* CR is now in the low half */ 175 178 srdi r12, r12, 32 /* shift trap into low half */