On Sun, Sep 27, 2015 at 10:05:11AM +0300, Vlad Zolotarov wrote: > Hi, > I was trying to use uio_pci_generic with Intel's 10G SR-IOV devices on > Amazon EC2 instances with Enhanced Networking enabled. > The idea is to create a DPDK environment that doesn't require compiling > kernel modules (igb_uio). > However I was surprised to discover that uio_pci_generic refuses to work > with EN device on AWS: > > $ lspci > 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) > 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] > 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] > 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01) > 00:02.0 VGA compatible controller: Cirrus Logic GD 5446 > 00:03.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller > Virtual Function (rev 01) > 00:04.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller > Virtual Function (rev 01) > 00:1f.0 Unassigned class [ff80]: XenSource, Inc. Xen Platform Device (rev 01) > > $ sudo ./dpdk/tools/dpdk_nic_bind.py -b uio_pci_generic 00:04.0 > Error: bind failed for 0000:00:04.0 - Cannot bind to driver uio_pci_generic
> $dmesg > > --> snip <--- > [ 816.655575] uio_pci_generic 0000:00:04.0: No IRQ assigned to device: no > support for interrupts? > > $ sudo lspci -s 00:04.0 -vvv > 00:04.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller > Virtual Function (rev 01) > Physical Slot: 4 > Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- > Stepping- SERR- FastB2B- DisINTx- > Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- > <MAbort- >SERR- <PERR- INTx- > Region 0: Memory at f3008000 (64-bit, prefetchable) [size=16K] > Region 3: Memory at f300c000 (64-bit, prefetchable) [size=16K] > Capabilities: [70] MSI-X: Enable- Count=3 Masked- > Vector table: BAR=3 offset=00000000 > PBA: BAR=3 offset=00002000 > Kernel modules: ixgbevf > > So, as we may see the PCI device doesn't have an INTX interrupt line > assigned indeed. It has an MSI-X capability however. > Looking at the uio_pci_generic code it seems to require the INTX: > > uio_pci_generic.c: line 74: probe(): > > if (!pdev->irq) { > dev_warn(&pdev->dev, "No IRQ assigned to device: " > "no support for interrupts?\n"); > pci_disable_device(pdev); > return -ENODEV; > } > > Is it a known limitation? Michael, could u, pls., comment on this? > > thanks, > vlad This is expected. uio_pci_generic forwards INT#x interrupts from device to userspace, but VF devices never assert INT#x. So it doesn't seem to make any sense to bind uio_pci_generic there. I think that DPDK should be fixed to not require uio_pci_generic for VF devices (or any devices without INT#x). If DPDK requires a place-holder driver, the pci-stub driver should do this adequately. See ./drivers/pci/pci-stub.c -- MST