static void vfio_add_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage *msg,

                                  bool msix)

{

    int virq;



    if ((msix && !VFIO_ALLOW_KVM_MSIX) ||

        (!msix && !VFIO_ALLOW_KVM_MSI) || !msg) {

        return;

    }



    if (event_notifier_init(&vector->kvm_interrupt, 0)) {

        return;

    }



    virq = kvm_irqchip_add_msi_route(kvm_state, *msg);

    if (virq < 0) {

        event_notifier_cleanup(&vector->kvm_interrupt);

        return;

    }



    if (kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, &vector->kvm_interrupt,

                                       NULL, virq) < 0) {

        kvm_irqchip_release_virq(kvm_state, virq);

        event_notifier_cleanup(&vector->kvm_interrupt);

        return;

    }



    vector->virq = virq;

}

static void vfio_add_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage *msg,

                                  bool msix)

{

    int virq;



    if ((msix && !VFIO_ALLOW_KVM_MSIX) ||

        (!msix && !VFIO_ALLOW_KVM_MSI) || !msg) {

        return;

    }



    if (event_notifier_init(&vector->kvm_interrupt, 0)) {

        return;

    }



    virq = kvm_irqchip_add_msi_route(kvm_state, *msg);

    if (virq < 0) {

        event_notifier_cleanup(&vector->kvm_interrupt);

        return;

    }



    if (kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, &vector->kvm_interrupt,

                                       NULL, virq) < 0) {

        kvm_irqchip_release_virq(kvm_state, virq);

        event_notifier_cleanup(&vector->kvm_interrupt);

        return;

    }



    vector->virq = virq;

}

static void FUNC_0(VFIOMSIVector *VAR_0, MSIMessage *VAR_1,

                                  bool VAR_2)

{

    int VAR_3;



    if ((VAR_2 && !VFIO_ALLOW_KVM_MSIX) ||

        (!VAR_2 && !VFIO_ALLOW_KVM_MSI) || !VAR_1) {

        return;

    }



    if (event_notifier_init(&VAR_0->kvm_interrupt, 0)) {

        return;

    }



    VAR_3 = kvm_irqchip_add_msi_route(kvm_state, *VAR_1);

    if (VAR_3 < 0) {

        event_notifier_cleanup(&VAR_0->kvm_interrupt);

        return;

    }



    if (kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, &VAR_0->kvm_interrupt,

                                       NULL, VAR_3) < 0) {

        kvm_irqchip_release_virq(kvm_state, VAR_3);

        event_notifier_cleanup(&VAR_0->kvm_interrupt);

        return;

    }



    VAR_0->VAR_3 = VAR_3;

}

static void FUNC_0(VFIOMSIVector *VAR_0, MSIMessage *VAR_1,
bool VAR_2)
{ int VAR_3; if ((VAR_2 && !VFIO_ALLOW_KVM_MSIX) ||
(!VAR_2 && !VFIO_ALLOW_KVM_MSI) || !VAR_1) { return; } if (event_notifier_init(&VAR_0->kvm_interrupt, 0)) { return; } VAR_3 = kvm_irqchip_add_msi_route(kvm_state, *VAR_1); if (VAR_3 < 0) { event_notifier_cleanup(&VAR_0->kvm_interrupt); return; } if (kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, &VAR_0->kvm_interrupt,
NULL, VAR_3) < 0) { kvm_irqchip_release_virq(kvm_state, VAR_3); event_notifier_cleanup(&VAR_0->kvm_interrupt); return; } VAR_0->VAR_3 = VAR_3; }