diff --git a/lib/bdev/virtio/rte_virtio/virtio.c b/lib/bdev/virtio/rte_virtio/virtio.c index 3dcb7df4c..013f59670 100644 --- a/lib/bdev/virtio/rte_virtio/virtio.c +++ b/lib/bdev/virtio/rte_virtio/virtio.c @@ -263,6 +263,10 @@ virtio_alloc_queues(struct virtio_dev *dev) uint16_t i; int ret; + if (dev->vqs != NULL) { + return 0; + } + dev->vqs = rte_zmalloc(NULL, sizeof(struct virtqueue *) * nr_vq, 0); if (!dev->vqs) { SPDK_ERRLOG("failed to allocate %"PRIu16" vqs\n", nr_vq); @@ -329,7 +333,6 @@ struct virtio_dev * return vdev; } -/* reset device and renegotiate features if needed */ int virtio_dev_init(struct virtio_dev *dev, uint64_t req_features) { diff --git a/lib/bdev/virtio/rte_virtio/virtio.h b/lib/bdev/virtio/rte_virtio/virtio.h index 3a2c31f5d..6cd77150b 100644 --- a/lib/bdev/virtio/rte_virtio/virtio.h +++ b/lib/bdev/virtio/rte_virtio/virtio.h @@ -218,7 +218,13 @@ int virtio_xmit_pkt(struct virtqueue *vq, struct virtio_req *req); */ struct virtio_dev *virtio_dev_construct(const struct virtio_dev_ops *ops, void *ctx); -int virtio_dev_init(struct virtio_dev *hw, uint64_t req_features); +/** + * Reset and reinit a virtio device. This will also renegotiate feature flags. + * + * \param vdev vhost device + * \param req_features features this driver supports + */ +int virtio_dev_init(struct virtio_dev *vdev, uint64_t req_features); void virtio_dev_free(struct virtio_dev *dev); /**