Commit 50a7e2c6 authored by Lu Baolu's avatar Lu Baolu Committed by Joerg Roedel
Browse files

iommu/vt-d: Cleanup si_domain



The static identity domain has been introduced, rendering the si_domain
obsolete. Remove si_domain and cleanup the code accordingly.

Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/20240809055431.36513-8-baolu.lu@linux.intel.com


Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 2031c469
Loading
Loading
Loading
Loading
+19 −72
Original line number Diff line number Diff line
@@ -167,8 +167,6 @@ static void device_rbtree_remove(struct device_domain_info *info)
	spin_unlock_irqrestore(&iommu->device_rbtree_lock, flags);
}

static struct dmar_domain *si_domain;

struct dmar_rmrr_unit {
	struct list_head list;		/* list of rmrr units	*/
	struct acpi_dmar_header *hdr;	/* ACPI header		*/
@@ -286,11 +284,6 @@ static int __init intel_iommu_setup(char *str)
}
__setup("intel_iommu=", intel_iommu_setup);

static int domain_type_is_si(struct dmar_domain *domain)
{
	return domain->domain.type == IOMMU_DOMAIN_IDENTITY;
}

static int domain_pfn_supported(struct dmar_domain *domain, unsigned long pfn)
{
	int addr_width = agaw_to_width(domain->agaw) - VTD_PAGE_SHIFT;
@@ -1664,9 +1657,6 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
	struct context_entry *context;
	int agaw, ret;

	if (domain_type_is_si(domain))
		translation = CONTEXT_TT_PASS_THROUGH;

	pr_debug("Set context mapping for %02x:%02x.%d\n",
		bus, PCI_SLOT(devfn), PCI_FUNC(devfn));

@@ -1685,7 +1675,6 @@ static int domain_context_mapping_one(struct dmar_domain *domain,

	context_set_domain_id(context, did);

	if (translation != CONTEXT_TT_PASS_THROUGH) {
	/*
	 * Skip top levels of page tables for iommu which has
	 * less agaw than default. Unnecessary for PT mode.
@@ -1704,15 +1693,6 @@ static int domain_context_mapping_one(struct dmar_domain *domain,

	context_set_address_root(context, virt_to_phys(pgd));
	context_set_address_width(context, agaw);
	} else {
		/*
		 * In pass through mode, AW must be programmed to
		 * indicate the largest AGAW value supported by
		 * hardware. And ASR is ignored by hardware.
		 */
		context_set_address_width(context, iommu->msagaw);
	}

	context_set_translation_type(context, translation);
	context_set_fault_enable(context);
	context_set_present(context);
@@ -1977,23 +1957,6 @@ static bool dev_is_real_dma_subdevice(struct device *dev)
	       pci_real_dma_dev(to_pci_dev(dev)) != to_pci_dev(dev);
}

static int md_domain_init(struct dmar_domain *domain, int guest_width);

static int __init si_domain_init(void)
{
	si_domain = alloc_domain(IOMMU_DOMAIN_IDENTITY);
	if (!si_domain)
		return -EFAULT;

	if (md_domain_init(si_domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) {
		domain_exit(si_domain);
		si_domain = NULL;
		return -EFAULT;
	}

	return 0;
}

static int dmar_domain_attach_device(struct dmar_domain *domain,
				     struct device *dev)
{
@@ -2016,8 +1979,6 @@ static int dmar_domain_attach_device(struct dmar_domain *domain,

	if (!sm_supported(iommu))
		ret = domain_context_mapping(domain, dev);
	else if (domain_type_is_si(domain))
		ret = intel_pasid_setup_pass_through(iommu, dev, IOMMU_NO_PASID);
	else if (domain->use_first_level)
		ret = domain_setup_first_level(iommu, domain, dev, IOMMU_NO_PASID);
	else
@@ -2026,7 +1987,6 @@ static int dmar_domain_attach_device(struct dmar_domain *domain,
	if (ret)
		goto out_block_translation;

	if (sm_supported(info->iommu) || !domain_type_is_si(info->domain))
	iommu_enable_pci_caps(info);

	ret = cache_tag_assign_domain(domain, dev, IOMMU_NO_PASID);
@@ -2386,10 +2346,6 @@ static int __init init_dmars(void)

	check_tylersburg_isoch();

	ret = si_domain_init();
	if (ret)
		goto free_iommu;

	/*
	 * for each drhd
	 *   enable fault log
@@ -2435,10 +2391,6 @@ static int __init init_dmars(void)
		disable_dmar_iommu(iommu);
		free_dmar_iommu(iommu);
	}
	if (si_domain) {
		domain_exit(si_domain);
		si_domain = NULL;
	}

	return ret;
}
@@ -3572,8 +3524,6 @@ static struct iommu_domain *intel_iommu_domain_alloc(unsigned type)
		domain->geometry.force_aperture = true;

		return domain;
	case IOMMU_DOMAIN_IDENTITY:
		return &si_domain->domain;
	default:
		return NULL;
	}
@@ -3640,7 +3590,6 @@ static void intel_iommu_domain_free(struct iommu_domain *domain)

	WARN_ON(dmar_domain->nested_parent &&
		!list_empty(&dmar_domain->s1_domains));
	if (domain != &si_domain->domain)
	domain_exit(dmar_domain);
}

@@ -4364,9 +4313,7 @@ static int intel_iommu_set_dev_pasid(struct iommu_domain *domain,
	if (ret)
		goto out_detach_iommu;

	if (domain_type_is_si(dmar_domain))
		ret = intel_pasid_setup_pass_through(iommu, dev, pasid);
	else if (dmar_domain->use_first_level)
	if (dmar_domain->use_first_level)
		ret = domain_setup_first_level(iommu, dmar_domain,
					       dev, pasid);
	else