[dpdk-dev] [RFC 7/9] bus/pci: add new global device syntax support

Xueming Li xuemingl at nvidia.com
Fri Dec 18 16:16:52 CET 2020


With new global device syntax, this patch tries to get PCI BDF firstly
from bus "addr" argument, fallback to name if not found. Example:

 -w bus=pci,addr=82:00.0/class=eth/driver=mlx5,dv_flow_en=1

Signed-off-by: Xueming Li <xuemingl at nvidia.com>
---
 drivers/bus/pci/pci_common.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 9b8d769287..f6fc80abe8 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -23,6 +23,7 @@
 #include <rte_string_fns.h>
 #include <rte_common.h>
 #include <rte_devargs.h>
+#include <rte_kvargs.h>
 #include <rte_vfio.h>
 
 #include "private.h"
@@ -48,9 +49,20 @@ pci_devargs_lookup(const struct rte_pci_addr *pci_addr)
 {
 	struct rte_devargs *devargs;
 	struct rte_pci_addr addr;
+	struct rte_kvargs *kvlist = NULL;
+	const char *name;
 
 	RTE_EAL_DEVARGS_FOREACH("pci", devargs) {
-		devargs->bus->parse(devargs->name, &addr);
+		name = NULL;
+		if (devargs->bus_str) {
+			kvlist = rte_kvargs_parse(devargs->bus_str, NULL);
+			name = rte_kvargs_get(kvlist, "id");
+		}
+		if (!name)
+			name = devargs->name;
+		devargs->bus->parse(name, &addr);
+		if (kvlist)
+			rte_kvargs_free(kvlist);
 		if (!rte_pci_addr_cmp(pci_addr, &addr))
 			return devargs;
 	}
@@ -71,11 +83,11 @@ pci_name_set(struct rte_pci_device *dev)
 	/* When using a blocklist, only blocked devices will have
 	 * an rte_devargs. Allowed devices won't have one.
 	 */
-	if (devargs != NULL)
+	if (devargs != NULL && strlen(devargs->name))
 		/* If an rte_devargs exists, the generic rte_device uses the
 		 * given name as its name.
 		 */
-		dev->device.name = dev->device.devargs->name;
+		dev->device.name = devargs->name;
 	else
 		/* Otherwise, it uses the internal, canonical form. */
 		dev->device.name = dev->name;
-- 
2.25.1



More information about the dev mailing list