diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index 553c0f76ef..0def33cecf 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -460,9 +460,14 @@ static void vioapic_deliver(struct hvm_vioapic *vioapic, unsigned int pin) case dest_Fixed: for_each_vcpu ( d, v ) - if ( vlapic_match_dest(vcpu_vlapic(v), NULL, 0, dest, dest_mode) ) - ioapic_inj_irq(vioapic, vcpu_vlapic(v), vector, trig_mode, + { + struct vlapic *vlapic = vcpu_vlapic(v); + + if ( vlapic_enabled(vlapic) && + vlapic_match_dest(vlapic, NULL, 0, dest, dest_mode) ) + ioapic_inj_irq(vioapic, vlapic, vector, trig_mode, delivery_mode); + } break; case dest_NMI: diff --git a/xen/arch/x86/hvm/vmsi.c b/xen/arch/x86/hvm/vmsi.c index 13e2a190b4..235705c8c6 100644 --- a/xen/arch/x86/hvm/vmsi.c +++ b/xen/arch/x86/hvm/vmsi.c @@ -87,10 +87,12 @@ int vmsi_deliver( case dest_Fixed: for_each_vcpu ( d, v ) - if ( vlapic_match_dest(vcpu_vlapic(v), NULL, - 0, dest, dest_mode) ) - vmsi_inj_irq(vcpu_vlapic(v), vector, - trig_mode, delivery_mode); + { + target = vcpu_vlapic(v); + if ( vlapic_enabled(target) && + vlapic_match_dest(target, NULL, 0, dest, dest_mode) ) + vmsi_inj_irq(target, vector, trig_mode, delivery_mode); + } break; default: