[dpdk-dev] igb_uio: support devices with at least 1 bar defined

Message ID 1489509189-166941-1-git-send-email-allain.legacy@windriver.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/checkpatch success coding style OK

Commit Message

Allain Legacy March 14, 2017, 4:33 p.m. UTC
  From: Matt Peters <matt.peters@windriver.com>

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 <matt.peters@windriver.com>
Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
---
 lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Ferruh Yigit March 14, 2017, 4:59 p.m. UTC | #1
On 3/14/2017 4:33 PM, Allain Legacy wrote:
> From: Matt Peters <matt.peters@windriver.com>
> 
> 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 <matt.peters@windriver.com>
> Signed-off-by: Allain Legacy <allain.legacy@windriver.com>

Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
  
Thomas Monjalon March 15, 2017, 1:01 p.m. UTC | #2
2017-03-14 16:59, Ferruh Yigit:
> On 3/14/2017 4:33 PM, Allain Legacy wrote:
> > From: Matt Peters <matt.peters@windriver.com>
> > 
> > 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 <matt.peters@windriver.com>
> > Signed-off-by: Allain Legacy <allain.legacy@windriver.com>
> 
> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c
index df41e45..a910eb8 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 @@  struct rte_uio_pci_dev {
 		}
 	}
 
-	return (iom != 0) ? ret : -ENOENT;
+	return (iom != 0 || iop != 0) ? ret : -ENOENT;
 }
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)