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)
committerSasha Levin <sasha.levin@oracle.com>
Fri, 11 Mar 2016 14:45:21 +0000 (09:45 -0500)
commita07383cb071242c4f21c247a6bd7611cbccdfeba
treef370b3d67e4419740c096b63307bb16b0e57caa0
parent80b43959285bff1484a3c7d72df467eeeb4ade17
iommu/amd: Apply workaround for ATS write permission check

[ Upstream commit 358875fd52ab8f00f66328cbf1a1d2486f265829 ]

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