From: David Woodhouse Date: Sun, 9 Mar 2014 20:33:06 +0000 (-0700) Subject: iommu/vt-d: Remove device_to_iommu() call from domain_remove_dev_info() X-Git-Tag: v3.15-rc1~70^2^6~22 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=7c7faa11ecf3eec17699ae73fc6e336cbf993081;p=~emulex%2Finfiniband.git iommu/vt-d: Remove device_to_iommu() call from domain_remove_dev_info() This was problematic because it works by domain/bus/devfn and we want to make device_to_iommu() use only a struct device * (for handling non-PCI devices). Now that the iommu pointer is reliably stored in the device_domain_info, we don't need to look it up. Signed-off-by: David Woodhouse --- diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index dc322d0238a..aa8548c8a91 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -2084,7 +2084,6 @@ static void domain_remove_dev_info(struct dmar_domain *domain) { struct device_domain_info *info; unsigned long flags, flags2; - struct intel_iommu *iommu; spin_lock_irqsave(&device_domain_lock, flags); while (!list_empty(&domain->devices)) { @@ -2094,16 +2093,15 @@ static void domain_remove_dev_info(struct dmar_domain *domain) spin_unlock_irqrestore(&device_domain_lock, flags); iommu_disable_dev_iotlb(info); - iommu = device_to_iommu(info->segment, info->bus, info->devfn); - iommu_detach_dev(iommu, info->bus, info->devfn); + iommu_detach_dev(info->iommu, info->bus, info->devfn); if (domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE) { - iommu_detach_dependent_devices(iommu, info->dev); + iommu_detach_dependent_devices(info->iommu, info->dev); /* clear this iommu in iommu_bmp, update iommu count * and capabilities */ spin_lock_irqsave(&domain->iommu_lock, flags2); - if (test_and_clear_bit(iommu->seq_id, + if (test_and_clear_bit(info->iommu->seq_id, domain->iommu_bmp)) { domain->iommu_count--; domain_update_iommu_cap(domain);