Skip to content

Commit 5c79705

Browse files
TinaZhangZWjoergroedel
authored andcommitted
iommu/vt-d: Remove mm->pasid in intel_sva_bind_mm()
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>
1 parent 8f23f5d commit 5c79705

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

drivers/iommu/intel/svm.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -316,21 +316,22 @@ static int pasid_to_svm_sdev(struct device *dev, unsigned int pasid,
316316
}
317317

318318
static int intel_svm_bind_mm(struct intel_iommu *iommu, struct device *dev,
319-
struct mm_struct *mm)
319+
struct iommu_domain *domain, ioasid_t pasid)
320320
{
321321
struct device_domain_info *info = dev_iommu_priv_get(dev);
322+
struct mm_struct *mm = domain->mm;
322323
struct intel_svm_dev *sdev;
323324
struct intel_svm *svm;
324325
unsigned long sflags;
325326
int ret = 0;
326327

327-
svm = pasid_private_find(mm->pasid);
328+
svm = pasid_private_find(pasid);
328329
if (!svm) {
329330
svm = kzalloc(sizeof(*svm), GFP_KERNEL);
330331
if (!svm)
331332
return -ENOMEM;
332333

333-
svm->pasid = mm->pasid;
334+
svm->pasid = pasid;
334335
svm->mm = mm;
335336
INIT_LIST_HEAD_RCU(&svm->devs);
336337

@@ -368,7 +369,7 @@ static int intel_svm_bind_mm(struct intel_iommu *iommu, struct device *dev,
368369

369370
/* Setup the pasid table: */
370371
sflags = cpu_feature_enabled(X86_FEATURE_LA57) ? PASID_FLAG_FL5LP : 0;
371-
ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, mm->pasid,
372+
ret = intel_pasid_setup_first_level(iommu, dev, mm->pgd, pasid,
372373
FLPT_DEFAULT_DID, sflags);
373374
if (ret)
374375
goto free_sdev;
@@ -382,7 +383,7 @@ static int intel_svm_bind_mm(struct intel_iommu *iommu, struct device *dev,
382383
free_svm:
383384
if (list_empty(&svm->devs)) {
384385
mmu_notifier_unregister(&svm->notifier, mm);
385-
pasid_private_remove(mm->pasid);
386+
pasid_private_remove(pasid);
386387
kfree(svm);
387388
}
388389

@@ -822,9 +823,8 @@ static int intel_svm_set_dev_pasid(struct iommu_domain *domain,
822823
{
823824
struct device_domain_info *info = dev_iommu_priv_get(dev);
824825
struct intel_iommu *iommu = info->iommu;
825-
struct mm_struct *mm = domain->mm;
826826

827-
return intel_svm_bind_mm(iommu, dev, mm);
827+
return intel_svm_bind_mm(iommu, dev, domain, pasid);
828828
}
829829

830830
static void intel_svm_domain_free(struct iommu_domain *domain)

0 commit comments

Comments
 (0)