]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
iommu/vt-d: Remove device_to_iommu() call from domain_remove_dev_info()
authorDavid Woodhouse <David.Woodhouse@intel.com>
Sun, 9 Mar 2014 20:33:06 +0000 (13:33 -0700)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 24 Mar 2014 14:06:53 +0000 (14:06 +0000)
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 <David.Woodhouse@intel.com>
drivers/iommu/intel-iommu.c

index dc322d0238a07bc36b90c213a214090d44387f3f..aa8548c8a9159aa2bacb1f7d2d88b1f5c2c97fee 100644 (file)
@@ -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);