[dpdk-dev,v3,06/22] vhost: introduce API to fetch negotiated features
Checks
Commit Message
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
---
lib/librte_vhost/rte_vhost_version.map | 1 +
lib/librte_vhost/rte_virtio_net.h | 10 ++++++++++
lib/librte_vhost/vhost.c | 12 ++++++++++++
3 files changed, 23 insertions(+)
Comments
On 03/28/2017 02:45 PM, Yuanhan Liu wrote:
> Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
> ---
> lib/librte_vhost/rte_vhost_version.map | 1 +
> lib/librte_vhost/rte_virtio_net.h | 10 ++++++++++
> lib/librte_vhost/vhost.c | 12 ++++++++++++
> 3 files changed, 23 insertions(+)
>
> diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map
> index 664a5f3..cec1e9e 100644
> --- a/lib/librte_vhost/rte_vhost_version.map
> +++ b/lib/librte_vhost/rte_vhost_version.map
> @@ -37,5 +37,6 @@ DPDK_17.05 {
> rte_vhost_driver_set_features;
> rte_vhost_get_mem_table;
> rte_vhost_get_mtu;
> + rte_vhost_get_negotiated_features;
>
> } DPDK_16.07;
> diff --git a/lib/librte_vhost/rte_virtio_net.h b/lib/librte_vhost/rte_virtio_net.h
> index 5a91f97..57e57e3 100644
> --- a/lib/librte_vhost/rte_virtio_net.h
> +++ b/lib/librte_vhost/rte_virtio_net.h
> @@ -154,6 +154,16 @@ struct virtio_net_device_ops {
> */
> uint64_t rte_vhost_driver_get_features(const char *path);
>
> +/**
> + * Get the feature bits after negotiation
> + *
> + * @param vid
> + * Vhost device ID
> + * @return
> + * Negotiated feature bits on success, 0 on failure
> + */
> +uint64_t rte_vhost_get_negotiated_features(int vid);
> +
> /* Register callbacks. */
> int rte_vhost_driver_callback_register(const char *path,
> struct virtio_net_device_ops const * const ops);
> diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c
> index 2b41652..08dccfb 100644
> --- a/lib/librte_vhost/vhost.c
> +++ b/lib/librte_vhost/vhost.c
> @@ -359,6 +359,18 @@ struct virtio_net *
> return 0;
> }
>
> +uint64_t
> +rte_vhost_get_negotiated_features(int vid)
> +{
> + struct virtio_net *dev;
> +
> + dev = get_device(vid);
> + if (!dev)
> + return 0;
It's unlikely to happen with net devices, but as this series is about
generalizing the use of this lib, couldn't we have cases where the
negotiated features is 0?
If so, shouldn't be preferable the caller passes features pointer as
argument?
> +
> + return dev->features;
> +}
> +
> int
> rte_vhost_get_mem_table(int vid, struct rte_vhost_memory **mem)
> {
>
Thanks,
Maxime
On Fri, Mar 31, 2017 at 09:45:11AM +0200, Maxime Coquelin wrote:
> >+uint64_t
> >+rte_vhost_get_negotiated_features(int vid)
> >+{
> >+ struct virtio_net *dev;
> >+
> >+ dev = get_device(vid);
> >+ if (!dev)
> >+ return 0;
> It's unlikely to happen with net devices, but as this series is about
> generalizing the use of this lib, couldn't we have cases where the
> negotiated features is 0?
Yes, I think so.
> If so, shouldn't be preferable the caller passes features pointer as
> argument?
I thought of that. The reason I did that is to keep the semantics with
rte_vhost_driver_get_feature(path). But you are right, we don't have
to follow that. More importantly, we may also need change the return
value of rte_vhost_driver_get_features(path): which could also fail
if 'path' is not found.
--yliu
@@ -37,5 +37,6 @@ DPDK_17.05 {
rte_vhost_driver_set_features;
rte_vhost_get_mem_table;
rte_vhost_get_mtu;
+ rte_vhost_get_negotiated_features;
} DPDK_16.07;
@@ -154,6 +154,16 @@ struct virtio_net_device_ops {
*/
uint64_t rte_vhost_driver_get_features(const char *path);
+/**
+ * Get the feature bits after negotiation
+ *
+ * @param vid
+ * Vhost device ID
+ * @return
+ * Negotiated feature bits on success, 0 on failure
+ */
+uint64_t rte_vhost_get_negotiated_features(int vid);
+
/* Register callbacks. */
int rte_vhost_driver_callback_register(const char *path,
struct virtio_net_device_ops const * const ops);
@@ -359,6 +359,18 @@ struct virtio_net *
return 0;
}
+uint64_t
+rte_vhost_get_negotiated_features(int vid)
+{
+ struct virtio_net *dev;
+
+ dev = get_device(vid);
+ if (!dev)
+ return 0;
+
+ return dev->features;
+}
+
int
rte_vhost_get_mem_table(int vid, struct rte_vhost_memory **mem)
{