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 static int
scan_pci_bus(bool delay_init) scan_pci_bus(bool delay_init)
{ {
struct spdk_pci_driver *driver; struct rte_dev_iterator it;
struct rte_pci_device *rte_dev; struct rte_device *rte_dev;
uint64_t now; uint64_t now;
rte_bus_scan(); rte_bus_scan();
now = spdk_get_ticks(); now = spdk_get_ticks();
driver = TAILQ_FIRST(&g_pci_drivers); if (!TAILQ_FIRST(&g_pci_drivers)) {
if (!driver) {
return 0; return 0;
} }
TAILQ_FOREACH(rte_dev, &driver->driver.bus->device_list, next) { RTE_DEV_FOREACH(rte_dev, "bus=pci", &it) {
struct rte_devargs *da; struct rte_devargs *da;
da = rte_dev->device.devargs; da = rte_dev->devargs;
if (!da) { if (!da) {
char devargs_str[128]; char devargs_str[128];
@ -597,14 +596,14 @@ scan_pci_bus(bool delay_init)
return -1; 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) { if (rte_devargs_parse(da, devargs_str) != 0) {
free(da); free(da);
return -1; return -1;
} }
rte_devargs_insert(&da); rte_devargs_insert(&da);
rte_dev->device.devargs = da; rte_dev->devargs = da;
} }
if (get_allowed_at(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) { if (da->policy == RTE_DEV_BLOCKED && allowed_at <= now) {
da->policy = RTE_DEV_ALLOWED; 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) { da->policy == RTE_DEV_ALLOWED) || da->policy != RTE_DEV_BLOCKED) {
/* override the policy only if not permanently blocked */ /* override the policy only if not permanently blocked */