EAL -a and -b options are used to specify which PCI devices are explicitly allowed or blocked during PCI bus scan. This evaluation is missing in the Windows implementation of rte_pci_scan.
This patch provides this missing functionality, so that apps can specify which NetUIO devices to ignore during PCI bus scan. Signed-off-by: Khoa To <k...@linux.microsoft.com> --- v4: * Fix coding style warning with unaligned comments v3: * Move the check inside pci_scan_one * Small change to pci_scan_one to malloc only after checks succeeded v2: * Truncate commit description lines to 75 charaters or less drivers/bus/pci/windows/pci.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c index f66258452..0d184f24d 100644 --- a/drivers/bus/pci/windows/pci.c +++ b/drivers/bus/pci/windows/pci.c @@ -308,17 +308,24 @@ set_kernel_driver_type(PSP_DEVINFO_DATA device_info_data, static int pci_scan_one(HDEVINFO dev_info, PSP_DEVINFO_DATA device_info_data) { - struct rte_pci_device *dev; + struct rte_pci_device *dev = NULL; int ret = -1; char pci_device_info[REGSTR_VAL_MAX_HCID_LEN]; struct rte_pci_addr addr; struct rte_pci_id pci_id; - dev = malloc(sizeof(*dev)); - if (dev == NULL) + ret = get_device_pci_address(dev_info, device_info_data, &addr); + if (ret != 0) goto end; - memset(dev, 0, sizeof(*dev)); + if (rte_pci_ignore_device(&addr)) { + /* + * We won't add this device, but we want to continue + * looking for supported devices + */ + ret = ERROR_CONTINUE; + goto end; + } ret = get_pci_hardware_id(dev_info, device_info_data, pci_device_info, sizeof(pci_device_info)); @@ -335,10 +342,12 @@ pci_scan_one(HDEVINFO dev_info, PSP_DEVINFO_DATA device_info_data) goto end; } - ret = get_device_pci_address(dev_info, device_info_data, &addr); - if (ret != 0) + dev = malloc(sizeof(*dev)); + if (dev == NULL) goto end; + memset(dev, 0, sizeof(*dev)); + dev->addr = addr; dev->id = pci_id; dev->max_vfs = 0; /* TODO: get max_vfs */ @@ -417,7 +426,7 @@ rte_pci_scan(void) device_index++; /* we only want to enumerate net & netuio class devices */ if (IsEqualGUID(&(device_info_data.ClassGuid), - &GUID_DEVCLASS_NET) || + &GUID_DEVCLASS_NET) || IsEqualGUID(&(device_info_data.ClassGuid), &GUID_DEVCLASS_NETUIO)) { ret = pci_scan_one(dev_info, &device_info_data); -- 2.29.0.vfs.0.0