DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev]  [PATCH v1 1/1] bus/vdev: add get iommu class callback
@ 2019-10-16 14:29 vattunuru
  2019-10-16 14:42 ` Jerin Jacob
  2019-10-16 18:10 ` Ferruh Yigit
  0 siblings, 2 replies; 3+ messages in thread
From: vattunuru @ 2019-10-16 14:29 UTC (permalink / raw)
  To: dev; +Cc: jerinj, ferruh.yigit, stephen, thomas, Vamsi Attunuru

From: Vamsi Attunuru <vattunuru@marvell.com>

When DPDK application is run with vdevs, EAL decides
the iommu mode and accordingly application runs in
either of the modes.

For KNI kind of functionality with vdevs, since there
is no backed device structure in kernel, iommu_mode = PA
needs to be enforced during eal init.

Patch adds get_iommu_class callback in vdev bus driver
and returns iommu mode as PA when vdevs are used for
kni functionality, callback returns iommu mode as DC
in normal cases.

Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
---

Below support fixes the following patchset(add iova=va mode support in KNI)
which is currently failing to create KNI devices when vdevs are passed.
http://patches.dpdk.org/patch/57720/

 drivers/bus/vdev/vdev.c                 | 15 +++++++++++++++
 lib/librte_eal/common/eal_private.h     | 14 --------------
 lib/librte_eal/common/include/rte_eal.h | 14 ++++++++++++++
 3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
index a89ea23..ab07738 100644
--- a/drivers/bus/vdev/vdev.c
+++ b/drivers/bus/vdev/vdev.c
@@ -546,6 +546,20 @@ vdev_unplug(struct rte_device *dev)
 	return rte_vdev_uninit(dev->name);
 }
 
+static enum rte_iova_mode
+rte_vdev_get_iommu_class(void)
+{
+	struct rte_devargs *devargs = NULL;
+
+	if (rte_eal_check_module("rte_kni") == 1) {
+		RTE_EAL_DEVARGS_FOREACH("vdev", devargs) {
+			return RTE_IOVA_PA;
+		}
+	}
+
+	return RTE_IOVA_DC;
+}
+
 static struct rte_bus rte_vdev_bus = {
 	.scan = vdev_scan,
 	.probe = vdev_probe,
@@ -554,6 +568,7 @@ static struct rte_bus rte_vdev_bus = {
 	.unplug = vdev_unplug,
 	.parse = vdev_parse,
 	.dev_iterate = rte_vdev_dev_iterate,
+	.get_iommu_class = rte_vdev_get_iommu_class,
 };
 
 RTE_REGISTER_BUS(vdev, rte_vdev_bus);
diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h
index 798ede5..4207bdb 100644
--- a/lib/librte_eal/common/eal_private.h
+++ b/lib/librte_eal/common/eal_private.h
@@ -133,20 +133,6 @@ int rte_eal_intr_init(void);
 int rte_eal_alarm_init(void);
 
 /**
- * Function is to check if the kernel module(like, vfio, vfio_iommu_type1,
- * etc.) loaded.
- *
- * @param module_name
- *	The module's name which need to be checked
- *
- * @return
- *	-1 means some error happens(NULL pointer or open failure)
- *	0  means the module not loaded
- *	1  means the module loaded
- */
-int rte_eal_check_module(const char *module_name);
-
-/**
  * Get virtual area of specified size from the OS.
  *
  * This function is private to the EAL.
diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h
index b7cf912..4ea98e6 100644
--- a/lib/librte_eal/common/include/rte_eal.h
+++ b/lib/librte_eal/common/include/rte_eal.h
@@ -531,6 +531,20 @@ rte_eal_mbuf_user_pool_ops(void);
 const char *
 rte_eal_get_runtime_dir(void);
 
+/**
+ * Function is to check if the kernel module(like, vfio, vfio_iommu_type1,
+ * etc.) loaded.
+ *
+ * @param module_name
+ *	The module's name which need to be checked
+ *
+ * @return
+ *	-1 means some error happens(NULL pointer or open failure)
+ *	0  means the module not loaded
+ *	1  means the module loaded
+ */
+int rte_eal_check_module(const char *module_name);
+
 #ifdef __cplusplus
 }
 #endif
-- 
2.8.4


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-10-16 18:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-16 14:29 [dpdk-dev] [PATCH v1 1/1] bus/vdev: add get iommu class callback vattunuru
2019-10-16 14:42 ` Jerin Jacob
2019-10-16 18:10 ` Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).