[PATCH v3 14/41] KVM: PPC: Book3S 64: move bad_host_intr check to HV handler
Alexey Kardashevskiy
aik at ozlabs.ru
Sat Mar 20 20:07:31 AEDT 2021
On 06/03/2021 02:06, Nicholas Piggin wrote:
> This is not used by PR KVM.
>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
Reviewed-by: Alexey Kardashevskiy <aik at ozlabs.ru>
a small tote - it probably makes sense to move this before 09/41 as this
one removes what 09/41 added to book3s_64_entry.S. Thanks,
> ---
> arch/powerpc/kvm/book3s_64_entry.S | 3 ---
> arch/powerpc/kvm/book3s_hv_rmhandlers.S | 4 +++-
> arch/powerpc/kvm/book3s_segment.S | 7 +++++++
> 3 files changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/arch/powerpc/kvm/book3s_64_entry.S b/arch/powerpc/kvm/book3s_64_entry.S
> index d06e81842368..7a6b060ceed8 100644
> --- a/arch/powerpc/kvm/book3s_64_entry.S
> +++ b/arch/powerpc/kvm/book3s_64_entry.S
> @@ -78,11 +78,8 @@ 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
> diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> index f976efb7e4a9..75405ef53238 100644
> --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> @@ -1265,6 +1265,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
> @@ -1272,6 +1273,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)
>
> @@ -3272,7 +3275,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
> diff --git a/arch/powerpc/kvm/book3s_segment.S b/arch/powerpc/kvm/book3s_segment.S
> index 1f492aa4c8d6..ef1d88b869bf 100644
> --- a/arch/powerpc/kvm/book3s_segment.S
> +++ b/arch/powerpc/kvm/book3s_segment.S
> @@ -167,8 +167,15 @@ kvmppc_interrupt_pr:
> * R12 = (guest CR << 32) | exit handler id
> * R13 = PACA
> * HSTATE.SCRATCH0 = guest R12
> + *
> + * If HV is possible, additionally:
> + * R9 = HSTATE_IN_GUEST
> + * HSTATE.SCRATCH2 = guest R9
> */
> #ifdef CONFIG_PPC64
> +#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
> + ld r9,HSTATE_SCRATCH2(r13)
> +#endif
> /* Match 32-bit entry */
> rotldi r12, r12, 32 /* Flip R12 halves for stw */
> stw r12, HSTATE_SCRATCH1(r13) /* CR is now in the low half */
>
--
Alexey
More information about the Linuxppc-dev
mailing list