{
        struct kvm_lapic_irq irq;
 
+       /* KVM has no delay and should always clear the BUSY/PENDING flag. */
+       WARN_ON_ONCE(icr_low & APIC_ICR_BUSY);
+
        irq.vector = icr_low & APIC_VECTOR_MASK;
        irq.delivery_mode = icr_low & APIC_MODE_MASK;
        irq.dest_mode = icr_low & APIC_DEST_MASK;
        }
        case APIC_ICR:
                /* No delay here, so we always clear the pending bit */
-               val &= ~(1 << 12);
+               val &= ~APIC_ICR_BUSY;
                kvm_apic_send_ipi(apic, val, kvm_lapic_get_reg(apic, APIC_ICR2));
                kvm_lapic_set_reg(apic, APIC_ICR, val);
                break;
                break;
        }
 
+       /*
+        * Recalculate APIC maps if necessary, e.g. if the software enable bit
+        * was toggled, the APIC ID changed, etc...   The maps are marked dirty
+        * on relevant changes, i.e. this is a nop for most writes.
+        */
        kvm_recalculate_apic_map(apic->vcpu->kvm);
 
        return ret;
 
                return 1;
 
        if (((data & APIC_SHORT_MASK) == APIC_DEST_NOSHORT) &&
-               ((data & APIC_DEST_MASK) == APIC_DEST_PHYSICAL) &&
-               ((data & APIC_MODE_MASK) == APIC_DM_FIXED) &&
-               ((u32)(data >> 32) != X2APIC_BROADCAST)) {
-
-               data &= ~(1 << 12);
+           ((data & APIC_DEST_MASK) == APIC_DEST_PHYSICAL) &&
+           ((data & APIC_MODE_MASK) == APIC_DM_FIXED) &&
+           ((u32)(data >> 32) != X2APIC_BROADCAST)) {
+               data &= ~APIC_ICR_BUSY;
                kvm_apic_send_ipi(vcpu->arch.apic, (u32)data, (u32)(data >> 32));
                kvm_lapic_set_reg(vcpu->arch.apic, APIC_ICR2, (u32)(data >> 32));
                kvm_lapic_set_reg(vcpu->arch.apic, APIC_ICR, (u32)data);