qemu-kvm: event writeback can overwrite interrupts with -no-kvm-irqchip

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

 



Interrupts that are injected during a vcpu event save/writeback cycle
are lost.

Fix by writebacking the state before injecting interrupts.

Signed-off-by: Marcelo Tosatti <mtosatti@xxxxxxxxxx>

diff --git a/qemu-kvm.c b/qemu-kvm.c
index 91f0222..90ace20 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -885,11 +885,6 @@ int pre_kvm_run(kvm_context_t kvm, CPUState *env)
 {
     kvm_arch_pre_run(env, env->kvm_run);
 
-    if (env->kvm_vcpu_dirty) {
-        kvm_arch_load_regs(env, KVM_PUT_RUNTIME_STATE);
-        env->kvm_vcpu_dirty = 0;
-    }
-
     pthread_mutex_unlock(&qemu_mutex);
     return 0;
 }
@@ -907,6 +902,10 @@ int kvm_run(CPUState *env)
     int fd = env->kvm_fd;
 
   again:
+    if (env->kvm_vcpu_dirty) {
+        kvm_arch_load_regs(env, KVM_PUT_RUNTIME_STATE);
+        env->kvm_vcpu_dirty = 0;
+    }
     push_nmi(kvm);
 #if !defined(__s390__)
     if (!kvm->irqchip_in_kernel)
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux