[PATCH v5] bitmap: add scan from offset function
Thomas Monjalon
thomas at monjalon.net
Wed Jul 3 14:50:19 CEST 2024
03/07/2023 14:39, Volodymyr Fialko:
> Currently, in the case when we search for a bit set after a particular
> value, the bitmap has to be scanned from the beginning and
> rte_bitmap_scan() has to be called multiple times until we hit the value.
>
> Add a new rte_bitmap_scan_from_offset() function to initialize scan
> state at the given offset and perform scan, this will allow getting
> the next set bit after certain offset within one scan call.
>
> Signed-off-by: Volodymyr Fialko <vfialko at marvell.com>
> ---
> v2:
> - added rte_bitmap_scan_from_offset
> v3:
> - added note for internal use only for init_at function
> v4:
> - marked init_at function as __rte_internal
> v5:
> - removed __rte_internal due to build errors
What was the build error?
You should not add an internal function in the public header file.
At least, it should be experimental.
> --- a/lib/eal/include/rte_bitmap.h
> +++ b/lib/eal/include/rte_bitmap.h
> +/**
> + * Bitmap initialize internal scan pointers at the given position for the scan function.
> + *
> + * Note: for private/internal use, for public:
> + * @see rte_bitmap_scan_from_offset()
> + *
> + * @param bmp
> + * Handle to bitmap instance
> + * @param pos
> + * Bit position to start scan
> + */
> +static inline void
> +__rte_bitmap_scan_init_at(struct rte_bitmap *bmp, uint32_t pos)
> +{
> + uint64_t *slab1;
> +
> + bmp->index1 = pos >> (RTE_BITMAP_SLAB_BIT_SIZE_LOG2 + RTE_BITMAP_CL_BIT_SIZE_LOG2);
> + bmp->offset1 = (pos >> RTE_BITMAP_CL_BIT_SIZE_LOG2) & RTE_BITMAP_SLAB_BIT_MASK;
> + bmp->index2 = pos >> RTE_BITMAP_SLAB_BIT_SIZE_LOG2;
> + slab1 = bmp->array1 + bmp->index1;
> + bmp->go2 = *slab1 & (1llu << bmp->offset1);
> +}
More information about the dev
mailing list