From 47f51fd53166aaf1311e899f17f189f388e47fb1 Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Mon, 21 Jun 2010 11:29:40 -0400 Subject: [PATCH] --- yaml --- r: 202373 b: refs/heads/master c: 529df65e394e30a78f2633b575fd81fa5b973e30 h: refs/heads/master i: 202371: 8eaed5ef0ec1c8d6a6d36f5b5c3a09bbe949cc51 v: v3 --- [refs] | 2 +- trunk/arch/x86/kvm/i8259.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 506210a24efc..28765687b17b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 979586e0b5809c46ebe5d784794a9f6d859b665e +refs/heads/master: 529df65e394e30a78f2633b575fd81fa5b973e30 diff --git a/trunk/arch/x86/kvm/i8259.c b/trunk/arch/x86/kvm/i8259.c index bc10f0bd3819..819b748a33f9 100644 --- a/trunk/arch/x86/kvm/i8259.c +++ b/trunk/arch/x86/kvm/i8259.c @@ -46,16 +46,25 @@ static void pic_unlock(struct kvm_pic *s) __releases(&s->lock) { bool wakeup = s->wakeup_needed; - struct kvm_vcpu *vcpu; + struct kvm_vcpu *vcpu, *found = NULL; + int i; s->wakeup_needed = false; raw_spin_unlock(&s->lock); if (wakeup) { - vcpu = s->kvm->bsp_vcpu; - if (vcpu) - kvm_vcpu_kick(vcpu); + kvm_for_each_vcpu(i, vcpu, s->kvm) { + if (kvm_apic_accept_pic_intr(vcpu)) { + found = vcpu; + break; + } + } + + if (!found) + found = s->kvm->bsp_vcpu; + + kvm_vcpu_kick(found); } }