From: Jan Kiszka Date: Sat, 30 May 2009 08:01:45 +0000 (+0200) Subject: kvm: Fix IRQ injection into full queue X-Git-Tag: TizenStudio_2.0_p2.3~8641 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5d38e90fe00caa4b0a01aa29067bfafb57bb731c;p=sdk%2Femulator%2Fqemu.git kvm: Fix IRQ injection into full queue 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 Signed-off-by: Anthony Liguori --- diff --git a/kvm-all.c b/kvm-all.c index b24d876..d843338 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -578,14 +578,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);