[dpdk-dev] [PATCH v3 0/3] enable uio_pci_generic support

Thomas Monjalon thomas.monjalon at 6wind.com
Fri Feb 20 23:35:35 CET 2015


> > v3 changes
> > - made processing of uio devices identical, irrespective of igb_uio or uio_pci_generic
> > - removed storage of kernel driver name from dev node as now unneeded.
> >
> > v2 changes:
> > - Change variable name of kernel driver with precise comment
> > - Fix a union definition error in v1 patchset
> > - Move redefined macro IORESOURCE_MEM to rte_pci.h with comment
> >
> > Linux kernel provides UIO as well as VFIO mechanism to support writing user
> > space device driver. Comparing to UIO which is available since 2.6.32 kernel,
> > the VFIO is introduced into kernel since version 3.6.0 with better interrupt
> > and memory protection (build on top of Intel VT-d technology) supports.
> > Basically, UIO and VFIO do two common things below:
> > 1) Map PCIe device's I/O memory space to user space driver
> > 2) Support device interrupt notification mechanism that notifies user space
> >     driver/application when a device interrupt triggers.
> >
> > To run an DPDK application and make use of VFIO, two in_kernel modules
> > vfio and vfio-pci module must be loaded. To use UIO, a DPDK kernel
> > module igb_uio, which was there since DPDK is invented, must be loaded to
> > attach to in_kernel uio module. As an solution to deprecate igb_uio,
> > this patch serials leverage the uio_pci_generic in_kernel module to support
> > DPDK user space PMD in a generic fashion (similar to how VFIO works), to
> > remove user space DPDK dependency on GPL code igb_uio in kernel.
> >
> > Example to bind Network Ports to uio_pci_generic:
> >             modprobe uio
> >             modprobe uio_pci_generic
> >             /* to bind device 08:00.0, to the uio_pci_generic driver */
> >             ./tools/dpdk_nic_bind.py -b uio_pci_generic 08:00.0
> >
> > Note: this patch set does not remove igb_uio support due to igb_uio supports
> > creating maximum number of SR-IOV VFs (Virtual Functions) by using max_vfs
> > kernel parameter on older kernels (kernel 3.7.x and below).
> > Specifically, igb_uio explicitly calls pci_enable_sriov() to create VFs, while
> > it is not invoked in either uio or uio_pci_generic kernel modules. On kernel 3.8.x
> > and above, user can use the standard sysfs to enable VFs. For examples:
> >
> > #echo $num_vf_enabled > /sys/class/net/$dev/device/sriov_numvfs  // enable VFs
> > #echo 0 > /sys/class/net/$dev/device/sriov_numvfs                // disable VFs
> >
> >
> > Zhou Danny (3):
> >    eal: enable uio_pci_generic support
> >    eal: add interrupt enable/disable routines for uio_pci_generic
> >    tools: enable binding NIC device to uio_pci_generic
> 
> Series Acked-by: Declan Doherty <declan.doherty at intel.com>

Applied, thanks


More information about the dev mailing list