IB/ipath: Use bitmap_weight()
authorAkinobu Mita <akinobu.mita@gmail.com>
Wed, 9 Dec 2009 18:05:28 +0000 (10:05 -0800)
committerRoland Dreier <rolandd@cisco.com>
Wed, 9 Dec 2009 18:05:28 +0000 (10:05 -0800)
Use bitmap_weight() instead of finding all set bits in bitmap by hand.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Ralph Campbell <infinipath@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/ipath/ipath_driver.c

index 013d1380e77c7bae05ab5b776c9cd0c331b06dd5..d2787fe80304e65facbd6fb90e6df953c009445a 100644 (file)
@@ -39,6 +39,7 @@
 #include <linux/delay.h>
 #include <linux/netdevice.h>
 #include <linux/vmalloc.h>
+#include <linux/bitmap.h>
 
 #include "ipath_kernel.h"
 #include "ipath_verbs.h"
@@ -1697,7 +1698,7 @@ void ipath_chg_pioavailkernel(struct ipath_devdata *dd, unsigned start,
                              unsigned len, int avail)
 {
        unsigned long flags;
-       unsigned end, cnt = 0, next;
+       unsigned end, cnt = 0;
 
        /* There are two bits per send buffer (busy and generation) */
        start *= 2;
@@ -1748,12 +1749,7 @@ void ipath_chg_pioavailkernel(struct ipath_devdata *dd, unsigned start,
 
        if (dd->ipath_pioupd_thresh) {
                end = 2 * (dd->ipath_piobcnt2k + dd->ipath_piobcnt4k);
-               next = find_first_bit(dd->ipath_pioavailkernel, end);
-               while (next < end) {
-                       cnt++;
-                       next = find_next_bit(dd->ipath_pioavailkernel, end,
-                                       next + 1);
-               }
+               cnt = bitmap_weight(dd->ipath_pioavailkernel, end);
        }
        spin_unlock_irqrestore(&ipath_pioavail_lock, flags);