The vdev bus parses a field "driver", matching
a vdev driver name with one passed as follows:

   "bus=vdev,driver=xxxx"

Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com>
---
 drivers/bus/vdev/vdev.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
index 699ce01e6..d1e712fe9 100644
--- a/drivers/bus/vdev/vdev.c
+++ b/drivers/bus/vdev/vdev.c
@@ -417,13 +417,31 @@ vdev_unplug(struct rte_device *dev)
 }
 
 static int
+vdev_str_kv_cmp(const char *key __rte_unused,
+            const char *value,
+            void *_str)
+{
+       const  char *str = _str;
+
+       return strcmp(str, value);
+}
+
+static int
 vdev_dev_match(const struct rte_device *dev,
               const void *_kvlist)
 {
        const struct rte_kvargs *kvlist = _kvlist;
+       const struct rte_vdev_device *vdev;
 
-       (void) kvlist;
-       (void) dev;
+       if (kvlist == NULL)
+               /* Empty string matches everything. */
+               return 0;
+       vdev = RTE_DEV_TO_VDEV_CONST(dev);
+       /* if any field does not match. */
+       if (rte_kvargs_process(kvlist, "driver",
+               &vdev_str_kv_cmp,
+               (void *)(intptr_t)vdev->device.driver->name))
+               return 1;
        return 0;
 }
 
-- 
2.11.0

Reply via email to