[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