On 30/05/2019 04:48, Zhen Lei wrote:
First, add build option IOMMU_DEFAULT_{LAZY|STRICT}, so that we have the
opportunity to set {lazy|strict} mode as default at build time. Then put
the three config options in an choice, make people can only choose one of
the three at a time.


Since this was not picked up, but modulo (somtimes same) comments below:

Reviewed-by: John Garry <john.ga...@huawei.com>

Signed-off-by: Zhen Lei <thunder.leiz...@huawei.com>
---
 drivers/iommu/Kconfig | 42 +++++++++++++++++++++++++++++++++++-------
 drivers/iommu/iommu.c |  3 ++-
 2 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
index 83664db5221df02..d6a1a45f80ffbf5 100644
--- a/drivers/iommu/Kconfig
+++ b/drivers/iommu/Kconfig
@@ -75,17 +75,45 @@ config IOMMU_DEBUGFS
          debug/iommu directory, and then populate a subdirectory with
          entries as required.

-config IOMMU_DEFAULT_PASSTHROUGH
-       bool "IOMMU passthrough by default"
+choice
+       prompt "IOMMU default DMA mode"
        depends on IOMMU_API
-        help
-         Enable passthrough by default, removing the need to pass in
-         iommu.passthrough=on or iommu=pt through command line. If this
-         is enabled, you can still disable with iommu.passthrough=off
-         or iommu=nopt depending on the architecture.
+       default IOMMU_DEFAULT_STRICT
+       help
+         This option allows IOMMU DMA mode to be chose at build time, to

As before:
/s/chose/chosen/, /s/allows IOMMU/allows an IOMMU/

+         override the default DMA mode of each ARCHs, removing the need to

Again, as before:
ARCHs should be singular

+         pass in kernel parameters through command line. You can still use
+         ARCHs specific boot options to override this option again.
+
+config IOMMU_DEFAULT_PASSTHROUGH
+       bool "passthrough"
+       help
+         In this mode, the DMA access through IOMMU without any addresses
+         translation. That means, the wrong or illegal DMA access can not
+         be caught, no error information will be reported.

          If unsure, say N here.

+config IOMMU_DEFAULT_LAZY
+       bool "lazy"
+       help
+         Support lazy mode, where for every IOMMU DMA unmap operation, the
+         flush operation of IOTLB and the free operation of IOVA are deferred.
+         They are only guaranteed to be done before the related IOVA will be
+         reused.

why no advisory on how to set if unsure?

+
+config IOMMU_DEFAULT_STRICT
+       bool "strict"
+       help
+         For every IOMMU DMA unmap operation, the flush operation of IOTLB and
+         the free operation of IOVA are guaranteed to be done in the unmap
+         function.
+
+         This mode is safer than the two above, but it maybe slower in some
+         high performace scenarios.

and here?

+
+endchoice
+
 config OF_IOMMU
        def_bool y
        depends on OF && IOMMU_API
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 67ee6623f9b2a4d..56bce221285b15f 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -43,7 +43,8 @@
 #else
 static unsigned int iommu_def_domain_type = IOMMU_DOMAIN_DMA;
 #endif
-static bool iommu_dma_strict __read_mostly = true;
+static bool iommu_dma_strict __read_mostly =
+                       IS_ENABLED(CONFIG_IOMMU_DEFAULT_STRICT);

 struct iommu_group {
        struct kobject kobj;



Reply via email to