[RFC 10/27] vhost: retry translating IOVA after IOTLB miss

Xia, Chenbo chenbo.xia at intel.com
Fri May 5 07:07:28 CEST 2023


> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin at redhat.com>
> Sent: Friday, March 31, 2023 11:43 PM
> To: dev at dpdk.org; david.marchand at redhat.com; Xia, Chenbo
> <chenbo.xia at intel.com>; mkp at redhat.com; fbl at redhat.com;
> jasowang at redhat.com; Liang, Cunming <cunming.liang at intel.com>; Xie, Yongji
> <xieyongji at bytedance.com>; echaudro at redhat.com; eperezma at redhat.com;
> amorenoz at redhat.com
> Cc: Maxime Coquelin <maxime.coquelin at 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.coquelin at 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.xia at intel.com> 


More information about the dev mailing list