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: 968bbc7e2e ("vhost: avoid IOTLB mempool allocation while IOMMU disabled")

Signed-off-by: David Marchand <david.marchand@redhat.com>
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
This commit is contained in:
David Marchand 2021-05-17 10:59:51 +02:00 committed by Chenbo Xia
parent 3ad55b8e94
commit f31ce483bc
2 changed files with 4 additions and 7 deletions

View File

@ -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

View File

@ -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 @@ numa_realloc(struct virtio_net *dev, int index)
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;