virt_queue__set_used_elem(req->vq, req->head, len);
mutex_unlock(&bdev->mutex);
- bdev->vtrans.trans_ops->signal_vq(req->kvm, &bdev->vtrans, queueid);
+ if (virtio_queue__should_signal(&bdev->vqs[queueid]))
+ bdev->vtrans.trans_ops->signal_vq(req->kvm, &bdev->vtrans, queueid);
virtio_blk_req_push(req->bdev, req);
}
static u32 get_host_features(struct kvm *kvm, void *dev)
{
- return 1UL << VIRTIO_BLK_F_SEG_MAX | 1UL << VIRTIO_BLK_F_FLUSH;
+ return 1UL << VIRTIO_BLK_F_SEG_MAX
+ | 1UL << VIRTIO_BLK_F_FLUSH
+ | 1UL << VIRTIO_RING_F_EVENT_IDX;
}
static void set_guest_features(struct kvm *kvm, void *dev, u32 features)