aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2008-09-22 09:35:07 -0400
committerIngo Molnar <mingo@elte.hu>2008-09-22 10:47:50 -0400
commitd26dbc5cf94b0a28acc947285c3b54814a73cb2e (patch)
treeba6d44e5945b491166159fee791761ebe4b39134
parent832a90c30485117d65180cc9a8d9869c1b158570 (diff)
iommu: export iommu_area_reserve helper function
x86 has set_bit_string() that does the exact same thing that set_bit_area() in lib/iommu-helper.c does. This patch exports set_bit_area() in lib/iommu-helper.c as iommu_area_reserve(), converts GART, Calgary, and AMD IOMMU to use it. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Acked-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--arch/x86/kernel/amd_iommu.c2
-rw-r--r--arch/x86/kernel/pci-calgary_64.c2
-rw-r--r--arch/x86/kernel/pci-gart_64.c2
-rw-r--r--include/linux/iommu-helper.h1
-rw-r--r--lib/iommu-helper.c5
5 files changed, 6 insertions, 6 deletions
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c
index 6f7b97445738..70537d117a96 100644
--- a/arch/x86/kernel/amd_iommu.c
+++ b/arch/x86/kernel/amd_iommu.c
@@ -572,7 +572,7 @@ static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
572 if (start_page + pages > last_page) 572 if (start_page + pages > last_page)
573 pages = last_page - start_page; 573 pages = last_page - start_page;
574 574
575 set_bit_string(dom->bitmap, start_page, pages); 575 iommu_area_reserve(dom->bitmap, start_page, pages);
576} 576}
577 577
578static void dma_ops_free_pagetable(struct dma_ops_domain *dma_dom) 578static void dma_ops_free_pagetable(struct dma_ops_domain *dma_dom)
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c
index fe7695e4caae..080d1d27f37a 100644
--- a/arch/x86/kernel/pci-calgary_64.c
+++ b/arch/x86/kernel/pci-calgary_64.c
@@ -261,7 +261,7 @@ static void iommu_range_reserve(struct iommu_table *tbl,
261 badbit, tbl, start_addr, npages); 261 badbit, tbl, start_addr, npages);
262 } 262 }
263 263
264 set_bit_string(tbl->it_map, index, npages); 264 iommu_area_reserve(tbl->it_map, index, npages);
265 265
266 spin_unlock_irqrestore(&tbl->it_lock, flags); 266 spin_unlock_irqrestore(&tbl->it_lock, flags);
267} 267}
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c
index 508ef470b27f..3dcb1ad86e38 100644
--- a/arch/x86/kernel/pci-gart_64.c
+++ b/arch/x86/kernel/pci-gart_64.c
@@ -827,7 +827,7 @@ void __init gart_iommu_init(void)
827 * Out of IOMMU space handling. 827 * Out of IOMMU space handling.
828 * Reserve some invalid pages at the beginning of the GART. 828 * Reserve some invalid pages at the beginning of the GART.
829 */ 829 */
830 set_bit_string(iommu_gart_bitmap, 0, EMERGENCY_PAGES); 830 iommu_area_reserve(iommu_gart_bitmap, 0, EMERGENCY_PAGES);
831 831
832 agp_memory_reserved = iommu_size; 832 agp_memory_reserved = iommu_size;
833 printk(KERN_INFO 833 printk(KERN_INFO
diff --git a/include/linux/iommu-helper.h b/include/linux/iommu-helper.h
index 58f41107e4ae..786539e432d7 100644
--- a/include/linux/iommu-helper.h
+++ b/include/linux/iommu-helper.h
@@ -11,6 +11,7 @@ static inline unsigned long iommu_device_max_index(unsigned long size,
11extern int iommu_is_span_boundary(unsigned int index, unsigned int nr, 11extern int iommu_is_span_boundary(unsigned int index, unsigned int nr,
12 unsigned long shift, 12 unsigned long shift,
13 unsigned long boundary_size); 13 unsigned long boundary_size);
14extern void iommu_area_reserve(unsigned long *map, unsigned long i, int len);
14extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size, 15extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
15 unsigned long start, unsigned int nr, 16 unsigned long start, unsigned int nr,
16 unsigned long shift, 17 unsigned long shift,
diff --git a/lib/iommu-helper.c b/lib/iommu-helper.c
index a3b8d4c3f77a..5d90074dca75 100644
--- a/lib/iommu-helper.c
+++ b/lib/iommu-helper.c
@@ -30,8 +30,7 @@ again:
30 return index; 30 return index;
31} 31}
32 32
33static inline void set_bit_area(unsigned long *map, unsigned long i, 33void iommu_area_reserve(unsigned long *map, unsigned long i, int len)
34 int len)
35{ 34{
36 unsigned long end = i + len; 35 unsigned long end = i + len;
37 while (i < end) { 36 while (i < end) {
@@ -64,7 +63,7 @@ again:
64 start = index + 1; 63 start = index + 1;
65 goto again; 64 goto again;
66 } 65 }
67 set_bit_area(map, index, nr); 66 iommu_area_reserve(map, index, nr);
68 } 67 }
69 return index; 68 return index;
70} 69}