linux/drivers/iommu
Christian Zander ba2374fd2b iommu/vt-d: fix range computation when making room for large pages
In preparation for the installation of a large page, any small page
tables that may still exist in the target IOV address range are
removed.  However, if a scatter/gather list entry is large enough to
fit more than one large page, the address space for any subsequent
large pages is not cleared of conflicting small page tables.

This can cause legitimate mapping requests to fail with errors of the
form below, potentially followed by a series of IOMMU faults:

ERROR: DMA PTE for vPFN 0xfde00 already set (to 7f83a4003 not 7e9e00083)

In this example, a 4MiB scatter/gather list entry resulted in the
successful installation of a large page @ vPFN 0xfdc00, followed by
a failed attempt to install another large page @ vPFN 0xfde00, due to
the presence of a pointer to a small page table @ 0x7f83a4000.

To address this problem, compute the number of large pages that fit
into a given scatter/gather list entry, and use it to derive the
last vPFN covered by the large page(s).

Cc: stable@vger.kernel.org
Signed-off-by: Christian Zander <christian@nervanasys.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
2015-10-13 20:32:50 +01:00
..
amd_iommu_init.c iommu/amd: Make a symbol static 2015-08-13 19:49:10 +02:00
amd_iommu_proto.h IOMMU Updates for Linux v4.2 2015-06-23 18:27:19 -07:00
amd_iommu_types.h IOMMU Updates for Linux v4.2 2015-06-23 18:27:19 -07:00
amd_iommu_v2.c iommu/amd: Use BUG_ON instead of if () BUG() 2015-08-13 19:49:14 +02:00
amd_iommu.c iommu/amd: Use BUG_ON instead of if () BUG() 2015-08-13 19:49:14 +02:00
arm-smmu-v3.c iommu/arm-smmu: Remove arm_smmu_flush_pgtable() 2015-08-06 14:35:40 +01:00
arm-smmu.c iommu/arm-smmu: Remove arm_smmu_flush_pgtable() 2015-08-06 14:35:40 +01:00
dmar.c iommu/vt-d: Avoid format string leaks into iommu_device_create 2015-08-03 16:15:47 +02:00
exynos-iommu.c iommu/exynos: Add callback for initializing devices from device tree 2015-05-29 10:50:08 +02:00
fsl_pamu_domain.c iommu/fsl: Make use of domain_alloc and domain_free 2015-03-31 15:32:14 +02:00
fsl_pamu_domain.h iommu/fsl: Make use of domain_alloc and domain_free 2015-03-31 15:32:14 +02:00
fsl_pamu.c iommu/fsl: Really fix init section(s) content 2015-08-18 11:30:46 +02:00
fsl_pamu.h iommu/fsl: Various cleanups 2015-02-03 18:47:18 +01:00
intel_irq_remapping.c iommu/vt-d: Access iomem correctly 2015-08-13 19:49:56 +02:00
intel-iommu.c iommu/vt-d: fix range computation when making room for large pages 2015-10-13 20:32:50 +01:00
io-pgtable-arm.c iommu/io-pgtable-arm: Unmap and free table when overwriting with block 2015-08-18 11:27:36 +02:00
io-pgtable.c iommu/io-pgtable-arm: Move init-fn declarations to io-pgtable.h 2015-08-13 19:51:04 +02:00
io-pgtable.h iommu/io-pgtable-arm: Move init-fn declarations to io-pgtable.h 2015-08-13 19:51:04 +02:00
iommu-sysfs.c
iommu-traces.c
iommu.c scatterlist: use sg_phys() 2015-08-17 08:13:26 -06:00
iova.c iommu: Make the iova library a module 2015-07-28 15:48:01 +01:00
ipmmu-vmsa.c iommu/ipmmu-vmsa: Clean up DMA API usage 2015-08-06 14:35:39 +01:00
irq_remapping.c iommu/vt-d: Return false instead of 0 in irq_remapping_cap() 2015-08-13 19:49: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 git://git.infradead.org/intel-iommu 2015-10-02 07:59:29 -04:00
Makefile iommu/arm-smmu: Add initial driver support for ARM SMMUv3 devices 2015-05-29 11:12:01 +02:00
msm_iommu_dev.c iommu/msm: Use dev_get_platdata() 2014-11-04 15:03:39 +01:00
msm_iommu_hw-8xxx.h
msm_iommu.c iommu/msm: Use BUG_ON instead of if () BUG() 2015-08-13 19:50:51 +02:00
msm_iommu.h
of_iommu.c of: iommu: Silence misleading warning 2015-08-03 16:07:49 +02:00
omap-iommu-debug.c fs/seq_file: convert int seq_vprint/seq_printf/etc... returns to void 2015-09-11 15:21:34 -07:00
omap-iommu.c iommu/omap: Align code with open parenthesis 2015-08-03 16:04:43 +02:00
omap-iommu.h iommu/omap: Use BIT(x) macros in omap-iommu.h 2015-08-03 16:04:42 +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 Merge branches 'arm/rockchip', 'arm/exynos', 'arm/smmu', 'x86/vt-d', 'x86/amd', 'default-domains' and 'core' into next 2015-06-19 17:17:47 +02:00
shmobile-iommu.c iommu/shmobile: Make use of domain_alloc and domain_free 2015-03-31 15:32:13 +02:00
shmobile-ipmmu.c
shmobile-ipmmu.h
tegra-gart.c Merge branches 'iommu/fixes', 'x86/vt-d', 'x86/amd', 'arm/smmu', 'arm/tegra' and 'core' into next 2015-04-02 13:33:19 +02:00
tegra-smmu.c iommu/tegra-smmu: Parameterize number of TLB lines 2015-08-13 17:05:28 +02:00