[dpdk-dev] eal: add option to force IOVA as PA mode

Message ID 20171130025647.4199-1-3chas3@gmail.com (mailing list archive)
State Rejected, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Chas Williams Nov. 30, 2017, 2:56 a.m. UTC
  From: Chas Williams <chas3@att.com>

The IOMMU in some machines report that they can only support
limited widths.  IOVA virtual addresses may exceed this width
making the use of IOVA virtual addresses difficult.  The option
CONFIG_RTE_LIBRTE_USE_PHYS_IOVA can used to force IOVA physical
address usage.

Signed-off-by: Chas Williams <chas3@att.com>
---
 config/common_base                | 5 +++++
 lib/librte_eal/bsdapp/eal/eal.c   | 4 ++++
 lib/librte_eal/linuxapp/eal/eal.c | 4 ++++
 3 files changed, 13 insertions(+)
  

Patch

diff --git a/config/common_base b/config/common_base
index e74febe..06b3ded 100644
--- a/config/common_base
+++ b/config/common_base
@@ -820,3 +820,8 @@  CONFIG_RTE_APP_CRYPTO_PERF=y
 # Compile the eventdev application
 #
 CONFIG_RTE_APP_EVENTDEV=y
+
+#
+# Force IOVA physical addresses in VFIO
+#
+CONFIG_RTE_LIBRTE_USE_PHYS_IOVA=n
diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c
index 369a682..b396285 100644
--- a/lib/librte_eal/bsdapp/eal/eal.c
+++ b/lib/librte_eal/bsdapp/eal/eal.c
@@ -569,8 +569,12 @@  rte_eal_init(int argc, char **argv)
 		return -1;
 	}
 
+#ifdef RTE_LIBRTE_USE_PHYS_IOVA
+	rte_eal_get_configuration()->iova_mode = RTE_IOVA_PA;
+#else
 	/* autodetect the iova mapping mode (default is iova_pa) */
 	rte_eal_get_configuration()->iova_mode = rte_bus_get_iommu_class();
+#endif
 
 	if (internal_config.no_hugetlbfs == 0 &&
 			internal_config.process_type != RTE_PROC_SECONDARY &&
diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 229eec9..13b02fd 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -804,8 +804,12 @@  rte_eal_init(int argc, char **argv)
 		return -1;
 	}
 
+#ifdef RTE_LIBRTE_USE_PHYS_IOVA
+	rte_eal_get_configuration()->iova_mode = RTE_IOVA_PA;
+#else
 	/* autodetect the iova mapping mode (default is iova_pa) */
 	rte_eal_get_configuration()->iova_mode = rte_bus_get_iommu_class();
+#endif
 
 	/* Workaround for KNI which requires physical address to work */
 	if (rte_eal_get_configuration()->iova_mode == RTE_IOVA_VA &&