[PATCH v3 10/28] vhost: retry translating IOVA after IOTLB miss
Maxime Coquelin
maxime.coquelin at redhat.com
Thu May 25 18:25:33 CEST 2023
Vhost-user backend IOTLB misses and updates are
asynchronous, so IOVA address translation function
just fails after having sent an IOTLB miss update if needed
entry was not in the IOTLB cache.
This is not the case for VDUSE, for which the needed IOTLB
update is returned directly when sending an IOTLB miss.
This patch retry again finding the needed entry in the
IOTLB cache after having sent an IOTLB miss.
Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
Reviewed-by: Chenbo Xia <chenbo.xia at intel.com>
---
lib/vhost/vhost.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c
index d35075b96c..4f16307e4d 100644
--- a/lib/vhost/vhost.c
+++ b/lib/vhost/vhost.c
@@ -96,6 +96,12 @@ __vhost_iova_to_vva(struct virtio_net *dev, struct vhost_virtqueue *vq,
vhost_user_iotlb_rd_lock(vq);
}
+ tmp_size = *size;
+ /* Retry in case of VDUSE, as it is synchronous */
+ vva = vhost_user_iotlb_cache_find(dev, iova, &tmp_size, perm);
+ if (tmp_size == *size)
+ return vva;
+
return 0;
}
--
2.40.1
More information about the dev
mailing list