mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	iommu/vt-d: Use dev_iommu_priv_get/set()
Remove the use of dev->archdata.iommu and use the private per-device pointer provided by IOMMU core code instead. Signed-off-by: Joerg Roedel <jroedel@suse.de> Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com> Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com> Link: https://lore.kernel.org/r/20200625130836.1916-3-joro@8bytes.org
This commit is contained in:
		
							parent
							
								
									0f45b04da1
								
							
						
					
					
						commit
						01b9d4e211
					
				| @ -24,6 +24,7 @@ | ||||
| 
 | ||||
| #include <linux/pm_domain.h> | ||||
| #include <linux/pm_runtime.h> | ||||
| #include <linux/iommu.h> | ||||
| 
 | ||||
| #include <drm/drm_managed.h> | ||||
| 
 | ||||
| @ -118,6 +119,9 @@ struct drm_i915_private *mock_gem_device(void) | ||||
| { | ||||
| 	struct drm_i915_private *i915; | ||||
| 	struct pci_dev *pdev; | ||||
| #if IS_ENABLED(CONFIG_IOMMU_API) && defined(CONFIG_INTEL_IOMMU) | ||||
| 	struct dev_iommu iommu; | ||||
| #endif | ||||
| 	int err; | ||||
| 
 | ||||
| 	pdev = kzalloc(sizeof(*pdev), GFP_KERNEL); | ||||
| @ -136,8 +140,10 @@ struct drm_i915_private *mock_gem_device(void) | ||||
| 	dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); | ||||
| 
 | ||||
| #if IS_ENABLED(CONFIG_IOMMU_API) && defined(CONFIG_INTEL_IOMMU) | ||||
| 	/* hack to disable iommu for the fake device; force identity mapping */ | ||||
| 	pdev->dev.archdata.iommu = (void *)-1; | ||||
| 	/* HACK HACK HACK to disable iommu for the fake device; force identity mapping */ | ||||
| 	memset(&iommu, 0, sizeof(iommu)); | ||||
| 	iommu.priv = (void *)-1; | ||||
| 	pdev->dev.iommu = &iommu; | ||||
| #endif | ||||
| 
 | ||||
| 	pci_set_drvdata(pdev, i915); | ||||
|  | ||||
| @ -372,7 +372,7 @@ struct device_domain_info *get_domain_info(struct device *dev) | ||||
| 	if (!dev) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	info = dev->archdata.iommu; | ||||
| 	info = dev_iommu_priv_get(dev); | ||||
| 	if (unlikely(info == DUMMY_DEVICE_DOMAIN_INFO || | ||||
| 		     info == DEFER_DEVICE_DOMAIN_INFO)) | ||||
| 		return NULL; | ||||
| @ -743,12 +743,12 @@ struct context_entry *iommu_context_addr(struct intel_iommu *iommu, u8 bus, | ||||
| 
 | ||||
| static int iommu_dummy(struct device *dev) | ||||
| { | ||||
| 	return dev->archdata.iommu == DUMMY_DEVICE_DOMAIN_INFO; | ||||
| 	return dev_iommu_priv_get(dev) == DUMMY_DEVICE_DOMAIN_INFO; | ||||
| } | ||||
| 
 | ||||
| static bool attach_deferred(struct device *dev) | ||||
| { | ||||
| 	return dev->archdata.iommu == DEFER_DEVICE_DOMAIN_INFO; | ||||
| 	return dev_iommu_priv_get(dev) == DEFER_DEVICE_DOMAIN_INFO; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
| @ -2420,7 +2420,7 @@ static inline void unlink_domain_info(struct device_domain_info *info) | ||||
| 	list_del(&info->link); | ||||
| 	list_del(&info->global); | ||||
| 	if (info->dev) | ||||
| 		info->dev->archdata.iommu = NULL; | ||||
| 		dev_iommu_priv_set(info->dev, NULL); | ||||
| } | ||||
| 
 | ||||
| static void domain_remove_dev_info(struct dmar_domain *domain) | ||||
| @ -2453,7 +2453,7 @@ static void do_deferred_attach(struct device *dev) | ||||
| { | ||||
| 	struct iommu_domain *domain; | ||||
| 
 | ||||
| 	dev->archdata.iommu = NULL; | ||||
| 	dev_iommu_priv_set(dev, NULL); | ||||
| 	domain = iommu_get_domain_for_dev(dev); | ||||
| 	if (domain) | ||||
| 		intel_iommu_attach_device(domain, dev); | ||||
| @ -2599,7 +2599,7 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu, | ||||
| 	list_add(&info->link, &domain->devices); | ||||
| 	list_add(&info->global, &device_domain_list); | ||||
| 	if (dev) | ||||
| 		dev->archdata.iommu = info; | ||||
| 		dev_iommu_priv_set(dev, info); | ||||
| 	spin_unlock_irqrestore(&device_domain_lock, flags); | ||||
| 
 | ||||
| 	/* PASID table is mandatory for a PCI device in scalable mode. */ | ||||
| @ -4004,7 +4004,7 @@ static void quirk_ioat_snb_local_iommu(struct pci_dev *pdev) | ||||
| 	if (!drhd || drhd->reg_base_addr - vtbar != 0xa000) { | ||||
| 		pr_warn_once(FW_BUG "BIOS assigned incorrect VT-d unit for Intel(R) QuickData Technology device\n"); | ||||
| 		add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK); | ||||
| 		pdev->dev.archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO; | ||||
| 		dev_iommu_priv_set(&pdev->dev, DUMMY_DEVICE_DOMAIN_INFO); | ||||
| 	} | ||||
| } | ||||
| DECLARE_PCI_FIXUP_ENABLE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_IOAT_SNB, quirk_ioat_snb_local_iommu); | ||||
| @ -4043,7 +4043,7 @@ static void __init init_no_remapping_devices(void) | ||||
| 			drhd->ignored = 1; | ||||
| 			for_each_active_dev_scope(drhd->devices, | ||||
| 						  drhd->devices_cnt, i, dev) | ||||
| 				dev->archdata.iommu = DUMMY_DEVICE_DOMAIN_INFO; | ||||
| 				dev_iommu_priv_set(dev, DUMMY_DEVICE_DOMAIN_INFO); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @ -5665,7 +5665,7 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev) | ||||
| 		return ERR_PTR(-ENODEV); | ||||
| 
 | ||||
| 	if (translation_pre_enabled(iommu)) | ||||
| 		dev->archdata.iommu = DEFER_DEVICE_DOMAIN_INFO; | ||||
| 		dev_iommu_priv_set(dev, DEFER_DEVICE_DOMAIN_INFO); | ||||
| 
 | ||||
| 	return &iommu->iommu; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Joerg Roedel
						Joerg Roedel