Excerpts from Alexey Kardashevskiy's message of March 20, 2021 7:07 pm: > > > On 06/03/2021 02:06, Nicholas Piggin wrote: >> This is not used by PR KVM. >> >> Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx> > > > Reviewed-by: Alexey Kardashevskiy <aik@xxxxxxxxx> > > 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, Thanks. I do realise there's a bit of shuffling around in this part of the series, I'm trying to see if that can be improved a bit. But 9/41 is just moving the code without change which I prefer to do first. This one changes the calling convention for PR which I think is better to do after we have the entry point in a common file. Thanks, Nick > > >> --- >> 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 >