linux/drivers/iommu
Jay Cornwall a07383cb07 iommu/amd: Apply workaround for ATS write permission check
[ Upstream commit 358875fd52 ]

The AMD Family 15h Models 30h-3Fh (Kaveri) BIOS and Kernel Developer's
Guide omitted part of the BIOS IOMMU L2 register setup specification.
Without this setup the IOMMU L2 does not fully respect write permissions
when handling an ATS translation request.

The IOMMU L2 will set PTE dirty bit when handling an ATS translation with
write permission request, even when PTE RW bit is clear. This may occur by
direct translation (which would cause a PPR) or by prefetch request from
the ATC.

This is observed in practice when the IOMMU L2 modifies a PTE which maps a
pagecache page. The ext4 filesystem driver BUGs when asked to writeback
these (non-modified) pages.

Enable ATS write permission check in the Kaveri IOMMU L2 if BIOS has not.

Signed-off-by: Jay Cornwall <jay@jcornwall.me>
Cc: <stable@vger.kernel.org> # v3.19+
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2016-03-11 09:45:21 -05:00
..
amd_iommu.c iommu/amd: Handle integer overflow in dma_ops_area_alloc 2015-12-02 22:58:53 -05:00
amd_iommu_init.c iommu/amd: Apply workaround for ATS write permission check 2016-03-11 09:45:21 -05:00
amd_iommu_proto.h perf/x86/amd: Add IOMMU Performance Counter resource management 2013-06-19 13:04:52 +02:00
amd_iommu_types.h iommu/amd: Don't clear DTE flags when modifying it 2015-11-15 12:51:47 -05:00
amd_iommu_v2.c kvm: Fix page ageing bugs 2014-09-24 14:07:58 +02:00
arm-smmu.c Merge branches 'arm/exynos', 'arm/omap', 'arm/smmu', 'x86/vt-d', 'x86/amd' and 'core' into next 2014-10-02 12:24:45 +02:00
dmar.c iommu/vt-d: Fix 64-bit accesses to 32-bit DMAR_GSTS_REG 2016-02-27 18:15:32 -05:00
exynos-iommu.c iommu/exynos: Fix trivial typos 2014-08-19 13:07:43 +02:00
fsl_pamu.c Merge branches 'x86/vt-d', 'x86/amd', 'arm/omap', 'ppc/pamu', 'arm/smmu', 'arm/exynos' and 'core' into next 2014-07-31 20:29:02 +02:00
fsl_pamu.h iommu/fsl: Freescale PAMU driver and iommu implementation. 2013-08-14 11:38:34 +02:00
fsl_pamu_domain.c iommu/fsl: Convert to iommu_capable() API function 2014-09-25 15:47:37 +02:00
fsl_pamu_domain.h iommu/fsl: Freescale PAMU driver and iommu implementation. 2013-08-14 11:38:34 +02:00
intel-iommu.c iommu/vt-d: Allow RMRR on graphics devices too 2015-06-28 13:39:19 -04:00
intel_irq_remapping.c iommu/vt-d: Fix 64-bit accesses to 32-bit DMAR_GSTS_REG 2016-02-27 18:15:32 -05:00
iommu-sysfs.c iommu: Fix compile error in iommu-sysfs.c 2014-07-07 12:01:21 +02:00
iommu-traces.c iommu: Add iommu_error class event to iommu trace 2013-09-25 11:07:04 +02:00
iommu.c iommu: Fix bus notifier breakage 2014-09-25 16:46:37 +02:00
iova.c iommu/vt-d: Update IOMMU state when memory hotplug happens 2014-03-04 17:51:06 +01:00
ipmmu-vmsa.c iommu: Constify struct iommu_ops 2014-07-07 10:36:59 +02:00
irq_remapping.c iommu/irq_remapping: Fix the regression of hpet irq remapping 2014-09-25 19:11:47 +02:00
irq_remapping.h iommu/irq_remapping: Fix the regression of hpet irq remapping 2014-09-25 19:11:47 +02:00
Kconfig Merge branches 'x86/vt-d', 'x86/amd', 'arm/omap', 'ppc/pamu', 'arm/smmu', 'arm/exynos' and 'core' into next 2014-07-31 20:29:02 +02:00
Makefile Merge branches 'x86/vt-d', 'x86/amd', 'arm/omap', 'ppc/pamu', 'arm/smmu', 'arm/exynos' and 'core' into next 2014-07-31 20:29:02 +02:00
msm_iommu.c iommu/msm: Convert to iommu_capable() API function 2014-09-25 15:47:38 +02:00
msm_iommu.h iommu/msm: Move mach includes to iommu directory 2013-08-06 11:18:03 -07:00
msm_iommu_dev.c iommu/msm: Use devm_ioremap_resource to simplify code 2014-05-30 20:20:12 +02:00
msm_iommu_hw-8xxx.h iommu/msm: Move mach includes to iommu directory 2013-08-06 11:18:03 -07:00
of_iommu.c iommu: add missing include 2014-01-07 15:16:27 +01:00
omap-iommu-debug.c iommu/omap: Remove virtual memory manager 2014-07-29 12:38:07 +02:00
omap-iommu.c Merge branches 'arm/exynos', 'arm/omap', 'arm/smmu', 'x86/vt-d', 'x86/amd' and 'core' into next 2014-10-02 12:24:45 +02:00
omap-iommu.h iommu/omap: Remove omap_iommu unused owner field 2014-09-25 15:56:37 +02:00
omap-iommu2.c iommu/omap: Enable bus-error back on supported iommus 2014-03-04 17:02:08 +01:00
omap-iopgtable.h iommu/omap: Move to_iommu definition from omap-iopgtable.h 2014-04-16 16:30:15 +02:00
shmobile-iommu.c iommu: Constify struct iommu_ops 2014-07-07 10:36:59 +02:00
shmobile-ipmmu.c iommu/shmobile: Use devm_ioremap_resource() 2014-04-17 12:16:12 +02:00
shmobile-ipmmu.h iommu/shmobile: Turn the flush_lock mutex into a spinlock 2014-01-07 15:35:25 +01:00
tegra-gart.c iommu: Make of_device_id array const 2014-09-25 16:01:03 +02:00
tegra-smmu.c iommu: Make of_device_id array const 2014-09-25 16:01:03 +02:00