]> git.karo-electronics.de Git - linux-beck.git/commitdiff
iommu/vt-d: Simplify io/tlb flushing in intel_iommu_unmap
authorJoerg Roedel <jroedel@suse.de>
Tue, 21 Jul 2015 13:50:02 +0000 (15:50 +0200)
committerJoerg Roedel <jroedel@suse.de>
Wed, 12 Aug 2015 14:23:34 +0000 (16:23 +0200)
We don't need to do an expensive search for domain-ids
anymore, as we keep track of per-iommu domain-ids.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel-iommu.c

index a5aa957a69d51e2ff820e2112d1441fd237acdc0..57c115cb351b7cc66ca8f738763714ff4220736c 100644 (file)
@@ -4834,7 +4834,7 @@ static size_t intel_iommu_unmap(struct iommu_domain *domain,
        struct intel_iommu *iommu;
        unsigned long start_pfn, last_pfn;
        unsigned int npages;
-       int iommu_id, num, ndomains, level = 0;
+       int iommu_id, level = 0;
 
        /* Cope with horrid API which requires us to unmap more than the
           size argument if it happens to be a large-page mapping. */
@@ -4854,17 +4854,8 @@ static size_t intel_iommu_unmap(struct iommu_domain *domain,
        for_each_domain_iommu(iommu_id, dmar_domain) {
                iommu = g_iommus[iommu_id];
 
-               /*
-                * find bit position of dmar_domain
-                */
-               ndomains = cap_ndoms(iommu->cap);
-               for_each_set_bit(num, iommu->domain_ids, ndomains) {
-                       if (get_iommu_domain(iommu, num) == dmar_domain)
-                               iommu_flush_iotlb_psi(iommu, dmar_domain,
-                                                     start_pfn, npages,
-                                                     !freelist, 0);
-               }
-
+               iommu_flush_iotlb_psi(g_iommus[iommu_id], dmar_domain,
+                                     start_pfn, npages, !freelist, 0);
        }
 
        dma_free_pagelist(freelist);