diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2012-11-03 22:03:43 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-11-14 21:01:04 -0500 |
commit | c5a0809a24c19fcefea5f3aeb07bde9a2dee5d80 (patch) | |
tree | 7d3977b064fa374f66e1392e7756bc5851225b70 /arch/powerpc | |
parent | d7a1ed163a3bb7aa727d3f9335349055aeea110c (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')
-rw-r--r-- | arch/powerpc/kernel/iommu.c | 16 |
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 | ||
709 | void iommu_free_table(struct iommu_table *tbl, const char *node_name) | 709 | void 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); |