-.. BSD LICENSE
- Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of Intel Corporation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
+.. SPDX-License-Identifier: BSD-3-Clause
+ Copyright(c) 2010-2014 Intel Corporation.
Known Issues and Limitations in Legacy Releases
===============================================
**Driver/Module**:
Environment Abstraction Layer (EAL).
+
+
+I40e VF may not receive packets in the promiscuous mode
+-------------------------------------------------------
+
+**Description**:
+ Promiscuous mode is not supported by the DPDK i40e VF driver when using the
+ i40e Linux kernel driver as host driver.
+
+**Implication**:
+ The i40e VF does not receive packets when the destination MAC address is unknown.
+
+**Resolution/Workaround**:
+ Use a explicit destination MAC address that matches the VF.
+
+**Affected Environment/Platform**:
+ All.
+
+**Driver/Module**:
+ Poll Mode Driver (PMD).
+
+
+uio pci generic module bind failed in X710/XL710/XXV710
+-------------------------------------------------------
+
+**Description**:
+ The ``uio_pci_generic`` module is not supported by XL710, since the errata of XL710
+ states that the Interrupt Status bit is not implemented. The errata is the item #71
+ from the `xl710 controller spec
+ <http://www.intel.com/content/www/us/en/embedded/products/networking/xl710-10-40-controller-spec-update.html>`_.
+ The hw limitation is the same as other X710/XXV710 NICs.
+
+**Implication**:
+ When use ``--bind=uio_pci_generic``, the ``uio_pci_generic`` module probes device and check the Interrupt
+ Status bit. Since it is not supported by X710/XL710/XXV710, it return a *failed* value. The statement
+ that these products don’t support INTx masking, is indicated in the related `linux kernel commit
+ <https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/drivers/pci/quirks.c?id=8bcf4525c5d43306c5fd07e132bc8650e3491aec>`_.
+
+**Resolution/Workaround**:
+ Do not bind the ``uio_pci_generic`` module in X710/XL710/XXV710 NICs.
+
+**Affected Environment/Platform**:
+ All.
+
+**Driver/Module**:
+ Poll Mode Driver (PMD).
+
+
+virtio tx_burst() function cannot do TSO on shared packets
+----------------------------------------------------------
+
+**Description**:
+ The standard TX function of virtio driver does not manage shared
+ packets properly when doing TSO. These packets should be read-only
+ but the driver modifies them.
+
+ When doing TSO, the virtio standard expects that the L4 checksum is
+ set to the pseudo header checksum in the packet data, which is
+ different than the DPDK API. The driver patches the L4 checksum to
+ conform to the virtio standard, but this solution is invalid when
+ dealing with shared packets (clones), because the packet data should
+ not be modified.
+
+**Implication**:
+ In this situation, the shared data will be modified by the driver,
+ potentially causing race conditions with the other users of the mbuf
+ data.
+
+**Resolution/Workaround**:
+ The workaround in the application is to ensure that the network
+ headers in the packet data are not shared.
+
+**Affected Environment/Platform**:
+ Virtual machines running a virtio driver.
+
+**Driver/Module**:
+ Poll Mode Driver (PMD).
+
+
+igb uio legacy mode can not be used in X710/XL710/XXV710
+--------------------------------------------------------
+
+**Description**:
+ X710/XL710/XXV710 NICs lack support for indicating INTx is asserted via the interrupt
+ bit in the PCI status register. Linux deleted them from INTx support table. The related
+ `commit <https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/drivers/pci/quirks.c?id=8bcf4525c5d43306c5fd07e132bc8650e3491aec>`_.
+
+**Implication**:
+ When insmod ``igb_uio`` with ``intr_mode=legacy`` and test link status interrupt. Since
+ INTx interrupt is not supported by X710/XL710/XXV710, it will cause Input/Output error
+ when reading file descriptor.
+
+**Resolution/Workaround**:
+ Do not bind ``igb_uio`` with legacy mode in X710/XL710/XXV710 NICs, or do not use kernel
+ version >4.7 when you bind ``igb_uio`` with legacy mode.
+
+**Affected Environment/Platform**:
+ ALL.
+
+**Driver/Module**:
+ Poll Mode Driver (PMD).
+
+
+igb_uio can not be used when running l3fwd-power
+------------------------------------------------
+
+**Description**:
+ Link Status Change(LSC) interrupt and packet receiving interrupt are all enabled in l3fwd-power
+ APP. Because of UIO only support one interrupt, so these two kinds of interrupt need to share
+ one, and the receiving interrupt have the higher priority, so can't get the right link status.
+
+**Implication**:
+ When insmod ``igb_uio`` and running l3fwd-power APP, link status getting doesn't work properly.
+
+**Resolution/Workaround**:
+ Use vfio-pci when LSC and packet receiving interrupt enabled.
+
+**Affected Environment/Platform**:
+ ALL.
+
+**Driver/Module**:
+ ``igb_uio`` module.
+
+
+Linux kernel 4.10.0 iommu attribute read error
+----------------------------------------------
+
+**Description**:
+ When VT-d is enabled (``iommu=pt intel_iommu=on``), reading IOMMU attributes from
+ /sys/devices/virtual/iommu/dmarXXX/intel-iommu/cap on Linux kernel 4.10.0 error.
+ This bug is fixed in `Linux commit a7fdb6e648fb
+ <https://patchwork.kernel.org/patch/9595727/>`_,
+ This bug is introduced in `Linux commit 39ab9555c241
+ <https://patchwork.kernel.org/patch/9554403/>`_,
+
+**Implication**:
+ When binding devices to VFIO and attempting to run testpmd application,
+ testpmd (and other DPDK applications) will not initialize.
+
+**Resolution/Workaround**:
+ Use other linux kernel version. It only happens in linux kernel 4.10.0.
+
+**Affected Environment/Platform**:
+ ALL OS of linux kernel 4.10.0.
+
+**Driver/Module**:
+ ``vfio-pci`` module.
+
+Netvsc driver and application restart
+-------------------------------------
+
+**Description**:
+ The Linux kernel uio_hv_generic driver does not completely shutdown and clean up
+ resources properly if application using Netvsc PMD exits.
+
+**Implication**:
+ When application using Netvsc PMD is restarted it can not complete initialization
+ handshake sequence with the host.
+
+**Resolution/Workaround**:
+ Either reboot the guest or remove and reinsert the hv_uio_generic module.
+
+**Affected Environment/Platform**:
+ Linux Hyper-V.
+
+**Driver/Module**:
+ ``uio_hv_generic`` module.
+
+
+PHY link up fails when rebinding i40e NICs to kernel driver
+-----------------------------------------------------------
+
+**Description**:
+ Some kernel drivers are not able to handle the link status correctly
+ after DPDK application sets the PHY to link down.
+
+**Implication**:
+ The link status can't be set to "up" after the NIC is rebound to the
+ kernel driver. Before a DPDK application quits it will invoke the
+ function ``i40e_dev_stop()`` which will sets the PHY to link down. Some
+ kernel drivers may not be able to handle the link status correctly after
+ it retakes control of the device. This is a known PHY link configuration
+ issue in the i40e kernel driver. The fix has been addressed in the 2.7.4 rc
+ version. So if the i40e kernel driver is < 2.7.4 and doesn't have the
+ fix backported it will encounter this issue.
+
+**Resolution/Workaround**:
+ First try to remove and reinsert the i40e kernel driver. If that fails
+ reboot the system.
+
+**Affected Environment/Platform**:
+ All.
+
+**Driver/Module**:
+ Poll Mode Driver (PMD).
+
+
+Restricted vdev ethdev operations supported in secondary process
+----------------------------------------------------------------
+**Description**
+ In current virtual device sharing model, Ethernet device data structure will be
+ shared between primary and secondary process. Only those Ethernet device operations
+ which based on it are workable in secondary process.
+
+**Implication**
+ Some Ethernet device operations like device start/stop will be failed on virtual
+ device in secondary process.
+
+**Affected Environment/Platform**:
+ ALL.
+
+**Driver/Module**:
+ Virtual Device Poll Mode Driver (PMD).
+
+
+Kernel crash when hot-unplug igb_uio device while DPDK application is running
+-----------------------------------------------------------------------------
+
+**Description**:
+ When device has been bound to igb_uio driver and application is running,
+ hot-unplugging the device may cause kernel crash.
+
+**Reason**:
+ When device is hot-unplugged, igb_uio driver will be removed which will destroy UIO resources.
+ Later trying to access any uio resource will cause kernel crash.
+
+**Resolution/Workaround**:
+ If using DPDK for PCI HW hot-unplug, prefer to bind device with VFIO instead of IGB_UIO.
+
+**Affected Environment/Platform**:
+ ALL.
+
+**Driver/Module**:
+ ``igb_uio`` module.
+
+
+AVX-512 support disabled
+------------------------
+
+**Description**:
+ ``AVX-512`` support has been disabled on some conditions.
+ This shouldn't be confused with ``CONFIG_RTE_ENABLE_AVX512`` config option which is already
+ disabled by default. This config option defines if ``AVX-512`` specific implementations of
+ some file to be used or not. What has been disabled is compiler feature to produce ``AVX-512``
+ instructions from any source code.
+
+ On DPDK v18.11 ``AVX-512`` is disabled for all ``GCC`` builds which reported to cause a performance
+ drop.
+
+ On DPDK v19.02 ``AVX-512`` disable scope is reduced to ``GCC`` and ``binutils version 2.30`` based
+ on information accrued from the GCC community defect.
+
+**Reason**:
+ Generated ``AVX-512`` code cause crash:
+ https://bugs.dpdk.org/show_bug.cgi?id=97
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88096
+
+**Resolution/Workaround**:
+ * Update ``binutils`` to newer version than ``2.30``.
+
+ OR
+
+ * Use different compiler, like ``clang`` for this case.
+
+**Affected Environment/Platform**:
+ ``GCC`` and ``binutils version 2.30``.
+
+**Driver/Module**:
+ ALL.
+
+
+Unsuitable IOVA mode may be picked as the default
+-------------------------------------------------
+
+**Description**
+ Not all kernel drivers and not all devices support all IOVA modes. EAL will
+ attempt to pick a reasonable default based on a number of factors, but there
+ may be cases where the default may be unsuitable (for example, hotplugging
+ devices using `igb_uio` driver while having picked IOVA as VA mode on EAL
+ initialization).
+
+**Implication**
+ Some devices (hotplugged or otherwise) may not work due to incompatible IOVA
+ mode being automatically picked by EAL.
+
+**Resolution/Workaround**:
+ It is possible to force EAL to pick a particular IOVA mode by using the
+ `--iova-mode` command-line parameter. If conflicting requirements are present
+ (such as one device requiring IOVA as PA and one requiring IOVA as VA mode),
+ there is no workaround.
+
+**Affected Environment/Platform**:
+ Linux.
+
+**Driver/Module**:
+ ALL.