> -----Original Message----- > From: Maxime Coquelin <maxime.coque...@redhat.com> > Sent: Friday, March 31, 2023 11:43 PM > To: dev@dpdk.org; david.march...@redhat.com; Xia, Chenbo > <chenbo....@intel.com>; m...@redhat.com; f...@redhat.com; > jasow...@redhat.com; Liang, Cunming <cunming.li...@intel.com>; Xie, Yongji > <xieyon...@bytedance.com>; echau...@redhat.com; epere...@redhat.com; > amore...@redhat.com > Cc: Maxime Coquelin <maxime.coque...@redhat.com> > Subject: [RFC 10/27] vhost: retry translating IOVA after IOTLB miss > > 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.coque...@redhat.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.39.2
Reviewed-by: Chenbo Xia <chenbo....@intel.com>