Thread (126 messages) 126 messages, 11 authors, 2021-10-03

[dpdk-dev] [PATCH v2 4/5] devargs: parse name from global device syntax

From: Xueming Li <hidden>
Date: 2021-01-18 15:16:59
Subsystem: library code, the rest · Maintainers: Andrew Morton, Linus Torvalds

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 <redacted>
---
 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help