Introduce ice_bitmap_hweight() and use it instead of open-coding that functionality.
Signed-off-by: Bruce Allan <bruce.w.al...@intel.com> Signed-off-by: Qi Zhang <qi.z.zh...@intel.com> --- drivers/net/ice/base/ice_bitops.h | 23 +++++++++++++++++++++++ drivers/net/ice/base/ice_switch.c | 11 +---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/drivers/net/ice/base/ice_bitops.h b/drivers/net/ice/base/ice_bitops.h index 8352b5dd7..a56d55455 100644 --- a/drivers/net/ice/base/ice_bitops.h +++ b/drivers/net/ice/base/ice_bitops.h @@ -395,6 +395,29 @@ ice_bitmap_set(ice_bitmap_t *dst, u16 pos, u16 num_bits) } /** + * 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 * @bmp2: the bitmap to compare with bmp1 diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c index 41ebfedc6..ecb411714 100644 --- a/drivers/net/ice/base/ice_switch.c +++ b/drivers/net/ice/base/ice_switch.c @@ -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); } /** -- 2.13.6