[v2,10/14] vhost: introduce wrappers for some vDPA ops

Message ID 20200624122701.1369327-12-maxime.coquelin@redhat.com (mailing list archive)
State Superseded, archived
Delegated to: Maxime Coquelin
Headers
Series None |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Maxime Coquelin June 24, 2020, 12:26 p.m. UTC
  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@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(+)
  

Comments

Adrian Moreno June 26, 2020, 11:10 a.m. UTC | #1
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@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@redhat.com>
  

Patch

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
+ * @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,