All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] KVM: VMX: Remove redundant handling of bus lock vmexit
@ 2021-09-27  5:53 Hao Xiang
  0 siblings, 0 replies; only message in thread
From: Hao Xiang @ 2021-09-27  5:53 UTC (permalink / raw)
  To: kvm; +Cc: linux-kernel, pbonzini, seanjc, shannon.zhao, Hao Xiang

exit_reason.bus_lock_detected may or may not be set when exit reason is
EXIT_REASON_BUS_LOCK. It is non-deterministic hardware behavior. Dealing
with KVM_RUN_X86_BUS_LOCK in handle_bus_lock_vmexit could be redundant
when exit_reason.basic is EXIT_REASON_BUS_LOCK.

We can remove redundant handling of bus lock vmexit. Set
exit_reason.bus_lock_detected (bit 26) unconditionally, and deal with
KVM_RUN_X86_BUS_LOCK only in vmx_handle_exit.

Signed-off-by: Hao Xiang <hao.xiang@linux.alibaba.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
 arch/x86/kvm/vmx/vmx.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 0c2c0d5..f993c38 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -5561,9 +5561,13 @@ static int handle_encls(struct kvm_vcpu *vcpu)
 
 static int handle_bus_lock_vmexit(struct kvm_vcpu *vcpu)
 {
-	vcpu->run->exit_reason = KVM_EXIT_X86_BUS_LOCK;
-	vcpu->run->flags |= KVM_RUN_X86_BUS_LOCK;
-	return 0;
+	struct vcpu_vmx *vmx = to_vmx(vcpu);
+
+	/* The dedicated flag (bit 26 of exit reason in vmcs field) may or may
+	 * not be set by hardware.
+	 */
+	vmx->exit_reason.bus_lock_detected = true;
+	return 1;
 }
 
 /*
@@ -6050,9 +6054,8 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
 	int ret = __vmx_handle_exit(vcpu, exit_fastpath);
 
 	/*
-	 * Even when current exit reason is handled by KVM internally, we
-	 * still need to exit to user space when bus lock detected to inform
-	 * that there is a bus lock in guest.
+	 * Exit to user space when bus lock detected to inform that there is
+	 * a bus lock in guest.
 	 */
 	if (to_vmx(vcpu)->exit_reason.bus_lock_detected) {
 		if (ret > 0)
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2021-09-27  5:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-27  5:53 [PATCH] KVM: VMX: Remove redundant handling of bus lock vmexit Hao Xiang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.