[dpdk-dev] [PATCH v2 10/14] vhost: introduce wrappers for some vDPA ops

Adrian Moreno amorenoz at redhat.com
Fri Jun 26 13:10:34 CEST 2020



On 6/24/20 2:26 PM, Maxime Coquelin wrote:
> This patch is preliminary work to make the vDPA device
> structure opaque to the user application. Some callbacks
> of the vDPA devices are used to query capabilities before
> attaching to a Vhost port. This patch introduces wrappers
> for these ops.
> 
> Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
> ---
>  lib/librte_vhost/rte_vdpa.h            | 72 ++++++++++++++++++++++++++
>  lib/librte_vhost/rte_vhost_version.map |  3 ++
>  lib/librte_vhost/vdpa.c                | 28 ++++++++++
>  3 files changed, 103 insertions(+)
> 
> diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h
> index dbdc273702..eda56dd556 100644
> --- a/lib/librte_vhost/rte_vdpa.h
> +++ b/lib/librte_vhost/rte_vdpa.h
> @@ -226,6 +226,78 @@ __rte_experimental
>  int
>  rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
>  
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Get number of queue pairs supported by the vDPA device
> + *
> + * @param dev
> + *  vDP device pointer
Here and in the comments of the following function declarations: s/vDP/vDPA/?

> + * @param queue_num
> + *  pointer on where the number of queue is stored
> + * @return
> + *  0 on success, -1 on failure
> + */
> +__rte_experimental
> +int
> +rte_vdpa_get_queue_num(struct rte_vdpa_device *dev, uint32_t *queue_num);
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Get the Virtio features supported by the vDPA device
> + *
> + * @param dev
> + *  vDP device pointer
> + * @param features
> + *  pointer on where the supported features are stored
> + * @return
> + *  0 on success, -1 on failure
> + */
> +__rte_experimental
> +int
> +rte_vdpa_get_features(struct rte_vdpa_device *dev, uint64_t *features);
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Get the Vhost-user protocol features supported by the vDPA device
> + *
> + * @param dev
> + *  vDP device pointer
> + * @param features
> + *  pointer on where the supported protocol features are stored
> + * @return
> + *  0 on success, -1 on failure
> + */
> +__rte_experimental
> +int
> +rte_vdpa_get_protocol_features(struct rte_vdpa_device *dev, uint64_t *features);
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Synchronize the used ring from mediated ring to guest, log dirty
> + * page for each writeable buffer, caller should handle the used
> + * ring logging before device stop.
> + *
> + * @param vid
> + *  vhost device id
> + * @param qid
> + *  vhost queue id
> + * @param vring_m
> + *  mediated virtio ring pointer
> + * @return
> + *  number of synced used entries on success, -1 on failure
> + */
> +__rte_experimental
> +int
> +rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
> +
>  /**
>   * @warning
>   * @b EXPERIMENTAL: this API may change without prior notice
> diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map
> index d9124d0462..7a919102cf 100644
> --- a/lib/librte_vhost/rte_vhost_version.map
> +++ b/lib/librte_vhost/rte_vhost_version.map
> @@ -70,4 +70,7 @@ EXPERIMENTAL {
>  	rte_vhost_slave_config_change;
>  	rte_vdpa_find_device_by_name;
>  	rte_vdpa_get_rte_device;
> +	rte_vdpa_get_queue_num;
> +	rte_vdpa_get_features;
> +	rte_vdpa_get_protocol_features;
>  };
> diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c
> index dc2a138009..d7f9839eb2 100644
> --- a/lib/librte_vhost/vdpa.c
> +++ b/lib/librte_vhost/vdpa.c
> @@ -229,6 +229,34 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
>  	return -1;
>  }
>  
> +int
> +rte_vdpa_get_queue_num(struct rte_vdpa_device *dev, uint32_t *queue_num)
> +{
> +	if (dev == NULL || dev->ops == NULL || dev->ops->get_queue_num == NULL)
> +		return -1;
> +
> +	return dev->ops->get_queue_num(dev, queue_num);
> +}
> +
> +int
> +rte_vdpa_get_features(struct rte_vdpa_device *dev, uint64_t *features)
> +{
> +	if (dev == NULL || dev->ops == NULL || dev->ops->get_features == NULL)
> +		return -1;
> +
> +	return dev->ops->get_features(dev, features);
> +}
> +
> +int
> +rte_vdpa_get_protocol_features(struct rte_vdpa_device *dev, uint64_t *features)
> +{
> +	if (dev == NULL || dev->ops == NULL ||
> +			dev->ops->get_protocol_features == NULL)
> +		return -1;
> +
> +	return dev->ops->get_protocol_features(dev, features);
> +}
> +
>  int
>  rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,
>  		struct rte_vdpa_stat_name *stats_names,
> 

Apart from the typo:
Acked-by: Adrián Moreno <amorenoz at redhat.com>

-- 
Adrián Moreno



More information about the dev mailing list