bus/pci: fix UIO bind check

When checking if any devices bound to uio, we did not exclude
those which are blacklisted (or in the case that a whitelist
is specified).

This patch fixes it by only checking whitelisted devices, or
not-blacklisted devices depending on the bus scan mode.

Fixes: 815c7deaed ("pci: get IOMMU class on Linux")

Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Reviewed-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Acked-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
This commit is contained in:
Jianfeng Tan 2017-10-24 07:44:53 +00:00 committed by Thomas Monjalon
parent 3964426e58
commit 633e4c7d71

View File

@ -524,8 +524,29 @@ static inline int
pci_one_device_bound_uio(void)
{
struct rte_pci_device *dev = NULL;
struct rte_devargs *devargs;
int need_check;
FOREACH_DEVICE_ON_PCIBUS(dev) {
devargs = dev->device.devargs;
need_check = 0;
switch (rte_pci_bus.bus.conf.scan_mode) {
case RTE_BUS_SCAN_WHITELIST:
if (devargs && devargs->policy == RTE_DEV_WHITELISTED)
need_check = 1;
break;
case RTE_BUS_SCAN_UNDEFINED:
case RTE_BUS_SCAN_BLACKLIST:
if (devargs == NULL ||
devargs->policy != RTE_DEV_BLACKLISTED)
need_check = 1;
break;
}
if (!need_check)
continue;
if (dev->kdrv == RTE_KDRV_IGB_UIO ||
dev->kdrv == RTE_KDRV_UIO_GENERIC) {
return 1;