]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iommu/vt-d: Remove mm->pasid in intel_sva_bind_mm()
authorTina Zhang <tina.zhang@intel.com>
Fri, 27 Oct 2023 00:05:21 +0000 (08:05 +0800)
committerJoerg Roedel <jroedel@suse.de>
Tue, 12 Dec 2023 09:11:29 +0000 (10:11 +0100)
The pasid is passed in as a parameter through .set_dev_pasid() callback.
Thus, intel_sva_bind_mm() can directly use it instead of retrieving the
pasid value from mm->pasid.

Suggested-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Tina Zhang <tina.zhang@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/20231027000525.1278806-3-tina.zhang@intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel/svm.c

index ac12f76c1212ac5f8f3a835f9afc1a0f6737af14..4dbfa970dab53dfe97420a7a86c6f129deafe08a 100644 (file)
@@ -316,21 +316,22 @@ out:
 }
 
 static int intel_svm_bind_mm(struct intel_iommu *iommu, struct device *dev,
-                            struct mm_struct *mm)
+                            struct iommu_domain *domain, ioasid_t pasid)
 {
        struct device_domain_info *info = dev_iommu_priv_get(dev);
+       struct mm_struct *mm = domain->mm;
        struct intel_svm_dev *sdev;
        struct intel_svm *svm;
        unsigned long sflags;
        int ret = 0;
 
-       svm = pasid_private_find(mm->pasid);
+       svm = pasid_private_find(pasid);
        if (!svm) {
                svm = kzalloc(sizeof(*svm), GFP_KERNEL);
                if (!svm)
                        return -ENOMEM;
 
-               svm->pasid = mm->pasid;
+               svm->pasid = pasid;
                svm->mm = mm;
                INIT_LIST_HEAD_RCU(&svm->devs);
 
@@ -368,7 +369,7 @@ static int intel_svm_bind_mm(struct intel_iommu *iommu, struct device *dev,
 
        /* Setup the pasid table: */
        sflags = cpu_feature_enabled(X86_FEATURE_LA57) ? PASID_FLAG_FL5LP : 0;
-       ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, mm->pasid,
+       ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, pasid,
                                            FLPT_DEFAULT_DID, sflags);
        if (ret)
                goto free_sdev;
@@ -382,7 +383,7 @@ free_sdev:
 free_svm:
        if (list_empty(&svm->devs)) {
                mmu_notifier_unregister(&svm->notifier, mm);
-               pasid_private_remove(mm->pasid);
+               pasid_private_remove(pasid);
                kfree(svm);
        }
 
@@ -822,9 +823,8 @@ static int intel_svm_set_dev_pasid(struct iommu_domain *domain,
 {
        struct device_domain_info *info = dev_iommu_priv_get(dev);
        struct intel_iommu *iommu = info->iommu;
-       struct mm_struct *mm = domain->mm;
 
-       return intel_svm_bind_mm(iommu, dev, mm);
+       return intel_svm_bind_mm(iommu, dev, domain, pasid);
 }
 
 static void intel_svm_domain_free(struct iommu_domain *domain)