From b61befb48cb339514af0fa62f4dab1f588613c08 Mon Sep 17 00:00:00 2001 From: Matt Peters Date: Tue, 14 Mar 2017 12:33:09 -0400 Subject: [PATCH] igb_uio: support devices with only I/O BAR Allow the BAR setup to succeed if a device has at least 1 BAR region defined. Previously, the device probe would only succeed if at least one memory BAR existed, but there are devices that have only port I/O BARs. For example, on Virtual Box a virtio device has only a single I/O BAR because by default MSI-X is not enabled. While in qemu/kvm the virtio device has MSI-X enabled and therefore has both an I/O and Memory BAR. The following are excerpts from "lspci -nnvvvv -s 00:09.0" on both types of systems. Virtual Box: Region 0: I/O ports at d260 [size=32] Capabilities: [80] #00 [0000] QEMU/KVM: Region 0: I/O ports at c060 [size=32] Region 1: Memory at febd1000 (32-bit, non-prefetchable) [size=4K] Expansion ROM at feb80000 [disabled] [size=256K] Capabilities: [40] MSI-X: Enable+ Count=3 Masked- Vector table: BAR=1 offset=00000000 PBA: BAR=1 offset=00000800 Signed-off-by: Matt Peters Signed-off-by: Allain Legacy Acked-by: Ferruh Yigit --- lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c index df41e457ad..a910eb899a 100644 --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c @@ -314,7 +314,7 @@ igbuio_setup_bars(struct pci_dev *dev, struct uio_info *info) } } - return (iom != 0) ? ret : -ENOENT; + return (iom != 0 || iop != 0) ? ret : -ENOENT; } #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0) -- 2.20.1