On 10/8/18 1:25 AM, Thomas Monjalon wrote:
A virtual device can be matched with following syntax:
        bus=vdev,name=X

Signed-off-by: Thomas Monjalon <tho...@monjalon.net>
---
  drivers/bus/vdev/vdev_params.c | 21 ++++++++++++++++++---
  1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/drivers/bus/vdev/vdev_params.c b/drivers/bus/vdev/vdev_params.c
index da270f2ec..133998c3e 100644
--- a/drivers/bus/vdev/vdev_params.c
+++ b/drivers/bus/vdev/vdev_params.c
@@ -2,6 +2,8 @@
   * Copyright 2018 Gaƫtan Rivet
   */
+#include <string.h>
+
  #include <rte_dev.h>
  #include <rte_bus.h>
  #include <rte_kvargs.h>
@@ -11,10 +13,12 @@
  #include "vdev_private.h"
enum vdev_params {
+       RTE_VDEV_PARAM_NAME,
        RTE_VDEV_PARAM_MAX,
  };
static const char * const vdev_params_keys[] = {
+       [RTE_VDEV_PARAM_NAME] = "name",
        [RTE_VDEV_PARAM_MAX] = NULL,
  };
@@ -22,11 +26,22 @@ static int
  vdev_dev_match(const struct rte_device *dev,
               const void *_kvlist)
  {
+       int ret;
        const struct rte_kvargs *kvlist = _kvlist;
+       char *name;
+
+       /* cannot pass const dev->name to rte_kvargs_process() */
+       name = strdup(dev->name);
+       if (name == NULL)
+               return -ENOMEM; /* interpreted as no match */

It is strange to see -ENOMEM and -1 returned from the same function.
rte_dev_cmp_t does not return negative errno. It just says match /
no match (greater / smaller than 0 if ordering is possible).
So, -ENOMEM is really confusing here. I think just -1 should be used.

+       ret = rte_kvargs_process(kvlist,
+               vdev_params_keys[RTE_VDEV_PARAM_NAME],
+               rte_kvargs_strcmp, name);
+       free(name);
+       if (ret != 0)
+               return -1;
- (void) kvlist;
-       (void) dev;
-       return 0;
+       return ret;

I'm not sure that I understand why 'ret' is returned here
instead of 0. Above check guarantees that ret==0.
If you change it, it should be a good reason.

  }
void *

Reply via email to