Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
rte_bitmap.h(3) 		      DPDK			 rte_bitmap.h(3)

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>

   Data Structures
     struct rte_bitmap

   Functions
     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 void 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)

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 (ar-
     ray1 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 as-
     sociated 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 paral-
     lel  with	the writer thread. When the use of locking primitives is accept-
     able, 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
   static uint32_t rte_bitmap_get_memory_footprint (uint32_t  n_bits)  [inline],
     [static]
     Bitmap memory footprint calculation

     Parameters
	 n_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.

   static  struct  rte_bitmap * rte_bitmap_init (uint32_t n_bits, uint8_t * mem,
     uint32_t mem_size) [inline],  [static]
     Bitmap initialization

     Parameters
	 n_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.

   static void __rte_bitmap_clear_slab_overhead_bits (uint64_t * slabs, uint32_t
     slab_size, uint32_t pos) [inline],  [static]
     Bitmap clear slab overhead bits.

     Parameters
	 slabs 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.

   static struct rte_bitmap  *	rte_bitmap_init_with_all_set  (uint32_t  n_bits,
     uint8_t * mem, uint32_t mem_size) [inline],  [static]
     Bitmap initialization with all bits set

     Parameters
	 n_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.

   static void rte_bitmap_free (struct rte_bitmap * bmp) [inline],  [static]
     Bitmap free

     This function does nothing in current implementation.

     Parameters
	 bmp Handle to bitmap instance

     Definition at line 291 of file rte_bitmap.h.

   static void rte_bitmap_reset (struct rte_bitmap * bmp) [inline],  [static]
     Bitmap reset

     Parameters
	 bmp Handle to bitmap instance

     Definition at line 303 of file rte_bitmap.h.

   static void rte_bitmap_prefetch0 (struct rte_bitmap * bmp, uint32_t pos) [in-
     line],  [static]
     Bitmap location prefetch into CPU L1 cache

     Parameters
	 bmp Handle to bitmap instance
	 pos Bit position

     Definition at line 319 of file rte_bitmap.h.

   static  uint64_t  rte_bitmap_get (struct rte_bitmap * bmp, uint32_t pos) [in-
     line],  [static]
     Bitmap bit get

     Parameters
	 bmp Handle to bitmap instance
	 pos Bit position

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

     Definition at line 340 of file rte_bitmap.h.

   static void rte_bitmap_set (struct rte_bitmap * bmp, uint32_t pos)  [inline],
     [static]
     Bitmap bit set

     Parameters
	 bmp Handle to bitmap instance
	 pos Bit position

     Definition at line 360 of file rte_bitmap.h.

   static  void  rte_bitmap_set_slab  (struct  rte_bitmap  *  bmp, uint32_t pos,
     uint64_t slab) [inline],  [static]
     Bitmap slab set

     Parameters
	 bmp 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 388 of file rte_bitmap.h.

   static void rte_bitmap_clear (struct rte_bitmap *  bmp,  uint32_t  pos)  [in-
     line],  [static]
     Bitmap bit clear

     Parameters
	 bmp Handle to bitmap instance
	 pos Bit position

     Definition at line 453 of file rte_bitmap.h.

   static int rte_bitmap_scan (struct rte_bitmap * bmp, uint32_t * pos, uint64_t
     * slab) [inline],	[static]
     Bitmap scan (with automatic wrap-around)

     Parameters
	 bmp 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 en-
	 tire 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 re-
	 turned 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 562 of file rte_bitmap.h.

Author
     Generated automatically by Doxygen for DPDK from the source code.

Version 25.11.0 		 Thu Aug 27 2026		 rte_bitmap.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rte_bitmap_scan&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help