[dpdk-dev] [PATCH v10 0/9] Infrastructure to detect iova mapping on the bus
santosh.shukla at caviumnetworks.com
Fri Oct 6 13:03:37 CEST 2017
- Added doxygen specific comment for iova mapping mode in patch [2/09]
(Suggested by Olivier)
- Added pci_one_ for pci_device_has_iova_va and other api for patch [3/9]
(Suggested by Olivier)
- Added More verbose description in patch summary for patch [6/09]
(Suggested by Olivier)
- Added Tested-By: to series.
- Includes minor changes related to linuxapp api stub in [02/09]
(Suggested by Anatoly)
- Series rebased on tip commit : aee62e90
Includes minor review changes per v7 review comment from Anatoly.
Patches rebased on Tip commit:3d2e0448eb.
Includes no major change, minor change detailing:
- patch sqashing (Aaron suggestion)
- added run_once for device_parse() and bus_scan() in eal init
- Moved rte_eal_device_parse() up in eal initialization order.
- Patches rebased on top of version: 17.11-rc0
For v6 info refer .
Sending v5 series rebased on top of version: 17.11-rc0.
Introducing RTE_PCI_DRV_IOVA_AS_VA flag for autodetection of iova va
If a PCI driver demand for IOVA as VA scheme then the driver can add
it in the
PCI driver registration function.
Algorithm to select IOVA as VA for PCI bus case:
0. If no device bound then return with RTE_IOVA_DC mapping mode,
else goto 1).
1. Look for device attached to vfio kdrv and has .drv_flag set
2. Look for any device attached to UIO class of driver.
3. Check for vfio-noiommu mode enabled.
If 2) & 3) is false and 1) is true then select
mapping scheme as RTE_IOVA_VA. Otherwise use default
mapping scheme (RTE_IOVA_PA).
That way, Bus can truly autodetect the iova mapping mode for
a device Or a set of the device.
v9 --> v10:
- Refer top description.
v8 --> v9:
- Added Tested-by: signature of Hemant.
- Added linuxapp stub api definition in [02/09] (Suggested by Amatoly)
v7 --> v8:
- Replace 0 / 1 with true/false boolean values (Suggested by Anatoly).
v6 --> v7:
- Patches squashed per v6.
- Added run_once in eal per v6.
- Moved rte_eal_device_parse() up in eal init oder.
v5 --> v6:
- Added api info in eal's versiom.map (release DPDK_v17.11).
v4 --> v5:
- Change DPDK_17.08 to DPDK_17.11 in _version.map.
- Reworded bus api description (suggested by Hemant).
- Added reviewed-by from Maxime in v5.
- Added acked-by from Hemant for pci and bus patches.
v3 --> v4:
- Re-introduced RTE_IOVA_DEC mode (Suggested by Hemant ).
- Renamed flag to RTE_PCI_DRV_IOVA_AS_VA (Suggested by Maxime).
- Reworded WARNING message(suggested by Maxime).
- Created a separate patch for rte_pci_get_iommu_class (suggested by
- Added VFIO_PRESENT ifdef build fix.
v2 --> v3:
- Removed rte_mempool_virt2phy (suggested by Olivier )
v1 --> v2:
- Removed override eal option i.e. (--iova-mode=<>) Because we have
truly autodetect the iova mode.
- Introduced RTE_PCI_DRV_NEED_IOVA_VA drv_flag (Suggested by Maxime ).
- Using NEED_IOVA_VA drv_flag in autodetection logic.
- Removed Linux version check macro in vfio code, As per Maxime feedback.
- Moved rte_pci_match API from local to global.
1) 1nd: declare rte_pci_match api in pci header. Required for
follow up patches.
2) 2nd - 3rd - 4th : autodetection mapping infrastructure for
3) 5th: iova mode helper API.
4) 6th: Infra to detect iova mode.
5) 7th: make vfio mapping iova aware.
6) 8th - 9th : Check for IOVA_VA mode in below APIs
- Tested for x86/XL710 40G NIC card for both modes (iova_va/pa).
- Tested for arm64/thunderx vNIC Integrated NIC for both modes
- Tested for arm64/Octeontx integrated NICs for only
Iova_va mode(It supports only one mode.)
- Ran standalone tests like mempool_autotest, mbuf_autotest.
- Verified for Doxygen.
For v1, Refer .
For v2, Refer .
For v3, Refer .
For v4, refer .
for v6, refer .
Santosh Shukla (9):
eal/pci: export match function
eal/pci: get iommu class
linuxapp/eal_pci: get iommu class
bus: get iommu class
eal: introduce helper API for iova mode
eal: auto detect iova mode
linuxapp/eal_vfio: honor iova mode before mapping
linuxapp/eal_memory: honor iova mode in virt2phy
eal/rte_malloc: honor iova mode in virt2phy
lib/librte_eal/bsdapp/eal/eal.c | 33 ++++++---
lib/librte_eal/bsdapp/eal/eal_pci.c | 10 +++
lib/librte_eal/bsdapp/eal/rte_eal_version.map | 10 +++
lib/librte_eal/common/eal_common_bus.c | 23 ++++++
lib/librte_eal/common/eal_common_pci.c | 11 +--
lib/librte_eal/common/include/rte_bus.h | 40 +++++++++++
lib/librte_eal/common/include/rte_eal.h | 12 ++++
lib/librte_eal/common/include/rte_pci.h | 28 ++++++++
lib/librte_eal/common/rte_malloc.c | 9 ++-
lib/librte_eal/linuxapp/eal/eal.c | 33 ++++++---
lib/librte_eal/linuxapp/eal/eal_memory.c | 3 +
lib/librte_eal/linuxapp/eal/eal_pci.c | 96 +++++++++++++++++++++++++
lib/librte_eal/linuxapp/eal/eal_vfio.c | 29 +++++++-
lib/librte_eal/linuxapp/eal/eal_vfio.h | 4 ++
lib/librte_eal/linuxapp/eal/rte_eal_version.map | 10 +++
15 files changed, 317 insertions(+), 34 deletions(-)
More information about the dev