[dpdk-dev] [PATCH] vhost: fix wrong IOTLB initialization
Chenbo Xia
chenbo.xia at intel.com
Thu May 13 14:28:26 CEST 2021
This patch fixes an issue of application crash because of vhost iotlb
not initialized when virtio has multiqueue enabled.
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: Chenbo Xia <chenbo.xia at intel.com>
---
lib/vhost/vhost_user.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c
index 611ff209e3..ae4df8eb69 100644
--- a/lib/vhost/vhost_user.c
+++ b/lib/vhost/vhost_user.c
@@ -311,6 +311,7 @@ vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg,
uint64_t features = msg->payload.u64;
uint64_t vhost_features = 0;
struct rte_vdpa_device *vdpa_dev;
+ uint32_t i;
if (validate_msg_fds(msg, 0) != 0)
return RTE_VHOST_MSG_RESULT_ERR;
@@ -389,6 +390,14 @@ vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg,
vdpa_dev->ops->set_features(dev->vid);
dev->flags &= ~VIRTIO_DEV_FEATURES_FAILED;
+
+ if (dev->features & (1ULL << VIRTIO_F_IOMMU_PLATFORM)) {
+ for (i = 0; i < dev->nr_vring; i++) {
+ if (vhost_user_iotlb_init(dev, i))
+ return RTE_VHOST_MSG_RESULT_ERR;
+ }
+ }
+
return RTE_VHOST_MSG_RESULT_OK;
}
@@ -469,10 +478,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;
}
--
2.17.1
More information about the dev
mailing list