powerpc/iommu: Use bitmap library
authorAkinobu Mita <akinobu.mita@gmail.com>
Sun, 4 Nov 2012 02:03:43 +0000 (02:03 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 15 Nov 2012 02:01:04 +0000 (13:01 +1100)
- Caluculate the bitmap size with BITS_TO_LONGS()
 - Use bitmap_empty() to verify that all bits are cleared

This also includes a printk to pr_warn() conversion.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: linuxppc-dev@lists.ozlabs.org
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/iommu.c

index 8226c6cb348afbf09fc287367637b835dced2100..c862fd716fe3ede17452e7bfe138b18292de31fb 100644 (file)
@@ -656,7 +656,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
        struct iommu_pool *p;
 
        /* number of bytes needed for the bitmap */
-       sz = (tbl->it_size + 7) >> 3;
+       sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
 
        page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz));
        if (!page)
@@ -708,7 +708,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
 
 void iommu_free_table(struct iommu_table *tbl, const char *node_name)
 {
-       unsigned long bitmap_sz, i;
+       unsigned long bitmap_sz;
        unsigned int order;
 
        if (!tbl || !tbl->it_map) {
@@ -718,17 +718,11 @@ void iommu_free_table(struct iommu_table *tbl, const char *node_name)
        }
 
        /* verify that table contains no entries */
-       /* it_size is in entries, and we're examining 64 at a time */
-       for (i = 0; i < (tbl->it_size/64); i++) {
-               if (tbl->it_map[i] != 0) {
-                       printk(KERN_WARNING "%s: Unexpected TCEs for %s\n",
-                               __func__, node_name);
-                       break;
-               }
-       }
+       if (!bitmap_empty(tbl->it_map, tbl->it_size))
+               pr_warn("%s: Unexpected TCEs for %s\n", __func__, node_name);
 
        /* calculate bitmap size in bytes */
-       bitmap_sz = (tbl->it_size + 7) / 8;
+       bitmap_sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
 
        /* free bitmap */
        order = get_order(bitmap_sz);