[dpdk-dev] [PATCH v2 00/12] Infrastructure to detect iova mapping on the bus

Santosh Shukla santosh.shukla at caviumnetworks.com
Mon Jul 10 13:42:23 CEST 2017


v2:
Based on the discussion on the thread [2].
Introducing RTE_PCI_DRV_NEED_IOVA_VA flag for autodetection of iova va mapping. 
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. Look for device attached to vfio kdrv and has .drv_flag set
    to RTE_PCI_DRV_NEED_IOVA_VA.
    1. Look for any device attached to UIO class of driver.
    2. Check for vfio-noiommu mode enabled.

    If 1) & 2) is false and 0) is true then select
    mapping scheme as iova=va. Otherwise use default
    mapping scheme (iova_pa).

That way, Bus can truly autodetect the iova mapping mode for
a device Or a set of the device.

v1 --> v2 change history:
- Removed override eal option i.e. (--iova-mode=<>) Because we have means to
  truly autodetect the iova mode.
- Introduced RTE_PCI_DRV_NEED_IOVA_VA drv_flag.
- 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.


Patch Summary:
0) 1st: Introducing a new flag in rte_pci_drv
1) 2nd: declare rte_pci_match api in pci header. Required for autodetection in
follow up patches.
2) 3nd - 4th: autodetection mapping infrastructure for Linux/bsdapp.
3) 5th: Introduces global bus API named rte_bus_get_iommu_class.
4) 6th: iova mode helper API.
5) 7th - 8th: Calls rte_bus_get_iommu_class API for Linux/bsdapp and returns
their iova mode.
6) 9th: Check iova mode and accordingly map vfio.dma_map to _pa or _va.
7) 10th - 12th: Check for IOVA_VA mode in below APIs
        - rte_mem_virt2phy
        - rte_mempool_virt2phy
        - rte_malloc_virt2phy

Test History:
- 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.

Work History:
For v1, Refer [1].

Checkpatch result:
- No error/warning noticed.

[1] https://www.mail-archive.com/dev@dpdk.org/msg67438.html
[2] https://www.mail-archive.com/dev@dpdk.org/msg70279.html


Santosh Shukla (12):
  eal/pci: introduce PCI driver iova as va flag
  eal/pci: export match function
  bsdapp/eal_pci: get iommu class
  linuxapp/eal_pci: get iommu class
  bus: get iommu class
  eal: introduce iova mode helper api
  linuxapp/eal: auto detect iova mode
  bsdapp/eal: auto detect iova mapping mode
  linuxapp/eal_vfio: honor iova mode before mapping
  linuxapp/eal_memory: honor iova mode in virt2phy
  mempool: honor iova mode in virt2phy
  eal/rte_malloc: honor iova mode in virt2phy

 lib/librte_eal/bsdapp/eal/eal.c                 | 22 ++++++---
 lib/librte_eal/bsdapp/eal/eal_pci.c             | 10 ++++
 lib/librte_eal/bsdapp/eal/rte_eal_version.map   |  4 ++
 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         | 31 ++++++++++++
 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               | 22 ++++++---
 lib/librte_eal/linuxapp/eal/eal_memory.c        |  3 ++
 lib/librte_eal/linuxapp/eal/eal_pci.c           | 66 +++++++++++++++++++++++++
 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 |  4 ++
 lib/librte_mempool/rte_mempool.h                | 10 +++-
 16 files changed, 262 insertions(+), 26 deletions(-)

-- 
2.13.0



More information about the dev mailing list