]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/vt-d: Make intel_svm_set_dev_pasid() support domain replacement
authorYi Liu <yi.l.liu@intel.com>
Fri, 8 Nov 2024 02:14:00 +0000 (10:14 +0800)
committerJoerg Roedel <jroedel@suse.de>
Fri, 8 Nov 2024 13:04:55 +0000 (14:04 +0100)
Make intel_svm_set_dev_pasid() support replacement.

Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Link: https://lore.kernel.org/r/20241107122234.7424-10-yi.l.liu@intel.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel/iommu.c
drivers/iommu/intel/iommu.h
drivers/iommu/intel/svm.c

index f3ccbe516dcbb74f3bfbbd40b1da5d5dcad35f8c..251cfebe6226399fb060597bcc480b52027a8e79 100644 (file)
@@ -1752,10 +1752,10 @@ static void domain_context_clear_one(struct device_domain_info *info, u8 bus, u8
        intel_context_flush_present(info, context, did, true);
 }
 
-static int __domain_setup_first_level(struct intel_iommu *iommu,
-                                     struct device *dev, ioasid_t pasid,
-                                     u16 did, pgd_t *pgd, int flags,
-                                     struct iommu_domain *old)
+int __domain_setup_first_level(struct intel_iommu *iommu,
+                              struct device *dev, ioasid_t pasid,
+                              u16 did, pgd_t *pgd, int flags,
+                              struct iommu_domain *old)
 {
        if (!old)
                return intel_pasid_setup_first_level(iommu, dev, pgd,
index cdca7d5061a7ee87a3c0543316873c0f9fa66b37..d23977cc7d90629f2058a67479dbd7ada044e590 100644 (file)
@@ -1250,6 +1250,11 @@ domain_add_dev_pasid(struct iommu_domain *domain,
 void domain_remove_dev_pasid(struct iommu_domain *domain,
                             struct device *dev, ioasid_t pasid);
 
+int __domain_setup_first_level(struct intel_iommu *iommu,
+                              struct device *dev, ioasid_t pasid,
+                              u16 did, pgd_t *pgd, int flags,
+                              struct iommu_domain *old);
+
 int dmar_ir_support(void);
 
 void iommu_flush_write_buffer(struct intel_iommu *iommu);
index 6c0685ea8466ed02b7979770c54672bb1de1ff6c..f5569347591f268fd383fc39f786de31be2d29f3 100644 (file)
@@ -127,8 +127,9 @@ static int intel_svm_set_dev_pasid(struct iommu_domain *domain,
 
        /* 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, pasid,
-                                           FLPT_DEFAULT_DID, sflags);
+       ret = __domain_setup_first_level(iommu, dev, pasid,
+                                        FLPT_DEFAULT_DID, mm->pgd,
+                                        sflags, old);
        if (ret)
                goto out_remove_dev_pasid;