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:
parent
3ad55b8e94
commit
f31ce483bc
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user