From b313652b3045935efbb357190aa9072ad4f1b6da Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Thu, 15 Sep 2022 13:56:06 +0000 Subject: [PATCH] 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 Signed-off-by: Jim Harris Change-Id: Id3a21a6e62dfa1619a92465fac5a82afb9b43cb0 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14532 Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Tomasz Zawadzki Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk --- lib/env_dpdk/pci.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/env_dpdk/pci.c b/lib/env_dpdk/pci.c index 383d57b66..3ee3461f9 100644 --- a/lib/env_dpdk/pci.c +++ b/lib/env_dpdk/pci.c @@ -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 */