[dpdk-dev] [PATCH 00/16] [RFC] [VFIO] Add VFIO support to DPDK
Stephen Hemminger
stephen at networkplumber.org
Thu May 1 18:12:41 CEST 2014
On Thu, 1 May 2014 11:05:38 +0000
"Burakov, Anatoly" <anatoly.burakov at intel.com> wrote:
> 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
>
> I'm submitting this as an RFC because this patch is based off
> current dpdk.org branch with David Marchand's RTE_EAL_UNBIND_PORTS
> patchset. IOW, this will *not* apply to the dpdk.org tree *unless* you
> also apply David's patches beforehand.
>
> Signed-off by: Anatoly Burakov <anatoly.burakov at intel.com>
>
> Anatoly Burakov (16):
> Separate igb_uio mapping into a separate file
> Distinguish between legitimate failures and non-fatal errors
> Rename RTE_PCI_DRV_NEED_IGB_UIO to RTE_PCI_DRV_NEED_MAPPING
> Make igb_uio compilation optional
> Moved interrupt type out of igb_uio
> Add support for VFIO in Linuxapp targets
> Add support for VFIO interrupts, add VFIO header
> Add support for mapping devices through VFIO.
> Enable VFIO device binding
> Added support for selecting VFIO interrupt type from EAL command-line
> Make --no-huge use mmap instead of malloc.
> Adding unit tests for VFIO EAL command-line parameter
> Removed PCI ID table from igb_uio
> Renamed igb_uio_bind to dpdk_nic_bind
> Added support for VFIO drivers in dpdk_nic_bind.py
> Adding support for VFIO to setup.sh
>
> app/test/test_eal_flags.c | 24 +
> app/test/test_pci.c | 4 +-
> config/defconfig_i686-default-linuxapp-gcc | 2 +
> config/defconfig_i686-default-linuxapp-icc | 2 +
> config/defconfig_x86_64-default-linuxapp-gcc | 2 +
> config/defconfig_x86_64-default-linuxapp-icc | 2 +
> lib/librte_eal/bsdapp/eal/eal_pci.c | 2 +-
> lib/librte_eal/common/Makefile | 1 +
> lib/librte_eal/common/eal_common_pci.c | 17 +-
> lib/librte_eal/common/include/rte_pci.h | 7 +-
> .../common/include/rte_pci_dev_feature_defs.h | 46 ++
> .../common/include/rte_pci_dev_features.h | 42 ++
> lib/librte_eal/linuxapp/Makefile | 2 +
> lib/librte_eal/linuxapp/eal/Makefile | 6 +-
> lib/librte_eal/linuxapp/eal/eal.c | 35 +
> lib/librte_eal/linuxapp/eal/eal_interrupts.c | 203 +++++-
> lib/librte_eal/linuxapp/eal/eal_memory.c | 8 +-
> lib/librte_eal/linuxapp/eal/eal_pci.c | 480 ++------------
> lib/librte_eal/linuxapp/eal/eal_pci_uio.c | 416 ++++++++++++
> lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 709 +++++++++++++++++++++
> lib/librte_eal/linuxapp/eal/eal_pci_vfio_socket.c | 367 +++++++++++
> .../linuxapp/eal/include/eal_internal_cfg.h | 3 +
> lib/librte_eal/linuxapp/eal/include/eal_pci_init.h | 120 ++++
> lib/librte_eal/linuxapp/eal/include/eal_vfio.h | 55 ++
> .../linuxapp/eal/include/exec-env/rte_interrupts.h | 7 +-
> lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 70 +-
> 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_vmxnet3/vmxnet3_ethdev.c | 2 +-
> tools/dpdk_nic_bind.py | 500 +++++++++++++++
> tools/igb_uio_bind.py | 485 --------------
> tools/setup.sh | 168 ++++-
> 33 files changed, 2797 insertions(+), 1000 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 lib/librte_eal/linuxapp/eal/eal_pci_vfio_socket.c
> create mode 100644 lib/librte_eal/linuxapp/eal/include/eal_pci_init.h
> create mode 100644 lib/librte_eal/linuxapp/eal/include/eal_vfio.h
> create mode 100755 tools/dpdk_nic_bind.py
> delete mode 100755 tools/igb_uio_bind.py
>
Will this work in guest? or only on bare metal?
More information about the dev
mailing list