summaryrefslogtreecommitdiffstats
path: root/drivers/iommu/intel-svm.c
diff options
context:
space:
mode:
authorLu Baolu2017-11-03 17:51:34 +0100
committerAlex Williamson2017-11-03 17:51:34 +0100
commit4fa064b26c2eb9e1c38460ba327765dff16a4b14 (patch)
treedad10948cb5ed2933375afbee03d29d25786c76e /drivers/iommu/intel-svm.c
parentiommu/vt-d: Clear Page Request Overflow fault bit (diff)
downloadkernel-qcow2-linux-4fa064b26c2eb9e1c38460ba327765dff16a4b14.tar.gz
kernel-qcow2-linux-4fa064b26c2eb9e1c38460ba327765dff16a4b14.tar.xz
kernel-qcow2-linux-4fa064b26c2eb9e1c38460ba327765dff16a4b14.zip
iommu/vt-d: Clear pasid table entry when memory unbound
In intel_svm_unbind_mm(), pasid table entry must be cleared during svm free. Otherwise, hardware may be set up with a wild pointer. Suggested-by: Ashok Raj <ashok.raj@intel.com> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers/iommu/intel-svm.c')
-rw-r--r--drivers/iommu/intel-svm.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/iommu/intel-svm.c b/drivers/iommu/intel-svm.c
index 43280ca282df..ed1cf7c5a43b 100644
--- a/drivers/iommu/intel-svm.c
+++ b/drivers/iommu/intel-svm.c
@@ -458,6 +458,8 @@ int intel_svm_unbind_mm(struct device *dev, int pasid)
kfree_rcu(sdev, rcu);
if (list_empty(&svm->devs)) {
+ svm->iommu->pasid_table[svm->pasid].val = 0;
+ wmb();
idr_remove(&svm->iommu->pasid_idr, svm->pasid);
if (svm->mm)