From f31ce483bcdced91685b5d3c7291d79793f7499c Mon Sep 17 00:00:00 2001 From: David Marchand Date: Mon, 17 May 2021 10:59:51 +0200 Subject: [PATCH] vhost: restore IOTLB mempool allocation IOTLB messages will be sent when some queues are not enabled. If we initialize IOTLB in vhost_user_set_vring_num, it could happen that IOTLB update comes when IOTLB pool of disabled queues are not initialized. Fixes: 968bbc7e2e50 ("vhost: avoid IOTLB mempool allocation while IOMMU disabled") Signed-off-by: David Marchand Reviewed-by: Chenbo Xia --- lib/vhost/vhost.c | 5 +++-- lib/vhost/vhost_user.c | 6 +----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c index 9cbcf650b6..c96f6335c8 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -365,8 +365,7 @@ free_vq(struct virtio_net *dev, struct vhost_virtqueue *vq) vhost_free_async_mem(vq); rte_free(vq->batch_copy_elems); - if (vq->iotlb_pool) - rte_mempool_free(vq->iotlb_pool); + rte_mempool_free(vq->iotlb_pool); rte_free(vq->log_cache); rte_free(vq); } @@ -570,6 +569,8 @@ init_vring_queue(struct virtio_net *dev, uint32_t vring_idx) vq->kickfd = VIRTIO_UNINITIALIZED_EVENTFD; vq->callfd = VIRTIO_UNINITIALIZED_EVENTFD; vq->notif_enable = VIRTIO_UNINITIALIZED_NOTIF; + + vhost_user_iotlb_init(dev, vring_idx); } static void diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index 611ff209e3..8f0eba6412 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -469,10 +469,6 @@ vhost_user_set_vring_num(struct virtio_net **pdev, return RTE_VHOST_MSG_RESULT_ERR; } - if (dev->features & (1ULL << VIRTIO_F_IOMMU_PLATFORM)) { - if (vhost_user_iotlb_init(dev, msg->payload.state.index)) - return RTE_VHOST_MSG_RESULT_ERR; - } return RTE_VHOST_MSG_RESULT_OK; } @@ -578,7 +574,7 @@ out: dev->virtqueue[index] = vq; vhost_devices[dev->vid] = dev; - if (old_vq != vq && (dev->features & (1ULL << VIRTIO_F_IOMMU_PLATFORM))) + if (old_vq != vq) vhost_user_iotlb_init(dev, index); return dev; -- 2.20.1