All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] kvm: Fix IRQ injection into full queue
@ 2009-05-30  8:01 Jan Kiszka
  0 siblings, 0 replies; only message in thread
From: Jan Kiszka @ 2009-05-30  8:01 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Avi Kivity, Gleb Natapov, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 1193 bytes --]

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 <jan.kiszka@siemens.com>
---

 kvm-all.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/kvm-all.c b/kvm-all.c
index 0827ae2..dc2ded5 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -564,14 +564,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);
 




[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]

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

only message in thread, other threads:[~2009-05-30  8:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-30  8:01 [Qemu-devel] [PATCH] kvm: Fix IRQ injection into full queue Jan Kiszka

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.