Commit 712d8f20 authored by Zhen Lei's avatar Zhen Lei Committed by Joerg Roedel
Browse files

iommu: Enhance IOMMU default DMA mode build options



First, add build options IOMMU_DEFAULT_{LAZY|STRICT}, so that we have the
opportunity to set {lazy|strict} mode as default at build time. Then put
the two config options in an choice, as they are mutually exclusive.

[jpg: Make choice between strict and lazy only (and not passthrough)]

Signed-off-by: default avatarZhen Lei <thunder.leizhen@huawei.com>
Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
Reviewed-by: default avatarRobin Murphy <robin.murphy@arm.com>
Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/1626088340-5838-4-git-send-email-john.garry@huawei.com


Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent d8577d2e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2042,9 +2042,10 @@
			  throughput at the cost of reduced device isolation.
			  Will fall back to strict mode if not supported by
			  the relevant IOMMU driver.
			1 - Strict mode (default).
			1 - Strict mode.
			  DMA unmap operations invalidate IOMMU hardware TLBs
			  synchronously.
			unset - Use value of CONFIG_IOMMU_DEFAULT_{LAZY,STRICT}.
			Note: on x86, the default behaviour depends on the
			equivalent driver-specific parameters, but a strict
			mode explicitly specified by either method takes
+40 −0
Original line number Diff line number Diff line
@@ -90,6 +90,46 @@ config IOMMU_DEFAULT_PASSTHROUGH

	  If unsure, say N here.

choice
	prompt "IOMMU default DMA IOTLB invalidation mode"
	depends on IOMMU_DMA

	default IOMMU_DEFAULT_STRICT
	help
	  This option allows an IOMMU DMA IOTLB invalidation mode to be
	  chosen at build time, to override the default mode of each ARCH,
	  removing the need to pass in kernel parameters through command line.
	  It is still possible to provide common boot params to override this
	  config.

	  If unsure, keep the default.

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.

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.

	  The isolation provided in this mode is not as secure as STRICT mode,
	  such that a vulnerable time window may be created between the DMA
	  unmap and the mappings cached in the IOMMU IOTLB or device TLB
	  finally being invalidated, where the device could still access the
	  memory which has already been unmapped by the device driver.
	  However this mode may provide better performance in high throughput
	  scenarios, and is still considerably more secure than passthrough
	  mode or no IOMMU.

endchoice

config OF_IOMMU
	def_bool y
	depends on OF && IOMMU_API
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ static struct kset *iommu_group_kset;
static DEFINE_IDA(iommu_group_ida);

static unsigned int iommu_def_domain_type __read_mostly;
static bool iommu_dma_strict __read_mostly = true;
static bool iommu_dma_strict __read_mostly = IS_ENABLED(CONFIG_IOMMU_DEFAULT_STRICT);
static u32 iommu_cmd_line __read_mostly;

struct iommu_group {