diff options
Diffstat (limited to 'hw/virtio/vhost.c')
-rw-r--r-- | hw/virtio/vhost.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index b643f42ea4..b922412a15 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1093,6 +1093,15 @@ static int vhost_virtqueue_start(struct vhost_dev *dev, }; struct VirtQueue *vvq = virtio_get_queue(vdev, idx); + if (vdev->device_mode) { + state.num = virtio_queue_get_last_avail_idx(vdev, idx); + r = dev->vhost_ops->vhost_set_vring_base(dev, &state); + if (r) { + VHOST_OPS_DEBUG(r, "vhost_set_vring_base failed"); + return -errno; + } + } + else { a = virtio_queue_get_desc_addr(vdev, idx); if (a == 0) { /* Queue might not be ready for start */ @@ -1148,6 +1157,7 @@ static int vhost_virtqueue_start(struct vhost_dev *dev, if (r < 0) { goto fail_alloc; } + } file.fd = event_notifier_get_fd(virtio_queue_get_host_notifier(vvq)); r = dev->vhost_ops->vhost_set_vring_kick(dev, &file); |