iommu/amd: Apply workaround for ATS write permission check
authorJay Cornwall <jay@jcornwall.me>
Wed, 10 Feb 2016 21:48:01 +0000 (15:48 -0600)
committerJoerg Roedel <jroedel@suse.de>
Thu, 25 Feb 2016 15:53:49 +0000 (16:53 +0100)
commit358875fd52ab8f00f66328cbf1a1d2486f265829
tree3023b7a161ceee66d15ddfcee8a9602cf582a625
parent38e45d02ea9f194b89d6bf41e52ccafc8e2c2b47
iommu/amd: Apply workaround for ATS write permission check

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>
drivers/iommu/amd_iommu_init.c