iommu/vt-d: Fix incomplete cache flush in intel_pasid_tear_down_entry()
authorLiu Yi L <yi.l.liu@intel.com>
Tue, 17 Aug 2021 12:43:21 +0000 (20:43 +0800)
committerSasha Levin <sashal@kernel.org>
Thu, 26 Aug 2021 12:35:51 +0000 (08:35 -0400)
commit21ca0b18ad64ed2631e23020b61d9ce1710129a9
tree11333f4a1d978e6deef8b7d6831b27effc4b3fab
parent81578e587c089c8aeb25b8b4c501fe1fbdf2b0f5
iommu/vt-d: Fix incomplete cache flush in intel_pasid_tear_down_entry()

[ Upstream commit 8798d36411196da86e70b994725349c16c1119f6 ]

This fixes improper iotlb invalidation in intel_pasid_tear_down_entry().
When a PASID was used as nested mode, released and reused, the following
error message will appear:

[  180.187556] Unexpected page request in Privilege Mode
[  180.187565] Unexpected page request in Privilege Mode
[  180.279933] Unexpected page request in Privilege Mode
[  180.279937] Unexpected page request in Privilege Mode

Per chapter 6.5.3.3 of VT-d spec 3.3, when tear down a pasid entry, the
software should use Domain selective IOTLB flush if the PGTT of the pasid
entry is SL only or Nested, while for the pasid entries whose PGTT is FL
only or PT using PASID-based IOTLB flush is enough.

Fixes: 2cd1311a26673 ("iommu/vt-d: Add set domain DOMAIN_ATTR_NESTING attr")
Signed-off-by: Kumar Sanjay K <sanjay.k.kumar@intel.com>
Signed-off-by: Liu Yi L <yi.l.liu@intel.com>
Tested-by: Yi Sun <yi.y.sun@intel.com>
Link: https://lore.kernel.org/r/20210817042425.1784279-1-yi.l.liu@intel.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/20210817124321.1517985-3-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/iommu/intel/pasid.c
drivers/iommu/intel/pasid.h