diff --git a/lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c b/lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c index 8a96112e0..3a7590e79 100644 --- a/lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c +++ b/lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c @@ -99,6 +99,18 @@ virtio_user_kick_queue(struct virtio_user_dev *dev, uint32_t queue_sel) return 0; } +static int +virtio_user_stop_queue(struct virtio_user_dev *dev, uint32_t queue_sel) +{ + struct vhost_vring_state state; + + state.index = queue_sel; + state.num = 0; + dev->ops->send_request(dev, VHOST_USER_GET_VRING_BASE, &state); + + return 0; +} + static int virtio_user_queue_setup(struct virtio_user_dev *dev, int (*fn)(struct virtio_user_dev *, uint32_t)) @@ -138,7 +150,7 @@ virtio_user_start_device(struct virtio_user_dev *dev) int virtio_user_stop_device(struct virtio_user_dev *dev) { - return 0; + return virtio_user_queue_setup(dev, virtio_user_stop_queue); } int @@ -228,8 +240,6 @@ virtio_user_dev_uninit(struct virtio_user_dev *dev) { uint32_t i; - virtio_user_stop_device(dev); - close(dev->vhostfd); if (dev->vhostfds) {