From: Qi Zhang Date: Wed, 26 Aug 2020 08:49:14 +0000 (+0800) Subject: net/ice/base: introduce and use bitmap hamming weight API X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=6d288fa5f72b04e914d249d539501b4a418d54d9;p=dpdk.git net/ice/base: introduce and use bitmap hamming weight API Introduce ice_bitmap_hweight() and use it instead of open-coding that functionality. Signed-off-by: Bruce Allan Signed-off-by: Qi Zhang Acked-by: Qiming Yang --- diff --git a/drivers/net/ice/base/ice_bitops.h b/drivers/net/ice/base/ice_bitops.h index 8352b5dd7a..a56d554555 100644 --- a/drivers/net/ice/base/ice_bitops.h +++ b/drivers/net/ice/base/ice_bitops.h @@ -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 diff --git a/drivers/net/ice/base/ice_switch.c b/drivers/net/ice/base/ice_switch.c index 41ebfedc6e..ecb4117140 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); } /**