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

Reply via email to