This patchset adds support for using VFIO instead of IGB_UIO to
map the device BARs.
VFIO is a kernel 3.6+ driver allowing secure DMA from userspace
by means of using IOMMU instead of working directly with physical
memory like igb_uio does.
Short summary:
* Adding support for VFIO in EAL PCI code
* Adding new command-line parameter for VFIO interrupt type
* Adding support for VFIO in setup.sh
* Renaming igb_uio_bind to dpdk_nic_bind and adding support for
VFIO there
* Removing PCI ID list from igb_uio, effectively making it another
generic PCI driver similar to pci_stub, vfio-pci et al
* Adding autotest for VFIO interrupt types
* Making igb_uio and VFIO compilation optional
v2 fixes:
* Fixed a couple of resource leaks
v3 fixes:
* Fixed various checkpatch.pl issues
* Added MSI interrupt support
* Added an option to automatically determine interrupt type
* Fixed various issues of commit atomicity
v4 fixes:
* Rebased on top of 5ebbb17281645b23359fbd49133bb639b63ba88c
* Fixed a typo in EAL command-line help text
v5 fixes:
* Fixed missing virtio change to RTE_PCI_DRV_NEED_MAPPING
* Fixed compile issue when VFIO was disabled (introduced in v3)
Tested-by: Waterman Cao
This patch has been tested by intel.
We tested this patch with the following functions:
* Layer-2 Forwarding support
* Sample commands test
* Packet forwarding checking
* Bind and unbind VFIO driver
* Compile igb_uio driver ( Linux kernel < 3.6)
* Interrupt model test under Legacy|msi|msix
All cases passed.
Please see test environment information :
Fedora 20 x86_64, Linux Kernel 3.13.6-200,
GCC 4.8.2 Intel Xeon CPU E5-2680 v2 @ 2.80GHz NIC: Intel Niantic 82599
Anatoly Burakov (20):
pci: move open() out of pci_map_resource, rename structs
pci: move uio mapping code to a separate file
pci: fixing errors in a previous commit found by checkpatch
pci: distinguish between legitimate failures and non-fatal errors
pci: Rename RTE_PCI_DRV_NEED_IGB_UIO to RTE_PCI_DRV_NEED_MAPPING
igb_uio: make igb_uio compilation optional
igb_uio: Moved interrupt type out of igb_uio
vfio: add support for VFIO in Linuxapp targets
vfio: add VFIO header
interrupts: Add support for VFIO interrupts
eal: remove -Wno-return-type for non-existent eal_hpet.c
vfio: create mapping code for VFIO
vfio: add multiprocess support.
pci: enable VFIO device binding
eal: added support for selecting VFIO interrupt type from EAL
command-line
eal: make --no-huge use mmap instead of malloc
test app: adding unit tests for VFIO EAL command-line parameter
igb_uio: Removed PCI ID table from igb_uio
binding script: Renamed igb_uio_bind to dpdk_nic_bind
setup script: adding support for VFIO to setup.sh
app/test/test_eal_flags.c | 36 +
app/test/test_pci.c| 4 +-
config/common_linuxapp | 2 +
lib/librte_eal/bsdapp/eal/eal_pci.c| 2 +-
lib/librte_eal/common/Makefile | 1 +
lib/librte_eal/common/eal_common_pci.c | 16 +-
lib/librte_eal/common/include/rte_pci.h| 5 +-
.../common/include/rte_pci_dev_feature_defs.h | 46 ++
.../common/include/rte_pci_dev_features.h | 44 ++
lib/librte_eal/linuxapp/Makefile | 2 +
lib/librte_eal/linuxapp/eal/Makefile | 5 +-
lib/librte_eal/linuxapp/eal/eal.c | 36 +
lib/librte_eal/linuxapp/eal/eal_interrupts.c | 287 +++-
lib/librte_eal/linuxapp/eal/eal_memory.c | 8 +-
lib/librte_eal/linuxapp/eal/eal_pci.c | 473 ++---
lib/librte_eal/linuxapp/eal/eal_pci_uio.c | 403 +++
lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 781 +
lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c | 395 +++
.../linuxapp/eal/include/eal_internal_cfg.h| 3 +
lib/librte_eal/linuxapp/eal/include/eal_pci_init.h | 116 +++
lib/librte_eal/linuxapp/eal/include/eal_vfio.h | 55 ++
.../linuxapp/eal/include/exec-env/rte_interrupts.h | 4 +
lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 69 +-
lib/librte_pmd_e1000/em_ethdev.c | 2 +-
lib/librte_pmd_e1000/igb_ethdev.c | 4 +-
lib/librte_pmd_ixgbe/ixgbe_ethdev.c| 4 +-
lib/librte_pmd_virtio/virtio_ethdev.c | 2 +-
lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c| 2 +-
tools/{igb_uio_bind.py => dpdk_nic_bind.py}| 157 +++--
tools/setup.sh | 172 -
30 files changed, 2548 insertions(+), 588 deletions(-)
create mode 100644 lib/librte_eal/common/include/rte_pci_dev_feature_defs.h
create mode 100644 lib/librte_eal/common/include/rte_pci_dev_features.h
create mode 100644 lib/librte_eal/linuxapp/eal/eal_pci_uio.c
create mode 100644 lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
create mode 100644