Commit 5c54c262 authored by Yi Liu's avatar Yi Liu Committed by Jason Zeng
Browse files

iommu/vt-d: Remove domain parameter for intel_pasid_setup_dirty_tracking()

mainline inclusion
from mainline-v6.8-rc6
commit 56ecaf6c5834ace14941d7f13dceb48bc3327111
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I938E2
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=56ecaf6c5834ace14941d7f13dceb48bc3327111



--------------------------------

The only usage of input @domain is to get the domain id (DID) to flush
cache after setting dirty tracking. However, DID can be obtained from
the pasid entry. So no need to pass in domain. This can make this helper
cleaner when adding the missing dirty tracking for the parent domain,
which needs to use the DID of nested domain.

Signed-off-by: default avatarYi Liu <yi.l.liu@intel.com>
Reviewed-by: default avatarJoao Martins <joao.m.martins@oracle.com>
Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/20240208082307.15759-7-yi.l.liu@intel.com


Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
Signed-off-by: default avatarJason Zeng <jason.zeng@intel.com>
parent e97c88fc
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -4725,8 +4725,7 @@ static int intel_iommu_set_dirty_tracking(struct iommu_domain *domain,
		goto out_unlock;

	list_for_each_entry(info, &dmar_domain->devices, link) {
		ret = intel_pasid_setup_dirty_tracking(info->iommu,
						       info->domain, info->dev,
		ret = intel_pasid_setup_dirty_tracking(info->iommu, info->dev,
						       IOMMU_NO_PASID, enable);
		if (ret)
			goto err_unwind;
@@ -4740,8 +4739,8 @@ static int intel_iommu_set_dirty_tracking(struct iommu_domain *domain,

err_unwind:
	list_for_each_entry(info, &dmar_domain->devices, link)
		intel_pasid_setup_dirty_tracking(info->iommu, dmar_domain,
						 info->dev, IOMMU_NO_PASID,
		intel_pasid_setup_dirty_tracking(info->iommu, info->dev,
						 IOMMU_NO_PASID,
						 dmar_domain->dirty_tracking);
	spin_unlock(&dmar_domain->lock);
	return ret;
+1 −2
Original line number Diff line number Diff line
@@ -428,7 +428,6 @@ int intel_pasid_setup_second_level(struct intel_iommu *iommu,
 * Set up dirty tracking on a second only or nested translation type.
 */
int intel_pasid_setup_dirty_tracking(struct intel_iommu *iommu,
				     struct dmar_domain *domain,
				     struct device *dev, u32 pasid,
				     bool enabled)
{
@@ -445,7 +444,7 @@ int intel_pasid_setup_dirty_tracking(struct intel_iommu *iommu,
		return -ENODEV;
	}

	did = domain_id_iommu(domain, iommu);
	did = pasid_get_domain_id(pte);
	pgtt = pasid_pte_get_pgtt(pte);
	if (pgtt != PASID_ENTRY_PGTT_SL_ONLY &&
	    pgtt != PASID_ENTRY_PGTT_NESTED) {
+0 −1
Original line number Diff line number Diff line
@@ -307,7 +307,6 @@ int intel_pasid_setup_second_level(struct intel_iommu *iommu,
				   struct dmar_domain *domain,
				   struct device *dev, u32 pasid);
int intel_pasid_setup_dirty_tracking(struct intel_iommu *iommu,
				     struct dmar_domain *domain,
				     struct device *dev, u32 pasid,
				     bool enabled);
int intel_pasid_setup_pass_through(struct intel_iommu *iommu,