linux/drivers/iommu
Joerg Roedel add02cfdc9 iommu: Introduce Interface for IOMMU TLB Flushing
With the current IOMMU-API the hardware TLBs have to be
flushed in every iommu_ops->unmap() call-back.

For unmapping large amounts of address space, like it
happens when a KVM domain with assigned devices is
destroyed, this causes thousands of unnecessary TLB flushes
in the IOMMU hardware because the unmap call-back runs for
every unmapped physical page.

With the TLB Flush Interface and the new iommu_unmap_fast()
function introduced here the need to clean the hardware TLBs
is removed from the unmapping code-path. Users of
iommu_unmap_fast() have to explicitly call the TLB-Flush
functions to sync the page-table changes to the hardware.

Three functions for TLB-Flushes are introduced:

	* iommu_flush_tlb_all() - Flushes all TLB entries
	                          associated with that
				  domain. TLBs entries are
				  flushed when this function
				  returns.

	* iommu_tlb_range_add() - This will add a given
				  range to the flush queue
				  for this domain.

	* iommu_tlb_sync() - Flushes all queued ranges from
			     the hardware TLBs. Returns when
			     the flush is finished.

The semantic of this interface is intentionally similar to
the iommu_gather_ops from the io-pgtable code.

Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
2017-08-30 18:07:13 +02:00
..
amd_iommu.c iommu/amd: Rename a few flush functions 2017-08-28 11:31:31 +02:00
amd_iommu_init.c iommu/amd: Remove amd_iommu_disabled check from amd_iommu_detect() 2017-06-22 12:54:21 +02:00
amd_iommu_proto.h x86/events, drivers/amd/iommu: Prepare for multiple IOMMUs support 2017-03-30 09:53:55 +02:00
amd_iommu_types.h iommu/amd: Suppress IO_PAGE_FAULTs in kdump kernel 2017-06-16 10:21:05 +02:00
amd_iommu_v2.c iommu/amd: Fix incorrect error handling in amd_iommu_bind_pasid() 2017-04-24 12:33:34 +02:00
arm-smmu-v3.c iommu/arm-smmu-v3: Add workaround for Cavium ThunderX2 erratum #126 2017-06-23 17:58:04 +01:00
arm-smmu.c iommu/arm-smmu: Remove io-pgtable spinlock 2017-06-23 17:58:01 +01:00
dma-iommu.c IOMMU Updates for Linux v4.13 2017-07-12 10:00:04 -07:00
dmar.c iommu/vt-d: Allow to flush more than 4GB of device TLBs 2017-08-15 18:23:53 +02:00
exynos-iommu.c Merge branches 'arm/exynos', 'arm/omap', 'arm/rockchip', 'arm/mediatek', 'arm/smmu', 'arm/core', 'x86/vt-d', 'x86/amd' and 'core' into next 2017-05-04 18:06:17 +02:00
fsl_pamu.c iommu: Convert to using %pOF instead of full_name 2017-07-26 13:01:37 +02:00
fsl_pamu.h iommu: Remove pci.h include from trace/events/iommu.h 2017-04-29 00:20:49 +02:00
fsl_pamu_domain.c iommu: Convert to using %pOF instead of full_name 2017-07-26 13:01:37 +02:00
fsl_pamu_domain.h iommu/fsl: Make use of domain_alloc and domain_free 2015-03-31 15:32:14 +02:00
intel-iommu.c iommu/vt-d: Make use of iova deferred flushing 2017-08-15 18:23:53 +02:00
intel-svm.c iommu/vt-d: Helper function to query if a pasid has any active users 2017-05-17 14:57:56 +02:00
intel_irq_remapping.c IOMMU Updates for Linux v4.13 2017-07-12 10:00:04 -07:00
io-pgtable-arm-v7s.c iommu/io-pgtable-arm: Use dma_wmb() instead of wmb() when publishing table 2017-06-23 17:58:02 +01:00
io-pgtable-arm.c iommu/io-pgtable-arm: Use dma_wmb() instead of wmb() when publishing table 2017-06-23 17:58:02 +01:00
io-pgtable.c iommu/io-pgtable: Fix a brace coding style issue. 2016-04-05 15:34:29 +02:00
io-pgtable.h iommu/io-pgtable: Introduce explicit coherency 2017-06-23 17:58:00 +01:00
iommu-sysfs.c iommu: Make iommu_device_link/unlink take a struct iommu_device 2017-02-10 13:44:57 +01:00
iommu-traces.c iommu: Add iommu_error class event to iommu trace 2013-09-25 11:07:04 +02:00
iommu.c iommu: Introduce Interface for IOMMU TLB Flushing 2017-08-30 18:07:13 +02:00
iova.c iommu/iova: Add flush timer 2017-08-15 18:23:52 +02:00
ipmmu-vmsa.c iommu/ipmmu-vmsa: Fix pgsize_bitmap semicolon typo 2017-05-17 15:21:58 +02:00
irq_remapping.c x86/cpufeature: Replace cpu_has_apic with boot_cpu_has() usage 2016-04-13 11:37:41 +02:00
irq_remapping.h iommu, x86: Setup Posted-Interrupts capability for Intel iommu 2015-06-12 11:33:52 +02:00
Kconfig Merge branches 'iommu/fixes', 'arm/rockchip', 'arm/renesas', 'arm/smmu', 'arm/core', 'x86/vt-d', 'x86/amd', 's390' and 'core' into next 2017-06-28 14:45:02 +02:00
Makefile Merge branches 'x86/amd', 'x86/vt-d', 'arm/exynos', 'arm/mediatek', 'arm/msm', 'arm/rockchip', 'arm/smmu' and 'core' into next 2016-07-26 16:02:37 +02:00
msm_iommu.c iommu/msm: Add iommu_group support 2017-08-10 00:03:50 +02:00
msm_iommu.h iommu/msm: Make use of iommu_device_register interface 2017-02-10 13:44:57 +01:00
msm_iommu_hw-8xxx.h iommu/msm: Move mach includes to iommu directory 2013-08-06 11:18:03 -07:00
mtk_iommu.c iommu: Remove iommu_register_instance interface 2017-02-10 14:54:37 +01:00
mtk_iommu.h iommu/mediatek: Make use of iommu_device_register interface 2017-02-10 13:44:57 +01:00
mtk_iommu_v1.c iommu/mediatek: Include linux/dma-mapping.h 2017-05-17 14:51:54 +02:00
of_iommu.c iommu/of: Fix of_iommu_configure() for disabled IOMMUs 2017-08-15 18:23:50 +02:00
omap-iommu-debug.c iommu/omap: Align code with open parenthesis 2016-04-05 17:53:20 +02:00
omap-iommu.c iommu/omap: Return ERR_PTR in device_group call-back 2017-06-28 13:29:45 +02:00
omap-iommu.h iommu/omap: Add iommu-group support 2017-04-20 16:33:59 +02:00
omap-iopgtable.h iommu/omap: Use BIT(x) macros in omap-iopgtable.h 2015-08-03 16:04:42 +02:00
rockchip-iommu.c iommu: Convert to using %pOF instead of full_name 2017-07-26 13:01:37 +02:00
s390-iommu.c iommu/s390: Use iommu_group_get_for_dev() in s390_iommu_add_device() 2017-06-28 12:29:00 +02:00
tegra-gart.c iommu/tegra-gart: Add iommu_group support 2017-08-10 00:03:50 +02:00
tegra-smmu.c iommu/tegra-smmu: Add iommu_group support 2017-08-10 00:03:50 +02:00