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