Commit b313652b authored by Jim Harris's avatar Jim Harris Committed by Tomasz Zawadzki
Browse files

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: default avatarDavid Marchand <david.marchand@redhat.com>
Signed-off-by: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: Id3a21a6e62dfa1619a92465fac5a82afb9b43cb0
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14532


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
parent 36644ef3
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -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 */