[dpdk-dev] [PATCH 00/16] [RFC] [VFIO] Add VFIO support to DPDK

Chris Wright chrisw at redhat.com
Thu May 1 19:00:15 CEST 2014


* Stephen Hemminger (stephen at networkplumber.org) wrote:
> 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?

hmm, vfio requires iommu support, however virtio pmd?


More information about the dev mailing list