static int virtio_pci_set_host_notifier(void *opaque, int n, bool assign)

{

    VirtIOPCIProxy *proxy = opaque;

    VirtQueue *vq = virtio_get_queue(proxy->vdev, n);

    EventNotifier *notifier = virtio_queue_get_host_notifier(vq);

    int r;

    if (assign) {

        r = event_notifier_init(notifier, 1);

        if (r < 0) {

            return r;

        }

        r = kvm_set_ioeventfd_pio_word(event_notifier_get_fd(notifier),

                                       proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY,

                                       n, assign);

        if (r < 0) {

            event_notifier_cleanup(notifier);

        }

    } else {

        r = kvm_set_ioeventfd_pio_word(event_notifier_get_fd(notifier),

                                       proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY,

                                       n, assign);

        if (r < 0) {

            return r;

        }

        event_notifier_cleanup(notifier);

    }

    return r;

}

static int virtio_pci_set_host_notifier(void *opaque, int n, bool assign)

{

    VirtIOPCIProxy *proxy = opaque;

    VirtQueue *vq = virtio_get_queue(proxy->vdev, n);

    EventNotifier *notifier = virtio_queue_get_host_notifier(vq);

    int r;

    if (assign) {

        r = event_notifier_init(notifier, 1);

        if (r < 0) {

            return r;

        }

        r = kvm_set_ioeventfd_pio_word(event_notifier_get_fd(notifier),

                                       proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY,

                                       n, assign);

        if (r < 0) {

            event_notifier_cleanup(notifier);

        }

    } else {

        r = kvm_set_ioeventfd_pio_word(event_notifier_get_fd(notifier),

                                       proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY,

                                       n, assign);

        if (r < 0) {

            return r;

        }

        event_notifier_cleanup(notifier);

    }

    return r;

}

static int FUNC_0(void *VAR_0, int VAR_1, bool VAR_2)

{

    VirtIOPCIProxy *proxy = VAR_0;

    VirtQueue *vq = virtio_get_queue(proxy->vdev, VAR_1);

    EventNotifier *notifier = virtio_queue_get_host_notifier(vq);

    int VAR_3;

    if (VAR_2) {

        VAR_3 = event_notifier_init(notifier, 1);

        if (VAR_3 < 0) {

            return VAR_3;

        }

        VAR_3 = kvm_set_ioeventfd_pio_word(event_notifier_get_fd(notifier),

                                       proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY,

                                       VAR_1, VAR_2);

        if (VAR_3 < 0) {

            event_notifier_cleanup(notifier);

        }

    } else {

        VAR_3 = kvm_set_ioeventfd_pio_word(event_notifier_get_fd(notifier),

                                       proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY,

                                       VAR_1, VAR_2);

        if (VAR_3 < 0) {

            return VAR_3;

        }

        event_notifier_cleanup(notifier);

    }

    return VAR_3;

}

static int FUNC_0(void *VAR_0, int VAR_1, bool VAR_2)
{ VirtIOPCIProxy *proxy = VAR_0; VirtQueue *vq = virtio_get_queue(proxy->vdev, VAR_1); EventNotifier *notifier = virtio_queue_get_host_notifier(vq); int VAR_3; if (VAR_2) { VAR_3 = event_notifier_init(notifier, 1); if (VAR_3 < 0) { return VAR_3; } VAR_3 = kvm_set_ioeventfd_pio_word(event_notifier_get_fd(notifier),
proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY,
VAR_1, VAR_2); if (VAR_3 < 0) { event_notifier_cleanup(notifier); } } else { VAR_3 = kvm_set_ioeventfd_pio_word(event_notifier_get_fd(notifier),
proxy->addr + VIRTIO_PCI_QUEUE_NOTIFY,
VAR_1, VAR_2); if (VAR_3 < 0) { return VAR_3; } event_notifier_cleanup(notifier); } return VAR_3; }