diff --git a/include/kvm/virtio.h b/include/kvm/virtio.h index c6c380d..cd24285 100644 --- a/include/kvm/virtio.h +++ b/include/kvm/virtio.h @@ -38,6 +38,8 @@ static inline bool virt_queue__available(struct virt_queue *vq) { if (!vq->vring.avail) return 0; + + vring_avail_event(&vq->vring) = vq->last_avail_idx; return vq->vring.avail->idx != vq->last_avail_idx; } @@ -51,6 +53,11 @@ static inline void *guest_pfn_to_host(struct kvm *kvm, u32 pfn) return guest_flat_to_host(kvm, (unsigned long)pfn << VIRTIO_PCI_QUEUE_ADDR_SHIFT); } +static inline int virtio_queue__should_signal(struct virt_queue *vq) +{ + return vring_used_event(&vq->vring) <= vq->vring.used->idx; +} + struct vring_used_elem *virt_queue__set_used_elem(struct virt_queue *queue, u32 head, u32 len); u16 virt_queue__get_iov(struct virt_queue *queue, struct iovec iov[], u16 *out, u16 *in, struct kvm *kvm);