From: Gaetan Rivet <gaetan.rivet@6wind.com>
To: dev@dpdk.org
Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
Subject: [dpdk-dev] [PATCH v2 10/13] bus/vdev: pre-process declarative vdev devargs
Date: Wed, 19 Sep 2018 18:03:40 +0200 [thread overview]
Message-ID: <64dbe73a53b28681244e7a752ebff6185526ec55.1537372746.git.gaetan.rivet@6wind.com> (raw)
In-Reply-To: <cover.1537372746.git.gaetan.rivet@6wind.com>
The new devargs format does not recognize a particular device name.
Each bus uses its specific format.
Process each devargs privately prior to attempting a bus scan.
Prepare them if they are using the new devargs format.
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
drivers/bus/vdev/vdev.c | 10 ++++---
drivers/bus/vdev/vdev_params.c | 50 +++++++++++++++++++++++++++++++++
drivers/bus/vdev/vdev_private.h | 6 ++++
3 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
index ef3ad6d99..5699e0744 100644
--- a/drivers/bus/vdev/vdev.c
+++ b/drivers/bus/vdev/vdev.c
@@ -115,8 +115,8 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg)
return 0;
}
-static int
-vdev_parse(const char *name, void *addr)
+int
+rte_vdev_parse(const char *name, void *addr)
{
struct rte_vdev_driver **out = addr;
struct rte_vdev_driver *driver = NULL;
@@ -148,7 +148,7 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev)
VDEV_LOG(DEBUG, "Search driver %s to probe device %s", name,
rte_vdev_device_name(dev));
- if (vdev_parse(name, &driver))
+ if (rte_vdev_parse(name, &driver))
return -1;
dev->device.driver = &driver->driver;
ret = driver->probe(dev);
@@ -447,6 +447,8 @@ vdev_scan(void)
/* for virtual devices we scan the devargs_list populated via cmdline */
RTE_EAL_DEVARGS_FOREACH("vdev", devargs) {
+ if (rte_vdev_devargs_prepare(devargs))
+ continue;
dev = calloc(1, sizeof(*dev));
if (!dev)
@@ -540,7 +542,7 @@ static struct rte_bus rte_vdev_bus = {
.find_device = rte_vdev_find_device,
.plug = vdev_plug,
.unplug = vdev_unplug,
- .parse = vdev_parse,
+ .parse = rte_vdev_parse,
.dev_iterate = rte_vdev_dev_iterate,
};
diff --git a/drivers/bus/vdev/vdev_params.c b/drivers/bus/vdev/vdev_params.c
index 2f55f451f..aafaf3330 100644
--- a/drivers/bus/vdev/vdev_params.c
+++ b/drivers/bus/vdev/vdev_params.c
@@ -2,11 +2,14 @@
* Copyright 2018 Gaëtan Rivet
*/
+#include <string.h>
+
#include <rte_dev.h>
#include <rte_bus.h>
#include <rte_bus_vdev.h>
#include <rte_kvargs.h>
#include <rte_errno.h>
+#include <rte_devargs.h>
#include "vdev_logs.h"
#include "vdev_private.h"
@@ -60,3 +63,50 @@ rte_vdev_dev_iterate(const void *start,
rte_kvargs_free(kvargs);
return dev;
}
+
+static int
+vdev_driver_kv_parse(const char *key __rte_unused,
+ const char *value,
+ void *_devargs)
+{
+ struct rte_devargs *devargs = _devargs;
+ struct rte_vdev_driver *driver;
+
+ /* Verify that the driver matches. */
+ if (rte_vdev_parse(value, &driver))
+ return -1;
+
+ /* Copy the driver name as-is. */
+ snprintf(devargs->name, sizeof(devargs->name), "%s", value);
+ return 0;
+}
+
+int
+rte_vdev_devargs_prepare(struct rte_devargs *devargs)
+{
+ struct rte_kvargs *kvargs = NULL;
+ char *args;
+ int ret;
+
+ if (devargs->bus_str == NULL)
+ return 0;
+
+ args = strchr(devargs->bus_str, ',');
+ if (args == NULL)
+ return 0;
+ args++;
+
+ kvargs = rte_kvargs_parse(args, vdev_params_keys);
+ if (kvargs == NULL) {
+ VDEV_LOG(ERR, "unable to parse parameter list: %s\n",
+ devargs->bus_str);
+ rte_errno = EINVAL;
+ return -1;
+ }
+
+ ret = rte_kvargs_process(kvargs, "driver",
+ vdev_driver_kv_parse, devargs);
+
+ rte_kvargs_free(kvargs);
+ return ret;
+}
diff --git a/drivers/bus/vdev/vdev_private.h b/drivers/bus/vdev/vdev_private.h
index ba6dc48ff..da57b84dd 100644
--- a/drivers/bus/vdev/vdev_private.h
+++ b/drivers/bus/vdev/vdev_private.h
@@ -19,6 +19,12 @@ rte_vdev_dev_iterate(const void *start,
const char *str,
const struct rte_dev_iterator *it);
+int
+rte_vdev_parse(const char *name, void *addr);
+
+int
+rte_vdev_devargs_prepare(struct rte_devargs *da);
+
#ifdef __cplusplus
}
#endif
--
2.18.0
next prev parent reply other threads:[~2018-09-19 16:04 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-30 13:41 [dpdk-dev] [PATCH v1 00/13] Implement new devargs framework Gaetan Rivet
2018-08-30 13:41 ` [dpdk-dev] [PATCH v1 01/13] bus/pci: implement device iteration and comparison Gaetan Rivet
2018-08-30 13:41 ` [dpdk-dev] [PATCH v1 02/13] bus/pci: add device matching field id Gaetan Rivet
2018-08-30 13:41 ` [dpdk-dev] [PATCH v1 03/13] bus/vdev: implement device iteration Gaetan Rivet
2018-08-30 13:41 ` [dpdk-dev] [PATCH v1 04/13] bus/vdev: add device matching field driver Gaetan Rivet
2018-08-30 13:41 ` [dpdk-dev] [PATCH v1 05/13] ethdev: add private generic device iterator Gaetan Rivet
2018-08-31 10:09 ` Andrew Rybchenko
2018-08-31 10:22 ` Gaëtan Rivet
2018-08-30 13:41 ` [dpdk-dev] [PATCH v1 06/13] ethdev: register ether layer as a class Gaetan Rivet
2018-08-31 10:09 ` Andrew Rybchenko
2018-08-30 13:41 ` [dpdk-dev] [PATCH v1 07/13] ethdev: add device matching field name Gaetan Rivet
2018-08-31 10:10 ` Andrew Rybchenko
2018-08-30 13:41 ` [dpdk-dev] [PATCH v1 08/13] app/testpmd: add show device command Gaetan Rivet
2018-08-30 13:42 ` [dpdk-dev] [PATCH v1 09/13] bus/pci: pre-process declarative PCI devargs Gaetan Rivet
2018-08-30 13:42 ` [dpdk-dev] [PATCH v1 10/13] bus/vdev: pre-process declarative vdev devargs Gaetan Rivet
2018-08-30 13:42 ` [dpdk-dev] [PATCH v1 11/13] bus/pci: process declarative PCI devargs Gaetan Rivet
2018-08-30 16:15 ` Stephen Hemminger
2018-08-30 16:37 ` Gaëtan Rivet
2018-08-30 13:42 ` [dpdk-dev] [PATCH v1 12/13] ethdev: process declarative eth devargs Gaetan Rivet
2018-08-31 10:10 ` Andrew Rybchenko
2018-08-31 12:16 ` Gaëtan Rivet
2018-08-30 13:42 ` [dpdk-dev] [PATCH v1 13/13] eal: add generic dev parameter Gaetan Rivet
2018-08-30 15:42 ` [dpdk-dev] [PATCH v1 00/13] Implement new devargs framework Stephen Hemminger
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 " Gaetan Rivet
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 01/13] bus/pci: implement device iteration and comparison Gaetan Rivet
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 02/13] bus/pci: add device matching field id Gaetan Rivet
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 03/13] bus/vdev: implement device iteration Gaetan Rivet
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 04/13] bus/vdev: add device matching field driver Gaetan Rivet
2018-09-20 16:11 ` Thomas Monjalon
2018-09-21 11:53 ` Gaëtan Rivet
2018-09-21 12:55 ` Thomas Monjalon
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 05/13] ethdev: add private generic device iterator Gaetan Rivet
2018-09-20 10:02 ` Andrew Rybchenko
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 06/13] ethdev: register ether layer as a class Gaetan Rivet
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 07/13] ethdev: add device matching field name Gaetan Rivet
2018-09-20 16:17 ` Thomas Monjalon
2018-09-21 12:16 ` Gaëtan Rivet
2018-09-21 13:06 ` Thomas Monjalon
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 08/13] app/testpmd: add show device command Gaetan Rivet
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 09/13] bus/pci: pre-process declarative PCI devargs Gaetan Rivet
2018-09-19 16:03 ` Gaetan Rivet [this message]
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 11/13] bus/pci: process " Gaetan Rivet
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 12/13] ethdev: process declarative eth devargs Gaetan Rivet
2018-09-20 10:11 ` Andrew Rybchenko
2018-09-19 16:03 ` [dpdk-dev] [PATCH v2 13/13] eal: add generic dev parameter Gaetan Rivet
2018-10-03 12:31 ` [dpdk-dev] [PATCH v2 00/13] Implement new devargs framework Thomas Monjalon
2020-02-19 5:43 ` Pavan Nikhilesh Bhagavatula
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=64dbe73a53b28681244e7a752ebff6185526ec55.1537372746.git.gaetan.rivet@6wind.com \
--to=gaetan.rivet@6wind.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).