env_dpdk/pci: Refactor PCI bus scan

Preparing for potential 22.11 changes, refactor this code using DPDK api:
- a bus device list can be walked through via RTE_DEV_FOREACH,
- a reference to the bus object is directly available under the device,

Signed-off-by: David Marchand <david.marchand@redhat.com>
Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Id3a21a6e62dfa1619a92465fac5a82afb9b43cb0
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14532
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
This commit is contained in:
Jim Harris 2022-09-15 13:56:06 +00:00 committed by Tomasz Zawadzki
parent 36644ef32f
commit b313652b30

View File

@ -572,22 +572,21 @@ spdk_pci_device_detach(struct spdk_pci_device *dev)
static int
scan_pci_bus(bool delay_init)
{
struct spdk_pci_driver *driver;
struct rte_pci_device *rte_dev;
struct rte_dev_iterator it;
struct rte_device *rte_dev;
uint64_t now;
rte_bus_scan();
now = spdk_get_ticks();
driver = TAILQ_FIRST(&g_pci_drivers);
if (!driver) {
if (!TAILQ_FIRST(&g_pci_drivers)) {
return 0;
}
TAILQ_FOREACH(rte_dev, &driver->driver.bus->device_list, next) {
RTE_DEV_FOREACH(rte_dev, "bus=pci", &it) {
struct rte_devargs *da;
da = rte_dev->device.devargs;
da = rte_dev->devargs;
if (!da) {
char devargs_str[128];
@ -597,14 +596,14 @@ scan_pci_bus(bool delay_init)
return -1;
}
snprintf(devargs_str, sizeof(devargs_str), "pci:%s", rte_dev->device.name);
snprintf(devargs_str, sizeof(devargs_str), "pci:%s", rte_dev->name);
if (rte_devargs_parse(da, devargs_str) != 0) {
free(da);
return -1;
}
rte_devargs_insert(&da);
rte_dev->device.devargs = da;
rte_dev->devargs = da;
}
if (get_allowed_at(da)) {
@ -614,7 +613,7 @@ scan_pci_bus(bool delay_init)
if (da->policy == RTE_DEV_BLOCKED && allowed_at <= now) {
da->policy = RTE_DEV_ALLOWED;
}
} else if ((driver->driver.bus->bus.conf.scan_mode == RTE_BUS_SCAN_ALLOWLIST &&
} else if ((rte_dev->bus->conf.scan_mode == RTE_BUS_SCAN_ALLOWLIST &&
da->policy == RTE_DEV_ALLOWED) || da->policy != RTE_DEV_BLOCKED) {
/* override the policy only if not permanently blocked */