KVM: x86: don't retry hopeless APIC delivery
authorRadim Krčmář <rkrcmar@redhat.com>
Thu, 27 Nov 2014 19:03:14 +0000 (20:03 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 4 Dec 2014 14:29:06 +0000 (15:29 +0100)
False from kvm_irq_delivery_to_apic_fast() means that we don't handle it
in the fast path, but we still return false in cases that were perfectly
handled, fix that.

Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/lapic.c

index 3634303..f6184f1 100644 (file)
@@ -690,6 +690,8 @@ bool kvm_irq_delivery_to_apic_fast(struct kvm *kvm, struct kvm_lapic *src,
        if (irq->dest_id == map->broadcast)
                goto out;
 
+       ret = true;
+
        if (irq->dest_mode == 0) { /* physical mode */
                if (irq->delivery_mode == APIC_DM_LOWEST)
                        goto out;
@@ -723,8 +725,6 @@ bool kvm_irq_delivery_to_apic_fast(struct kvm *kvm, struct kvm_lapic *src,
                        *r = 0;
                *r += kvm_apic_set_irq(dst[i]->vcpu, irq, dest_map);
        }
-
-       ret = true;
 out:
        rcu_read_unlock();
        return ret;