env_dpdk: add dpdk_device_* functions

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: I89dbf50821a3843b861629c195f2f9e8dfdc59a6
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14569
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
Jim Harris 2022-09-19 19:08:07 +00:00 committed by Tomasz Zawadzki
parent 89e56a49d3
commit 7a7fd57715

View File

@ -73,6 +73,10 @@ int dpdk_pci_device_disable_interrupt(struct rte_pci_device *rte_dev);
int dpdk_pci_device_get_interrupt_efd(struct rte_pci_device *rte_dev); int dpdk_pci_device_get_interrupt_efd(struct rte_pci_device *rte_dev);
void dpdk_bus_scan(void); void dpdk_bus_scan(void);
int dpdk_bus_probe(void); int dpdk_bus_probe(void);
struct rte_devargs *dpdk_device_get_devargs(struct rte_device *dev);
void dpdk_device_set_devargs(struct rte_device *dev, struct rte_devargs *devargs);
const char *dpdk_device_get_name(struct rte_device *dev);
bool dpdk_device_scan_allowed(struct rte_device *dev);
int pci_device_init(struct rte_pci_driver *driver, struct rte_pci_device *device); int pci_device_init(struct rte_pci_driver *driver, struct rte_pci_device *device);
int pci_device_fini(struct rte_pci_device *device); int pci_device_fini(struct rte_pci_device *device);
@ -522,7 +526,7 @@ scan_pci_bus(bool delay_init)
RTE_DEV_FOREACH(rte_dev, "bus=pci", &it) { RTE_DEV_FOREACH(rte_dev, "bus=pci", &it) {
struct rte_devargs *da; struct rte_devargs *da;
da = rte_dev->devargs; da = dpdk_device_get_devargs(rte_dev);
if (!da) { if (!da) {
char devargs_str[128]; char devargs_str[128];
@ -532,14 +536,14 @@ scan_pci_bus(bool delay_init)
return -1; return -1;
} }
snprintf(devargs_str, sizeof(devargs_str), "pci:%s", rte_dev->name); snprintf(devargs_str, sizeof(devargs_str), "pci:%s", dpdk_device_get_name(rte_dev));
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->devargs = da; dpdk_device_set_devargs(rte_dev, da);
} }
if (get_allowed_at(da)) { if (get_allowed_at(da)) {
@ -549,8 +553,8 @@ 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 ((rte_dev->bus->conf.scan_mode == RTE_BUS_SCAN_ALLOWLIST && } else if ((dpdk_device_scan_allowed(rte_dev) && da->policy == RTE_DEV_ALLOWED) ||
da->policy == RTE_DEV_ALLOWED) || da->policy != RTE_DEV_BLOCKED) { da->policy != RTE_DEV_BLOCKED) {
/* override the policy only if not permanently blocked */ /* override the policy only if not permanently blocked */
if (delay_init) { if (delay_init) {
@ -1354,3 +1358,27 @@ dpdk_bus_scan(void)
{ {
rte_bus_scan(); rte_bus_scan();
} }
struct rte_devargs *
dpdk_device_get_devargs(struct rte_device *dev)
{
return dev->devargs;
}
void
dpdk_device_set_devargs(struct rte_device *dev, struct rte_devargs *devargs)
{
dev->devargs = devargs;
}
const char *
dpdk_device_get_name(struct rte_device *dev)
{
return dev->name;
}
bool
dpdk_device_scan_allowed(struct rte_device *dev)
{
return dev->bus->conf.scan_mode == RTE_BUS_SCAN_ALLOWLIST;
}