X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fbase%2Fice_bitops.h;h=a3a67eb4bf5a28f364189a118672e33ae2dc5ef2;hb=7e5778f880570fc3dfa3d12de15ad153e333a74a;hp=f527130218b5aa5c635558ab73ea21276bdaa0d6;hpb=c9e37832c95f05086c38b6ad5bd2dec0a03ea881;p=dpdk.git diff --git a/drivers/net/ice/base/ice_bitops.h b/drivers/net/ice/base/ice_bitops.h index f527130218..a3a67eb4bf 100644 --- a/drivers/net/ice/base/ice_bitops.h +++ b/drivers/net/ice/base/ice_bitops.h @@ -147,22 +147,15 @@ ice_test_and_set_bit(u16 nr, ice_bitmap_t *bitmap) * @bmp: bitmap to set zeros * @size: Size of the bitmaps in bits * - * This function sets bits of a bitmap to zero. + * Set all of the bits in a bitmap to zero. Note that this function assumes it + * operates on an ice_bitmap_t which was declared using ice_declare_bitmap. It + * will zero every bit in the last chunk, even if those bits are beyond the + * size. */ static inline void ice_zero_bitmap(ice_bitmap_t *bmp, u16 size) { - ice_bitmap_t mask; - u16 i; - - /* Handle all but last chunk*/ - for (i = 0; i < BITS_TO_CHUNKS(size) - 1; i++) - bmp[i] = 0; - /* For the last chunk, we want to take care of not to modify bits - * outside the size boundary. ~mask take care of all the bits outside - * the boundary. - */ - mask = LAST_CHUNK_MASK(size); - bmp[i] &= ~mask; + ice_memset(bmp, 0, BITS_TO_CHUNKS(size) * sizeof(ice_bitmap_t), + ICE_NONDMA_MEM); } /** @@ -198,8 +191,7 @@ ice_and_bitmap(ice_bitmap_t *dst, const ice_bitmap_t *bmp1, * size value alone. */ mask = LAST_CHUNK_MASK(size); - dst[i] &= ~mask; - dst[i] |= (bmp1[i] & bmp2[i]) & mask; + dst[i] = (dst[i] & ~mask) | ((bmp1[i] & bmp2[i]) & mask); res |= dst[i] & mask; return res != 0; @@ -233,8 +225,7 @@ ice_or_bitmap(ice_bitmap_t *dst, const ice_bitmap_t *bmp1, * within the specified size. */ mask = LAST_CHUNK_MASK(size); - dst[i] &= ~mask; - dst[i] |= (bmp1[i] | bmp2[i]) & mask; + dst[i] = (dst[i] & ~mask) | ((bmp1[i] | bmp2[i]) & mask); } /** @@ -313,21 +304,14 @@ static inline bool ice_is_any_bit_set(ice_bitmap_t *bitmap, u16 size) * @src: bitmap to copy from * @size: Size of the bitmaps in bits * - * This function copy bitmap from src to dst. + * This function copy bitmap from src to dst. Note that this function assumes + * it is operating on a bitmap declared using ice_declare_bitmap. It will copy + * the entire last chunk even if this contains bits beyond the size. */ static inline void ice_cp_bitmap(ice_bitmap_t *dst, ice_bitmap_t *src, u16 size) { - ice_bitmap_t mask; - u16 i; - - /* Handle all but last chunk*/ - for (i = 0; i < BITS_TO_CHUNKS(size) - 1; i++) - dst[i] = src[i]; - - /* We want to only copy bits within the size.*/ - mask = LAST_CHUNK_MASK(size); - dst[i] &= ~mask; - dst[i] |= src[i] & mask; + ice_memcpy(dst, src, BITS_TO_CHUNKS(size) * sizeof(ice_bitmap_t), + ICE_NONDMA_TO_NONDMA); } /**