]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/iommu/intel-iommu.c
Merge branch 'master' into x86/memblock
[karo-tx-linux.git] / drivers / iommu / intel-iommu.c
index c0c7820d4c46b406465e0d2d8e059a80ce819476..bcbd693b351ae8f250496388ff5f0921a90b0be6 100644 (file)
@@ -2185,18 +2185,6 @@ static inline void iommu_prepare_isa(void)
 
 static int md_domain_init(struct dmar_domain *domain, int guest_width);
 
-static int __init si_domain_work_fn(unsigned long start_pfn,
-                                   unsigned long end_pfn, void *datax)
-{
-       int *ret = datax;
-
-       *ret = iommu_domain_identity_map(si_domain,
-                                        (uint64_t)start_pfn << PAGE_SHIFT,
-                                        (uint64_t)end_pfn << PAGE_SHIFT);
-       return *ret;
-
-}
-
 static int __init si_domain_init(int hw)
 {
        struct dmar_drhd_unit *drhd;
@@ -2228,9 +2216,15 @@ static int __init si_domain_init(int hw)
                return 0;
 
        for_each_online_node(nid) {
-               work_with_active_regions(nid, si_domain_work_fn, &ret);
-               if (ret)
-                       return ret;
+               unsigned long start_pfn, end_pfn;
+               int i;
+
+               for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) {
+                       ret = iommu_domain_identity_map(si_domain,
+                                       PFN_PHYS(start_pfn), PFN_PHYS(end_pfn));
+                       if (ret)
+                               return ret;
+               }
        }
 
        return 0;