Re: [PATCH v3 14/41] KVM: PPC: Book3S 64: move bad_host_intr check to HV handler

2021-03-21 Thread Nicholas Piggin
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 
> 
> 
> Reviewed-by: Alexey Kardashevskiy 
> 
> 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
> 


Re: [PATCH v3 14/41] KVM: PPC: Book3S 64: move bad_host_intr check to HV handler

2021-03-20 Thread Alexey Kardashevskiy




On 06/03/2021 02:06, Nicholas Piggin wrote:

This is not used by PR KVM.

Signed-off-by: Nicholas Piggin 



Reviewed-by: Alexey Kardashevskiy 

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