diff options
Diffstat (limited to 'drivers/pci/intel-iommu.c')
-rw-r--r-- | drivers/pci/intel-iommu.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index f02c34d26d1b..8ec352077e1a 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c | |||
@@ -2178,18 +2178,6 @@ static inline void iommu_prepare_isa(void) | |||
2178 | 2178 | ||
2179 | static int md_domain_init(struct dmar_domain *domain, int guest_width); | 2179 | static int md_domain_init(struct dmar_domain *domain, int guest_width); |
2180 | 2180 | ||
2181 | static int __init si_domain_work_fn(unsigned long start_pfn, | ||
2182 | unsigned long end_pfn, void *datax) | ||
2183 | { | ||
2184 | int *ret = datax; | ||
2185 | |||
2186 | *ret = iommu_domain_identity_map(si_domain, | ||
2187 | (uint64_t)start_pfn << PAGE_SHIFT, | ||
2188 | (uint64_t)end_pfn << PAGE_SHIFT); | ||
2189 | return *ret; | ||
2190 | |||
2191 | } | ||
2192 | |||
2193 | static int __init si_domain_init(int hw) | 2181 | static int __init si_domain_init(int hw) |
2194 | { | 2182 | { |
2195 | struct dmar_drhd_unit *drhd; | 2183 | struct dmar_drhd_unit *drhd; |
@@ -2221,9 +2209,15 @@ static int __init si_domain_init(int hw) | |||
2221 | return 0; | 2209 | return 0; |
2222 | 2210 | ||
2223 | for_each_online_node(nid) { | 2211 | for_each_online_node(nid) { |
2224 | work_with_active_regions(nid, si_domain_work_fn, &ret); | 2212 | unsigned long start_pfn, end_pfn; |
2225 | if (ret) | 2213 | int i; |
2226 | return ret; | 2214 | |
2215 | for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, NULL) { | ||
2216 | ret = iommu_domain_identity_map(si_domain, | ||
2217 | PFN_PHYS(start_pfn), PFN_PHYS(end_pfn)); | ||
2218 | if (ret) | ||
2219 | return ret; | ||
2220 | } | ||
2227 | } | 2221 | } |
2228 | 2222 | ||
2229 | return 0; | 2223 | return 0; |