devargs: make device types generic

rte_devargs now represents any device from any bus.
The related devtypes do not identify a bus anymore, only which scan
policy the device subscribes to.

The bus itself is identified by a bus handle previously introduced.

Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
This commit is contained in:
Gaetan Rivet 2017-07-07 02:04:32 +02:00 committed by Thomas Monjalon
parent 2b0e39c183
commit bd279a7936
6 changed files with 30 additions and 36 deletions

View File

@ -126,14 +126,14 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str)
ret = snprintf(devargs->name, sizeof(devargs->name), "%s", devname);
if (ret < 0 || ret >= (int)sizeof(devargs->name))
goto fail;
if (devargs->type == RTE_DEVTYPE_WHITELISTED_PCI) {
if (devargs->type == RTE_DEVTYPE_WHITELISTED) {
if (bus->conf.scan_mode == RTE_BUS_SCAN_UNDEFINED) {
bus->conf.scan_mode = RTE_BUS_SCAN_WHITELIST;
} else if (bus->conf.scan_mode == RTE_BUS_SCAN_BLACKLIST) {
fprintf(stderr, "ERROR: incompatible device type and bus scan mode\n");
goto fail;
}
} else if (devargs->type == RTE_DEVTYPE_BLACKLISTED_PCI) {
} else if (devargs->type == RTE_DEVTYPE_BLACKLISTED) {
if (bus->conf.scan_mode == RTE_BUS_SCAN_UNDEFINED) {
bus->conf.scan_mode = RTE_BUS_SCAN_BLACKLIST;
} else if (bus->conf.scan_mode == RTE_BUS_SCAN_WHITELIST) {

View File

@ -798,14 +798,14 @@ eal_parse_common_option(int opt, const char *optarg,
switch (opt) {
/* blacklist */
case 'b':
if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI,
if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED,
optarg) < 0) {
return -1;
}
break;
/* whitelist */
case 'w':
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI,
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED,
optarg) < 0) {
return -1;
}
@ -901,7 +901,7 @@ eal_parse_common_option(int opt, const char *optarg,
break;
case OPT_VDEV_NUM:
if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL,
if (rte_eal_devargs_add(RTE_DEVTYPE_UNDEFINED,
optarg) < 0) {
return -1;
}
@ -1025,13 +1025,6 @@ eal_check_common_options(struct internal_config *internal_cfg)
return -1;
}
if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) != 0 &&
rte_eal_devargs_type_count(RTE_DEVTYPE_BLACKLISTED_PCI) != 0) {
RTE_LOG(ERR, EAL, "Options blacklist (-b) and whitelist (-w) "
"cannot be used at the same time\n");
return -1;
}
return 0;
}

View File

@ -198,7 +198,7 @@ rte_pci_probe_one_driver(struct rte_pci_driver *dr,
/* no initialization when blacklisted, return without error */
if (dev->device.devargs != NULL &&
dev->device.devargs->type ==
RTE_DEVTYPE_BLACKLISTED_PCI) {
RTE_DEVTYPE_BLACKLISTED) {
RTE_LOG(INFO, EAL, " Device is blacklisted, not"
" initializing\n");
return 1;
@ -390,7 +390,7 @@ rte_pci_probe(void)
int probe_all = 0;
int ret = 0;
if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) == 0)
if (rte_pci_bus.bus.conf.scan_mode != RTE_BUS_SCAN_WHITELIST)
probe_all = 1;
FOREACH_DEVICE_ON_PCIBUS(dev) {
@ -405,7 +405,7 @@ rte_pci_probe(void)
if (probe_all)
ret = pci_probe_all_drivers(dev);
else if (devargs != NULL &&
devargs->type == RTE_DEVTYPE_WHITELISTED_PCI)
devargs->type == RTE_DEVTYPE_WHITELISTED)
ret = pci_probe_all_drivers(dev);
if (ret < 0) {
RTE_LOG(ERR, EAL, "Requested device " PCI_PRI_FMT

View File

@ -176,7 +176,6 @@ alloc_devargs(const char *name, const char *args)
if (!devargs)
return NULL;
devargs->type = RTE_DEVTYPE_VIRTUAL;
devargs->bus = rte_bus_find_by_name("vdev");
if (args)
devargs->args = strdup(args);

View File

@ -56,9 +56,9 @@ extern "C" {
* Type of generic device
*/
enum rte_devtype {
RTE_DEVTYPE_WHITELISTED_PCI,
RTE_DEVTYPE_BLACKLISTED_PCI,
RTE_DEVTYPE_VIRTUAL,
RTE_DEVTYPE_UNDEFINED,
RTE_DEVTYPE_WHITELISTED,
RTE_DEVTYPE_BLACKLISTED,
};
/**

View File

@ -64,30 +64,32 @@ test_devargs(void)
TAILQ_INIT(&devargs_list);
/* test valid cases */
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "08:00.1") < 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "08:00.1") < 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "0000:5:00.0") < 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "0000:5:00.0") < 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "04:00.0,arg=val") < 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "04:00.0,arg=val") < 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "0000:01:00.1") < 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "0000:01:00.1") < 0)
goto fail;
if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) != 2)
if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED) != 4)
goto fail;
if (rte_eal_devargs_type_count(RTE_DEVTYPE_BLACKLISTED_PCI) != 2)
if (rte_eal_devargs_type_count(RTE_DEVTYPE_BLACKLISTED) != 0)
goto fail;
if (rte_eal_devargs_type_count(RTE_DEVTYPE_VIRTUAL) != 0)
if (rte_eal_devargs_type_count(RTE_DEVTYPE_UNDEFINED) != 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring0") < 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_UNDEFINED, "net_ring0") < 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring1,key=val,k2=val2") < 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_UNDEFINED,
"net_ring1,key=val,k2=val2") < 0)
goto fail;
if (rte_eal_devargs_type_count(RTE_DEVTYPE_VIRTUAL) != 2)
if (rte_eal_devargs_type_count(RTE_DEVTYPE_UNDEFINED) != 2)
goto fail;
free_devargs_list();
/* check virtual device with argument parsing */
if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring1,k1=val,k2=val2") < 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_UNDEFINED,
"net_ring1,k1=val,k2=val2") < 0)
goto fail;
devargs = TAILQ_FIRST(&devargs_list);
if (strncmp(devargs->name, "net_ring1",
@ -98,7 +100,7 @@ test_devargs(void)
free_devargs_list();
/* check PCI device with empty argument parsing */
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "04:00.1") < 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "04:00.1") < 0)
goto fail;
devargs = TAILQ_FIRST(&devargs_list);
if (strcmp(devargs->name, "04:00.1") != 0)
@ -108,15 +110,15 @@ test_devargs(void)
free_devargs_list();
/* test error case: bad PCI address */
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "08:1") == 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "08:1") == 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "00.1") == 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "00.1") == 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "foo") == 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "foo") == 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, ",") == 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, ",") == 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "000f:0:0") == 0)
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED, "000f:0:0") == 0)
goto fail;
devargs_list = save_devargs_list;