logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Author

       Generated automatically by Doxygen for DPDK from the source code.

DPDK                                             Version 24.11.2                                 rte_bitmap.h(3)

Detailed Description

       RTE Bitmap

       The bitmap component provides a mechanism to manage large arrays of bits through bit get/set/clear and
       bit array scan operations.

       The bitmap scan operation is optimized for 64-bit CPUs using 64/128 byte cache lines. The bitmap is
       hierarchically organized using two arrays (array1 and array2), with each bit in array1 being associated
       with a full cache line (512/1024 bits) of bitmap bits, which are stored in array2: the bit in array1 is
       set only when there is at least one bit set within its associated array2 bits, otherwise the bit in
       array1 is cleared. The read and write operations for array1 and array2 are always done in slabs of 64
       bits.

       This bitmap is not thread safe. For lock free operation on a specific bitmap instance, a single writer
       thread performing bit set/clear operations is allowed, only the writer thread can do bitmap scan
       operations, while there can be several reader threads performing bit get operations in parallel with the
       writer thread. When the use of locking primitives is acceptable, the serialization of the bit set/clear
       and bitmap scan operations needs to be enforced by the caller, while the bit get operation does not
       require locking the bitmap.

       Definition in file rte_bitmap.h.

Function Documentation

staticuint32_trte_bitmap_get_memory_footprint(uint32_tn_bits)[inline],[static]
       Bitmap memory footprint calculation

       Parametersn_bits Number of bits in the bitmap

       Returns
           Bitmap memory footprint measured in bytes on success, 0 on error

       Definition at line 148 of file rte_bitmap.h.

   staticstructrte_bitmap*rte_bitmap_init(uint32_tn_bits,uint8_t*mem,uint32_tmem_size)[inline],[static]
       Bitmap initialization

       Parametersn_bits Number of pre-allocated bits in array2.
           mem Base address of array1 and array2.
           mem_size Minimum expected size of bitmap.

       Returns
           Handle to bitmap instance.

       Definition at line 170 of file rte_bitmap.h.

   staticvoid__rte_bitmap_clear_slab_overhead_bits(uint64_t*slabs,uint32_tslab_size,uint32_tpos)[inline],[static]
       Bitmap clear slab overhead bits.

       Parametersslabs Slab array.
           slab_size Number of 64-bit slabs in the slabs array.
           pos The start bit position in the slabs to be cleared.

       Definition at line 216 of file rte_bitmap.h.

   staticstructrte_bitmap*rte_bitmap_init_with_all_set(uint32_tn_bits,uint8_t*mem,uint32_tmem_size)[inline],[static]
       Bitmap initialization with all bits set

       Parametersn_bits Number of pre-allocated bits in array2.
           mem Base address of array1 and array2.
           mem_size Minimum expected size of bitmap.

       Returns
           Handle to bitmap instance.

       Definition at line 246 of file rte_bitmap.h.

   staticintrte_bitmap_free(structrte_bitmap*bmp)[inline],[static]
       Bitmap free

       Parametersbmp Handle to bitmap instance

       Returns
           0 upon success, error code otherwise

       Definition at line 291 of file rte_bitmap.h.

   staticvoidrte_bitmap_reset(structrte_bitmap*bmp)[inline],[static]
       Bitmap reset

       Parametersbmp Handle to bitmap instance

       Definition at line 308 of file rte_bitmap.h.

   staticvoidrte_bitmap_prefetch0(structrte_bitmap*bmp,uint32_tpos)[inline],[static]
       Bitmap location prefetch into CPU L1 cache

       Parametersbmp Handle to bitmap instance
           pos Bit position

       Definition at line 324 of file rte_bitmap.h.

   staticuint64_trte_bitmap_get(structrte_bitmap*bmp,uint32_tpos)[inline],[static]
       Bitmap bit get

       Parametersbmp Handle to bitmap instance
           pos Bit position

       Returns
           0 when bit is cleared, non-zero when bit is set

       Definition at line 345 of file rte_bitmap.h.

   staticvoidrte_bitmap_set(structrte_bitmap*bmp,uint32_tpos)[inline],[static]
       Bitmap bit set

       Parametersbmp Handle to bitmap instance
           pos Bit position

       Definition at line 365 of file rte_bitmap.h.

   staticvoidrte_bitmap_set_slab(structrte_bitmap*bmp,uint32_tpos,uint64_tslab)[inline],[static]
       Bitmap slab set

       Parametersbmp Handle to bitmap instance
           pos Bit position identifying the array2 slab
           slab Value to be assigned to the 64-bit slab in array2

       Definition at line 393 of file rte_bitmap.h.

   staticvoidrte_bitmap_clear(structrte_bitmap*bmp,uint32_tpos)[inline],[static]
       Bitmap bit clear

       Parametersbmp Handle to bitmap instance
           pos Bit position

       Definition at line 458 of file rte_bitmap.h.

   staticintrte_bitmap_scan(structrte_bitmap*bmp,uint32_t*pos,uint64_t*slab)[inline],[static]
       Bitmap scan (with automatic wrap-around)

       Parametersbmp Handle to bitmap instance
           pos When function call returns 1, pos contains the position of the next set bit, otherwise not
           modified
           slab When function call returns 1, slab contains the value of the entire 64-bit slab where the bit
           indicated by pos is located. Slabs are always 64-bit aligned, so the position of the first bit of the
           slab (this bit is not necessarily set) is pos / 64. Once a slab has been returned by the bitmap scan
           operation, the internal pointers of the bitmap are updated to point after this slab, so the same slab
           will not be returned again if it contains more than one bit which is set. When function call returns
           0, slab is not modified.

       Returns
           0 if there is no bit set in the bitmap, 1 otherwise

       Definition at line 567 of file rte_bitmap.h.

Name

       rte_bitmap.h

Synopsis

       #include <string.h>
       #include <rte_common.h>
       #include <rte_config.h>
       #include <rte_debug.h>
       #include <rte_memory.h>
       #include <rte_branch_prediction.h>
       #include <rte_prefetch.h>

   DataStructures
       struct rte_bitmapFunctions
       static uint32_t rte_bitmap_get_memory_footprint (uint32_t n_bits)
       static struct rte_bitmap * rte_bitmap_init (uint32_t n_bits, uint8_t *mem, uint32_t mem_size)
       static void __rte_bitmap_clear_slab_overhead_bits (uint64_t *slabs, uint32_t slab_size, uint32_t pos)
       static struct rte_bitmap * rte_bitmap_init_with_all_set (uint32_t n_bits, uint8_t *mem, uint32_t
           mem_size)
       static int rte_bitmap_free (struct rte_bitmap *bmp)
       static void rte_bitmap_reset (struct rte_bitmap *bmp)
       static void rte_bitmap_prefetch0 (struct rte_bitmap *bmp, uint32_t pos)
       static uint64_t rte_bitmap_get (struct rte_bitmap *bmp, uint32_t pos)
       static void rte_bitmap_set (struct rte_bitmap *bmp, uint32_t pos)
       static void rte_bitmap_set_slab (struct rte_bitmap *bmp, uint32_t pos, uint64_t slab)
       static void rte_bitmap_clear (struct rte_bitmap *bmp, uint32_t pos)
       static int rte_bitmap_scan (struct rte_bitmap *bmp, uint32_t *pos, uint64_t *slab)

See Also