This makes the devargs code itself require the rte_devargs type field for properly functioning.
Signed-off-by: Jan Blunck <jblu...@infradead.org> --- lib/librte_eal/common/eal_common_devargs.c | 42 ++++++++++++++++++------------ 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index f9f23f5fd..2bdee9a30 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -77,14 +77,14 @@ rte_eal_parse_devargs_str(const char *devargs_str, return 0; } -static struct rte_devargs * -devargs_alloc(const char *busname, const char *name, const char *args) +static int +devargs_add(const char *busname, const char *name, const char *args) { struct rte_devargs *devargs; int ret; if (busname == NULL || name == NULL || args == NULL) - return NULL; + return -1; /* use calloc instead of rte_zmalloc as it's called early at init */ devargs = calloc(1, sizeof(*devargs)); @@ -102,7 +102,7 @@ devargs_alloc(const char *busname, const char *name, const char *args) devargs->args = strdup(args); TAILQ_INSERT_TAIL(&devargs_list, devargs, next); - return devargs; + return 0; fail: if (devargs != NULL) { @@ -110,7 +110,7 @@ devargs_alloc(const char *busname, const char *name, const char *args) free(devargs); } - return NULL; + return -1; } static int @@ -185,7 +185,6 @@ static const struct rte_bus_conf BUS_CONF_BLACKLIST = { int rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) { - struct rte_devargs *devargs = NULL; const char *busname = NULL; char *name = NULL; char *args = NULL; @@ -214,10 +213,7 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) break; } - devargs = devargs_alloc(busname, name, args); - if (devargs != NULL) - devargs->type = devtype; - ret = devargs == NULL ? -1 : 0; + ret = devargs_add(busname, name, args); fail: free(name); @@ -229,13 +225,28 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) unsigned int rte_eal_devargs_type_count(enum rte_devtype devtype) { + struct rte_bus *pci_bus = rte_bus_find_by_name("pci"); + const char *busname = ""; struct rte_devargs *devargs; unsigned int count = 0; + switch (devtype) { + case RTE_DEVTYPE_WHITELISTED_PCI: + if (pci_bus->conf.scan_mode == RTE_BUS_SCAN_WHITELIST) + busname = "pci"; + break; + case RTE_DEVTYPE_BLACKLISTED_PCI: + if (pci_bus->conf.scan_mode == RTE_BUS_SCAN_BLACKLIST) + busname = "pci"; + break; + case RTE_DEVTYPE_VIRTUAL: + busname = "vdev"; + break; + } + TAILQ_FOREACH(devargs, &devargs_list, next) { - if (devargs->type != devtype) - continue; - count++; + if (strcmp(busname, devargs->busname) == 0) + count++; } return count; } @@ -248,8 +259,7 @@ rte_eal_devargs_dump(FILE *f) fprintf(f, "User device list:\n"); TAILQ_FOREACH(devargs, &devargs_list, next) { - fprintf(f, " [%s]: %s %s\n", - (devargs->bus ? devargs->bus->name : "??"), - devargs->name, devargs->args); + fprintf(f, " [%s]: %s %s\n", devargs->busname, devargs->name, + devargs->args); } } -- 2.13.2