iommu: export iommu_area_reserve helper function
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Mon, 22 Sep 2008 13:35:07 +0000 (22:35 +0900)
committerIngo Molnar <mingo@elte.hu>
Mon, 22 Sep 2008 14:47:50 +0000 (16:47 +0200)
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>
arch/x86/kernel/amd_iommu.c
arch/x86/kernel/pci-calgary_64.c
arch/x86/kernel/pci-gart_64.c
include/linux/iommu-helper.h
lib/iommu-helper.c

index 6f7b97445738c4405fdc7d16b07f436e1508294c..70537d117a962a8dc03cfc2300fa898b5356f8f3 100644 (file)
@@ -572,7 +572,7 @@ static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
        if (start_page + pages > last_page)
                pages = last_page - start_page;
 
-       set_bit_string(dom->bitmap, start_page, pages);
+       iommu_area_reserve(dom->bitmap, start_page, pages);
 }
 
 static void dma_ops_free_pagetable(struct dma_ops_domain *dma_dom)
index fe7695e4caae738abb1438ecde5f159adb00514d..080d1d27f37a0b4e042c6623af4cbf0c9ff5e8e7 100644 (file)
@@ -261,7 +261,7 @@ static void iommu_range_reserve(struct iommu_table *tbl,
                               badbit, tbl, start_addr, npages);
        }
 
-       set_bit_string(tbl->it_map, index, npages);
+       iommu_area_reserve(tbl->it_map, index, npages);
 
        spin_unlock_irqrestore(&tbl->it_lock, flags);
 }
index 508ef470b27f09649e298f25ce0320c57939f156..3dcb1ad86e389faf8a0bbd7af1918c921b8c4c96 100644 (file)
@@ -827,7 +827,7 @@ void __init gart_iommu_init(void)
         * Out of IOMMU space handling.
         * Reserve some invalid pages at the beginning of the GART.
         */
-       set_bit_string(iommu_gart_bitmap, 0, EMERGENCY_PAGES);
+       iommu_area_reserve(iommu_gart_bitmap, 0, EMERGENCY_PAGES);
 
        agp_memory_reserved = iommu_size;
        printk(KERN_INFO
index 58f41107e4ae05327330710ce11c15979d3e114f..786539e432d792c57cba5f0eddd78d788f470e6d 100644 (file)
@@ -11,6 +11,7 @@ static inline unsigned long iommu_device_max_index(unsigned long size,
 extern int iommu_is_span_boundary(unsigned int index, unsigned int nr,
                                  unsigned long shift,
                                  unsigned long boundary_size);
+extern void iommu_area_reserve(unsigned long *map, unsigned long i, int len);
 extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
                                      unsigned long start, unsigned int nr,
                                      unsigned long shift,
index a3b8d4c3f77a5e7e466bd8f5e5591f3dcaa2c3bd..5d90074dca7550f4935e71127911441c9bc617e2 100644 (file)
@@ -30,8 +30,7 @@ again:
        return index;
 }
 
-static inline void set_bit_area(unsigned long *map, unsigned long i,
-                               int len)
+void iommu_area_reserve(unsigned long *map, unsigned long i, int len)
 {
        unsigned long end = i + len;
        while (i < end) {
@@ -64,7 +63,7 @@ again:
                        start = index + 1;
                        goto again;
                }
-               set_bit_area(map, index, nr);
+               iommu_area_reserve(map, index, nr);
        }
        return index;
 }