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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





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,


---
  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



[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux