aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel
diff options
context:
space:
mode:
authorAkinobu Mita <akinobu.mita@gmail.com>2012-11-03 22:03:43 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2012-11-14 21:01:04 -0500
commitc5a0809a24c19fcefea5f3aeb07bde9a2dee5d80 (patch)
tree7d3977b064fa374f66e1392e7756bc5851225b70 /arch/powerpc/kernel
parentd7a1ed163a3bb7aa727d3f9335349055aeea110c (diff)
powerpc/iommu: Use bitmap library
- 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>
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r--arch/powerpc/kernel/iommu.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
index 8226c6cb348a..c862fd716fe3 100644
--- a/arch/powerpc/kernel/iommu.c
+++ b/arch/powerpc/kernel/iommu.c
@@ -656,7 +656,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
656 struct iommu_pool *p; 656 struct iommu_pool *p;
657 657
658 /* number of bytes needed for the bitmap */ 658 /* number of bytes needed for the bitmap */
659 sz = (tbl->it_size + 7) >> 3; 659 sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
660 660
661 page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz)); 661 page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz));
662 if (!page) 662 if (!page)
@@ -708,7 +708,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
708 708
709void iommu_free_table(struct iommu_table *tbl, const char *node_name) 709void iommu_free_table(struct iommu_table *tbl, const char *node_name)
710{ 710{
711 unsigned long bitmap_sz, i; 711 unsigned long bitmap_sz;
712 unsigned int order; 712 unsigned int order;
713 713
714 if (!tbl || !tbl->it_map) { 714 if (!tbl || !tbl->it_map) {
@@ -718,17 +718,11 @@ void iommu_free_table(struct iommu_table *tbl, const char *node_name)
718 } 718 }
719 719
720 /* verify that table contains no entries */ 720 /* verify that table contains no entries */
721 /* it_size is in entries, and we're examining 64 at a time */ 721 if (!bitmap_empty(tbl->it_map, tbl->it_size))
722 for (i = 0; i < (tbl->it_size/64); i++) { 722 pr_warn("%s: Unexpected TCEs for %s\n", __func__, node_name);
723 if (tbl->it_map[i] != 0) {
724 printk(KERN_WARNING "%s: Unexpected TCEs for %s\n",
725 __func__, node_name);
726 break;
727 }
728 }
729 723
730 /* calculate bitmap size in bytes */ 724 /* calculate bitmap size in bytes */
731 bitmap_sz = (tbl->it_size + 7) / 8; 725 bitmap_sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
732 726
733 /* free bitmap */ 727 /* free bitmap */
734 order = get_order(bitmap_sz); 728 order = get_order(bitmap_sz);