qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 13/15] kvm: Fix IRQ injection into full queue


From: Glauber Costa
Subject: [Qemu-devel] [PATCH 13/15] kvm: Fix IRQ injection into full queue
Date: Wed, 17 Jun 2009 13:10:02 -0400

From: Jan Kiszka <address@hidden>

User space may only inject interrupts during kvm_arch_pre_run if
ready_for_interrupt_injection is set in kvm_run. But that field is
updated on exit from KVM_RUN, so we must ensure that we enter the
kernel after potentially queuing an interrupt, otherwise we risk to
loose one - like it happens with the current code against latest
kernel modules (since kvm-86) that started to queue only a single
interrupt.

Fix the problem by reordering kvm_cpu_exec.

Credits go to Gleb Natapov for analyzing the issue in details.

Signed-off-by: Jan Kiszka <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>
Signed-off-by: Glauber Costa <address@hidden>
---
 kvm-all.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/kvm-all.c b/kvm-all.c
index 541b200..8e72c6d 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -451,14 +451,13 @@ int kvm_cpu_exec(CPUState *env)
     dprintf("kvm_cpu_exec()\n");
 
     do {
-        kvm_arch_pre_run(env, run);
-
         if (env->exit_request) {
             dprintf("interrupt exit requested\n");
             ret = 0;
             break;
         }
 
+        kvm_arch_pre_run(env, run);
         ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);
         kvm_arch_post_run(env, run);
 
-- 
1.6.2.2





reply via email to

[Prev in Thread] Current Thread [Next in Thread]