bus/vdev: add iteration filter on name
authorThomas Monjalon <thomas@monjalon.net>
Tue, 23 Oct 2018 08:28:36 +0000 (10:28 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 26 Oct 2018 20:14:05 +0000 (22:14 +0200)
A virtual device can be matched with following syntax:
bus=vdev,name=X

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
drivers/bus/vdev/vdev_params.c

index da270f2..6f74704 100644 (file)
@@ -2,6 +2,8 @@
  * Copyright 2018 GaĆ«tan Rivet
  */
 
+#include <string.h>
+
 #include <rte_dev.h>
 #include <rte_bus.h>
 #include <rte_kvargs.h>
 #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,10 +26,21 @@ 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 -1;
+       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;
 }