[dpdk-dev] [PATCH v2 4/5] devargs: parse name from global device syntax
Xueming Li
xuemingl at nvidia.com
Mon Jan 18 16:16:41 CET 2021
To use Global Device Syntax as devarg, name is required for device
management.
This patch adds global device syntax name resolving by using same
strategy as function rte_eth_iterator_init(), parses from "addr" bus
parameter for PCI bus, from "name" bus parameter for vdev bus.
Example:
-a bus=pci,addr=83:00.0/class=eth/driver=mlx5,...
name: 03:00.0
-a bus=vdev,name=pcap0/class=eth/driver=pcap,...
name:pcap0
Signed-off-by: Xueming Li <xuemingl at nvidia.com>
---
lib/librte_eal/common/eal_common_devargs.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c
index 9c7a7de30e..27af4cc0e3 100644
--- a/lib/librte_eal/common/eal_common_devargs.c
+++ b/lib/librte_eal/common/eal_common_devargs.c
@@ -57,6 +57,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
struct rte_class *cls = NULL;
struct rte_bus *bus = NULL;
const char *s = devstr;
+ const char *name = NULL;
size_t nblayer;
size_t i = 0;
int ret = 0;
@@ -116,6 +117,8 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
if (layers[i].kvlist == NULL)
continue;
kv = &layers[i].kvlist->pairs[0];
+ if (!kv->key)
+ continue;
if (strcmp(kv->key, "bus") == 0) {
bus = rte_bus_find_by_name(kv->value);
if (bus == NULL) {
@@ -146,6 +149,16 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
devargs->cls = cls;
devargs->src = devstr;
+ /* Parse device name. */
+ if (bus) {
+ if (strcmp(bus->name, "vdev") == 0)
+ name = rte_kvargs_get(layers[0].kvlist, "name");
+ else if (strcmp(bus->name, "pci") == 0)
+ name = rte_kvargs_get(layers[0].kvlist, "addr");
+ if (name != NULL)
+ strncpy(devargs->name, name, sizeof(devargs->name) - 1);
+ }
+
/* If we own the data, clean up a bit
* the several layers string, to ease
* their parsing afterward.
--
2.25.1
More information about the dev
mailing list