KVM: LAPIC: micro-optimize fixed mode ipi delivery
authorWanpeng Li <wanpengli@tencent.com>
Thu, 21 Nov 2019 03:17:12 +0000 (11:17 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 21 Jan 2020 12:57:15 +0000 (13:57 +0100)
This patch optimizes redundancy logic before fixed mode ipi is delivered
in the fast path, broadcast handling needs to go slow path, so the delivery
mode repair can be delayed to before slow path.

Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/irq_comm.c

index 9d711c2451c79366ae341edb2aa3e6b97ff2b894..79afa0bb5f410f701e18370b38f9aeb182f53cfc 100644 (file)
@@ -52,15 +52,15 @@ int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src,
        unsigned long dest_vcpu_bitmap[BITS_TO_LONGS(KVM_MAX_VCPUS)];
        unsigned int dest_vcpus = 0;
 
+       if (kvm_irq_delivery_to_apic_fast(kvm, src, irq, &r, dest_map))
+               return r;
+
        if (irq->dest_mode == APIC_DEST_PHYSICAL &&
            irq->dest_id == 0xff && kvm_lowest_prio_delivery(irq)) {
                printk(KERN_INFO "kvm: apic: phys broadcast and lowest prio\n");
                irq->delivery_mode = APIC_DM_FIXED;
        }
 
-       if (kvm_irq_delivery_to_apic_fast(kvm, src, irq, &r, dest_map))
-               return r;
-
        memset(dest_vcpu_bitmap, 0, sizeof(dest_vcpu_bitmap));
 
        kvm_for_each_vcpu(i, vcpu, kvm) {