summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorYu Zhao <yu.zhao@intel.com>2009-06-29 03:31:45 (GMT)
committerDavid Woodhouse <David.Woodhouse@intel.com>2009-06-29 11:34:11 (GMT)
commitbf92df30df909710c498d05620e2df1be1ef779b (patch)
tree9d1e330524fac88a95b6787e0b754e02e62df039 /drivers
parenta679128d30d0303bbf5cac839c8f6f45793ea775 (diff)
downloadlinux-fsl-qoriq-bf92df30df909710c498d05620e2df1be1ef779b.tar.xz
intel-iommu: Only avoid flushing device IOTLB for domain ID 0 in caching mode
In caching mode, domain ID 0 is reserved for non-present to present mapping flush. Device IOTLB doesn't need to be flushed in this case. Previously we were avoiding the flush for domain zero, even if the IOMMU wasn't in caching mode and domain zero wasn't special. Signed-off-by: Yu Zhao <yu.zhao@intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/pci/intel-iommu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index 420afa8..3cad700 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -1054,7 +1054,12 @@ static void iommu_flush_iotlb_psi(struct intel_iommu *iommu, u16 did,
else
iommu->flush.flush_iotlb(iommu, did, addr, mask,
DMA_TLB_PSI_FLUSH);
- if (did)
+
+ /*
+ * In caching mode, domain ID 0 is reserved for non-present to present
+ * mapping flush. Device IOTLB doesn't need to be flushed in this case.
+ */
+ if (!cap_caching_mode(iommu->cap) || did)
iommu_flush_dev_iotlb(iommu->domains[did], addr, mask);
}