net/ice/base: introduce and use bitmap hamming weight API
authorQi Zhang <qi.z.zhang@intel.com>
Wed, 26 Aug 2020 08:49:14 +0000 (16:49 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Sep 2020 16:55:09 +0000 (18:55 +0200)
Introduce ice_bitmap_hweight() and use it instead of open-coding that
functionality.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Qiming Yang <qiming.yang@intel.com>
drivers/net/ice/base/ice_bitops.h
drivers/net/ice/base/ice_switch.c

index 8352b5d..a56d554 100644 (file)
@@ -394,6 +394,29 @@ ice_bitmap_set(ice_bitmap_t *dst, u16 pos, u16 num_bits)
                ice_set_bit(i, dst);
 }
 
+/**
+ * ice_bitmap_hweight - hamming weight of bitmap
+ * @bm: bitmap pointer
+ * @size: size of bitmap (in bits)
+ *
+ * This function determines the number of set bits in a bitmap.
+ * Note that this function assumes it is operating on a bitmap declared using
+ * ice_declare_bitmap.
+ */
+static inline int
+ice_bitmap_hweight(ice_bitmap_t *bm, u16 size)
+{
+       int count = 0;
+       u16 bit = 0;
+
+       while (size > (bit = ice_find_next_bit(bm, size, bit))) {
+               count++;
+               bit++;
+       }
+
+       return count;
+}
+
 /**
  * ice_cmp_bitmaps - compares two bitmaps.
  * @bmp1: the bitmap to compare
index 41ebfed..ecb4117 100644 (file)
@@ -5932,7 +5932,6 @@ ice_find_free_recp_res_idx(struct ice_hw *hw, const ice_bitmap_t *profiles,
        ice_declare_bitmap(possible_idx, ICE_MAX_FV_WORDS);
        ice_declare_bitmap(recipes, ICE_MAX_NUM_RECIPES);
        ice_declare_bitmap(used_idx, ICE_MAX_FV_WORDS);
-       u16 count = 0;
        u16 bit;
 
        ice_zero_bitmap(possible_idx, ICE_MAX_FV_WORDS);
@@ -5971,15 +5970,7 @@ ice_find_free_recp_res_idx(struct ice_hw *hw, const ice_bitmap_t *profiles,
        ice_xor_bitmap(free_idx, used_idx, possible_idx, ICE_MAX_FV_WORDS);
 
        /* return number of free indexes */
-       count = 0;
-       bit = 0;
-       while (ICE_MAX_FV_WORDS >
-              (bit = ice_find_next_bit(free_idx, ICE_MAX_FV_WORDS, bit))) {
-               count++;
-               bit++;
-       }
-
-       return count;
+       return (u16)ice_bitmap_hweight(free_idx, ICE_MAX_FV_WORDS);
 }
 
 /**