summaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/vmx.c
diff options
context:
space:
mode:
authorAvi Kivity2012-06-12 19:21:38 +0200
committerAvi Kivity2012-07-09 13:19:04 +0200
commitde87dcddc70ec6a90adfcc81f0ad7d84a892ffce (patch)
tree8cbb9d20db9b2be82681cf30ee1bc4f2213c71a1 /arch/x86/kvm/vmx.c
parentKVM: x86 emulator: implement ENTER (diff)
downloadkernel-qcow2-linux-de87dcddc70ec6a90adfcc81f0ad7d84a892ffce.tar.gz
kernel-qcow2-linux-de87dcddc70ec6a90adfcc81f0ad7d84a892ffce.tar.xz
kernel-qcow2-linux-de87dcddc70ec6a90adfcc81f0ad7d84a892ffce.zip
KVM: VMX: Stop invalid guest state emulation on pending event
Process the event, possibly injecting an interrupt, before continuing. Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm/vmx.c')
-rw-r--r--arch/x86/kvm/vmx.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 2e51e7c6d2a8..a62f92ab1be2 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -4986,6 +4986,9 @@ static int handle_invalid_guest_state(struct kvm_vcpu *vcpu)
if (intr_window_requested && vmx_interrupt_allowed(vcpu))
return handle_interrupt_window(&vmx->vcpu);
+ if (test_bit(KVM_REQ_EVENT, &vcpu->requests))
+ return 1;
+
err = emulate_instruction(vcpu, 0);
if (err == EMULATE_DO_MMIO) {