doc: move UIO section to the end of Linux drivers page

To further de-emphasise UIO over the alternatives, we can move the UIO
section of the drivers page to the end of the document, giving more
prominence to VFIO and bifurcated drivers.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
This commit is contained in:
Bruce Richardson 2022-03-16 13:45:49 +00:00 committed by Thomas Monjalon
parent 79603b8c7c
commit e077832ee0

View File

@ -250,58 +250,6 @@ After that, VFIO can be used with hardware devices as usual.
to keep the degree of device access and programming that VFIO has,
in situations where IOMMU is not available.
.. _uio:
UIO
---
.. warning::
Using UIO drivers is inherently unsafe due to this method lacking IOMMU protection,
and can only be done by root user.
In situations where using VFIO is not an option, there are alternative drivers one can use.
In many cases, the standard ``uio_pci_generic`` module included in the Linux kernel
can be used as a substitute for VFIO. This module can be loaded using the command:
.. code-block:: console
sudo modprobe uio_pci_generic
.. note::
``uio_pci_generic`` module doesn't support the creation of virtual functions.
As an alternative to the ``uio_pci_generic``, there is the ``igb_uio`` module
which can be found in the repository `dpdk-kmods <http://git.dpdk.org/dpdk-kmods>`_.
It can be loaded as shown below:
.. code-block:: console
sudo modprobe uio
sudo insmod igb_uio.ko
.. note::
For some devices which lack support for legacy interrupts, e.g. virtual function
(VF) devices, the ``igb_uio`` module may be needed in place of ``uio_pci_generic``.
.. note::
If UEFI secure boot is enabled,
the Linux kernel may disallow the use of UIO on the system.
Therefore, devices for use by DPDK should be bound to the ``vfio-pci`` kernel module
rather than any UIO-based module.
For more details see :ref:`linux_gsg_binding_kernel` below.
.. note::
If the devices used for DPDK are bound to a UIO-based kernel module,
please make sure that the IOMMU is disabled or is in passthrough mode.
One can add ``intel_iommu=off`` or ``amd_iommu=off`` or ``intel_iommu=on iommu=pt``
in GRUB command line on x86_64 systems,
or add ``iommu.passthrough=1`` on aarch64 systems.
.. _bifurcated_driver:
Bifurcated Driver
@ -372,3 +320,55 @@ This can be checked in the boot configuration of your system:
If ``CONFIG_VFIO_NOIOMMU`` is not enabled in the kernel configuration,
VFIO driver will not support the no-IOMMU mode,
and other alternatives (such as UIO drivers) will have to be used.
.. _uio:
UIO
---
.. warning::
Using UIO drivers is inherently unsafe due to this method lacking IOMMU protection,
and can only be done by root user.
In situations where using VFIO is not an option, there are alternative drivers one can use.
In many cases, the standard ``uio_pci_generic`` module included in the Linux kernel
can be used as a substitute for VFIO. This module can be loaded using the command:
.. code-block:: console
sudo modprobe uio_pci_generic
.. note::
``uio_pci_generic`` module doesn't support the creation of virtual functions.
As an alternative to the ``uio_pci_generic``, there is the ``igb_uio`` module
which can be found in the repository `dpdk-kmods <http://git.dpdk.org/dpdk-kmods>`_.
It can be loaded as shown below:
.. code-block:: console
sudo modprobe uio
sudo insmod igb_uio.ko
.. note::
For some devices which lack support for legacy interrupts, e.g. virtual function
(VF) devices, the ``igb_uio`` module may be needed in place of ``uio_pci_generic``.
.. note::
If UEFI secure boot is enabled,
the Linux kernel may disallow the use of UIO on the system.
Therefore, devices for use by DPDK should be bound to the ``vfio-pci`` kernel module
rather than any UIO-based module.
For more details see :ref:`linux_gsg_binding_kernel` below.
.. note::
If the devices used for DPDK are bound to a UIO-based kernel module,
please make sure that the IOMMU is disabled or is in passthrough mode.
One can add ``intel_iommu=off`` or ``amd_iommu=off`` or ``intel_iommu=on iommu=pt``
in GRUB command line on x86_64 systems,
or add ``iommu.passthrough=1`` on aarch64 systems.