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

  
 
  

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

NAME
     rte_soring.h

SYNOPSIS
     #include <rte_ring.h>

   Macros
     #define RTE_SORING_ST_BIT	 30
     #define RTE_SORING_ELEM_MAX   (RTE_BIT32(RTE_SORING_ST_BIT) - 1)

   Functions
     __rte_experimental  ssize_t  rte_soring_get_memsize  (const struct rte_sor-
	 ing_param *prm)
     __rte_experimental int rte_soring_init (struct rte_soring *r, const  struct
	 rte_soring_param *prm)
     __rte_experimental  unsigned  int rte_soring_count (const struct rte_soring
	 *r)
     __rte_experimental  unsigned  int	 rte_soring_free_count	 (const   struct
	 rte_soring *r)
     __rte_experimental  void  rte_soring_dump (FILE *f, const struct rte_soring
	 *r)
     __rte_experimental uint32_t rte_soring_enqueue_bulk (struct rte_soring  *r,
	 const void *objs, uint32_t n, uint32_t *free_space)
     __rte_experimental  uint32_t rte_soring_enqueux_bulk (struct rte_soring *r,
	 const void *objs, const void *meta, uint32_t n, uint32_t *free_space)
     __rte_experimental uint32_t rte_soring_enqueue_burst (struct rte_soring *r,
	 const void *objs, uint32_t n, uint32_t *free_space)
     __rte_experimental uint32_t rte_soring_enqueux_burst (struct rte_soring *r,
	 const void *objs, const void *meta, uint32_t n, uint32_t *free_space)
     __rte_experimental uint32_t rte_soring_dequeue_bulk (struct rte_soring  *r,
	 void *objs, uint32_t num, uint32_t *available)
     __rte_experimental  uint32_t rte_soring_dequeux_bulk (struct rte_soring *r,
	 void *objs, void *meta, uint32_t num, uint32_t *available)
     __rte_experimental uint32_t rte_soring_dequeue_burst (struct rte_soring *r,
	 void *objs, uint32_t num, uint32_t *available)
     __rte_experimental uint32_t rte_soring_dequeux_burst (struct rte_soring *r,
	 void *objs, void *meta, uint32_t num, uint32_t *available)
     __rte_experimental uint32_t rte_soring_acquire_bulk (struct rte_soring  *r,
	 void  *objs,  uint32_t  stage, uint32_t num, uint32_t *ftoken, uint32_t
	 *available)
     __rte_experimental uint32_t rte_soring_acquirx_bulk (struct rte_soring  *r,
	 void *objs, void *meta, uint32_t stage, uint32_t num, uint32_t *ftoken,
	 uint32_t *available)
     __rte_experimental uint32_t rte_soring_acquire_burst (struct rte_soring *r,
	 void  *objs,  uint32_t  stage, uint32_t num, uint32_t *ftoken, uint32_t
	 *available)
     __rte_experimental uint32_t rte_soring_acquirx_burst (struct rte_soring *r,
	 void *objs, void *meta, uint32_t stage, uint32_t num, uint32_t *ftoken,
	 uint32_t *available)
     __rte_experimental void rte_soring_release  (struct  rte_soring  *r,  const
	 void *objs, uint32_t stage, uint32_t n, uint32_t ftoken)
     __rte_experimental  void  rte_soring_releasx  (struct  rte_soring *r, const
	 void *objs, const void *meta, uint32_t stage, uint32_t n, uint32_t fto-
	 ken)

Detailed Description
     This file contains definition of DPDK soring (Staged Ordered  Ring)  public
     API.  Brief description: enqueue/dequeue works the same as for conventional
     rte_ring: any rte_ring sync types can be used, etc.  Plus	there  could  be
     multiple  'stages'.  For each stage there is an acquire (start) and release
     (finish) operation. after some elems are 'acquired' - user can  safely  as-
     sume  having exclusive possession of these elems till 'release' for them is
     done. Note that right now user has to release exactly the	same  number  of
     elems  acquired  before.  After  'release', elems can be 'acquired' by next
     stage and/or dequeued (in case of last stage). Extra debugging might be en-
     abled with RTE_SORING_DEBUG macro.

     Definition in file rte_soring.h.

Macro Definition Documentation
   #define RTE_SORING_ST_BIT   30
     upper 2 bits are used for status

     Definition at line 33 of file rte_soring.h.

   #define RTE_SORING_ELEM_MAX	 (RTE_BIT32(RTE_SORING_ST_BIT) - 1)
     max possible number of elements in the soring

     Definition at line 36 of file rte_soring.h.

Function Documentation
   __rte_experimental  ssize_t	rte_soring_get_memsize	(const	struct	rte_sor-
     ing_param * prm)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Calculate the memory size needed for a soring

     This  function  returns  the number of bytes needed for a soring, given the
     expected parameters for it. This value is the sum of the size of the inter-
     nal metadata and the size of the memory needed by the  actual  soring  ele-
     ments and their metadata. The value is aligned to a cache line size.

     Parameters
	 prm Pointer to the structure that contains soring creation parameters.

     Returns

	 * The memory size needed for the soring on success.

	 * -EINVAL if provided parameter values are invalid.

   __rte_experimental  int  rte_soring_init (struct rte_soring * r, const struct
     rte_soring_param * prm)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Initialize a soring structure.

     Initialize a soring structure in memory pointed by 'r'.  The  size  of  the
     memory  area  must  be large enough to store the soring internal structures
     plus the objects and  metadata  tables.  It  is  strongly	advised  to  use
     rte_soring_get_memsize() to get the appropriate size.

     Parameters
	 r Pointer to the soring structure.
	 prm Pointer to the structure that contains soring creation parameters.

     Returns

	 * 0 on success, or a negative error code.

   __rte_experimental  unsigned  int rte_soring_count (const struct rte_soring *
     r)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Return the total number of filled entries in a soring.

     Parameters
	 r A pointer to the soring structure.

     Returns
	 The number of entries in the soring.

   __rte_experimental unsigned int rte_soring_free_count (const struct	rte_sor-
     ing * r)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Return the total number of unfilled entries in a soring.

     Parameters
	 r A pointer to the soring structure.

     Returns
	 The number of free entries in the soring.

   __rte_experimental  void rte_soring_dump (FILE * f, const struct rte_soring *
     r)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Dump the status of the soring

     Parameters
	 f A pointer to a file for output
	 r Pointer to the soring structure.

   __rte_experimental uint32_t rte_soring_enqueue_bulk (struct rte_soring  *  r,
     const void * objs, uint32_t n, uint32_t * free_space)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Enqueue several objects on the soring. Enqueues exactly requested number of
     objects or none.

     Parameters
	 r A pointer to the soring structure.
	 objs  A  pointer  to an array of objects to enqueue. Size of objects to
	 enqueue must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 n The number of objects to add in the soring from the 'objs'.
	 free_space if non-NULL, returns the amount of space in the soring after
	 the enqueue operation has finished.

     Returns

	 * Actual number of objects enqueued, either 0 or n.

   __rte_experimental uint32_t rte_soring_enqueux_bulk (struct rte_soring  *  r,
     const void * objs, const void * meta, uint32_t n, uint32_t * free_space)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Enqueue  several  objects plus metadata on the soring. Enqueues exactly re-
     quested number of objects or none.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to enqueue. Size  of  objects  to
	 enqueue must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 meta  A  pointer  to an array of metadata values for each object to en-
	 queue. Note that if user not using object metadata  values,  then  this
	 parameter  can be NULL. Size of elements in this array must be the same
	 value as 'meta_size' parameter used while creating the soring. If  user
	 created  the soring with 'meta_size' value equals zero, then 'meta' pa-
	 rameter should be NULL. Otherwise the results are undefined.
	 n The number of objects to add in the soring from the 'objs'.
	 free_space if non-NULL, returns the amount of space in the soring after
	 the enqueue operation has finished.

     Returns

	 * Actual number of objects enqueued, either 0 or n.

   __rte_experimental uint32_t rte_soring_enqueue_burst (struct rte_soring *  r,
     const void * objs, uint32_t n, uint32_t * free_space)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Enqueue  several  objects on the soring. Enqueues up to requested number of
     objects.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to enqueue. Size  of  objects  to
	 enqueue must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 n The number of objects to add in the soring from the 'objs'.
	 free_space if non-NULL, returns the amount of space in the soring after
	 the enqueue operation has finished.

     Returns

	 * Actual number of objects enqueued.

   __rte_experimental  uint32_t rte_soring_enqueux_burst (struct rte_soring * r,
     const void * objs, const void * meta, uint32_t n, uint32_t * free_space)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Enqueue several objects plus metadata on the soring.  Enqueues  up  to  re-
     quested number of objects.

     Parameters
	 r A pointer to the soring structure.
	 objs  A  pointer  to an array of objects to enqueue. Size of objects to
	 enqueue must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 meta A pointer to an array of metadata values for each  object  to  en-
	 queue.  Note  that  if user not using object metadata values, then this
	 parameter can be NULL. Size of elements in this array must be the  same
	 value	as 'meta_size' parameter used while creating the soring. If user
	 created the soring with 'meta_size' value equals zero, then 'meta'  pa-
	 rameter should be NULL. Otherwise the results are undefined.
	 n The number of objects to add in the soring from the 'objs'.
	 free_space if non-NULL, returns the amount of space in the soring after
	 the enqueue operation has finished.

     Returns

	 * Actual number of objects enqueued.

   __rte_experimental  uint32_t  rte_soring_dequeue_bulk (struct rte_soring * r,
     void * objs, uint32_t num, uint32_t * available)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Dequeue several objects from the soring. Dequeues exactly requested  number
     of objects or none.

     Parameters
	 r A pointer to the soring structure.
	 objs  A  pointer  to an array of objects to dequeue. Size of objects to
	 enqueue must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 num The number of objects to dequeue from the soring into the objs.
	 available If non-NULL, returns the number of remaining  soring  entries
	 after the dequeue has finished.

     Returns

	 * Actual number of objects dequeued, either 0 or 'num'.

   __rte_experimental  uint32_t  rte_soring_dequeux_bulk (struct rte_soring * r,
     void * objs, void * meta, uint32_t num, uint32_t * available)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Dequeue several objects plus metadata from the soring. Dequeues exactly re-
     quested number of objects or none.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to dequeue. Size  of  objects  to
	 enqueue must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 meta  A pointer to array of metadata values for each object to dequeue.
	 Note that if user not using object metadata values, then this parameter
	 can be NULL. Size of elements in this array must be the same  value  as
	 'meta_size'  parameter  used while creating the soring. If user created
	 the soring with 'meta_size' value equals zero,  then  'meta'  parameter
	 should be NULL. Otherwise the results are undefined.
	 num The number of objects to dequeue from the soring into the objs.
	 available  If	non-NULL, returns the number of remaining soring entries
	 after the dequeue has finished.

     Returns

	 * Actual number of objects dequeued, either 0 or 'num'.

   __rte_experimental uint32_t rte_soring_dequeue_burst (struct rte_soring *  r,
     void * objs, uint32_t num, uint32_t * available)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Dequeue several objects from the soring. Dequeues up to requested number of
     objects.

     Parameters
	 r A pointer to the soring structure.
	 objs  A  pointer  to an array of objects to dequeue. Size of objects to
	 enqueue must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 num The number of objects to dequeue from the soring into the objs.
	 available If non-NULL, returns the number of remaining  soring  entries
	 after the dequeue has finished.

     Returns

	 * Actual number of objects dequeued.

   __rte_experimental  uint32_t rte_soring_dequeux_burst (struct rte_soring * r,
     void * objs, void * meta, uint32_t num, uint32_t * available)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Dequeue several objects plus metadata from the soring. Dequeues up  to  re-
     quested number of objects.

     Parameters
	 r A pointer to the soring structure.
	 objs  A  pointer  to an array of objects to dequeue. Size of objects to
	 enqueue must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 meta A pointer to array of metadata values for each object to	dequeue.
	 Note that if user not using object metadata values, then this parameter
	 can  be  NULL. Size of elements in this array must be the same value as
	 'meta_size' parameter used while creating the soring. If  user  created
	 the  soring  with  'meta_size' value equals zero, then 'meta' parameter
	 should be NULL. Otherwise the results are undefined.
	 num The number of objects to dequeue from the soring into the objs.
	 available If non-NULL, returns the number of remaining  soring  entries
	 after the dequeue has finished.

     Returns

	 * Actual number of objects dequeued.

   __rte_experimental  uint32_t  rte_soring_acquire_bulk (struct rte_soring * r,
     void * objs, uint32_t stage, uint32_t num, uint32_t *  ftoken,  uint32_t  *
     available)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Acquire  several  objects from the soring for given stage. Acquires exactly
     requested number of objects or none.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to acquire. Size of objects  must
	 be the same value as 'elem_size' parameter used while creating the sor-
	 ing. Otherwise the results are undefined.
	 stage Stage to acquire objects for.
	 num The number of objects to acquire.
	 ftoken  Pointer  to the opaque 'token' value used by release() op. User
	 has to store this value somewhere, and later provide to the release().
	 available If non-NULL, returns the number of remaining  soring  entries
	 for given stage after the acquire has finished.

     Returns

	 * Actual number of objects acquired, either 0 or 'num'.

   __rte_experimental  uint32_t  rte_soring_acquirx_bulk (struct rte_soring * r,
     void * objs, void * meta, uint32_t stage, uint32_t num, uint32_t *  ftoken,
     uint32_t * available)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Acquire  several objects plus metadata from the soring for given stage. Ac-
     quires exactly requested number of objects or none.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to acquire. Size of objects  must
	 be the same value as 'elem_size' parameter used while creating the sor-
	 ing. Otherwise the results are undefined.
	 meta  A  pointer  to  an array of metadata values for each for each ac-
	 quired object. Note that if user not using object metadata values, then
	 this parameter can be NULL. Size of elements in this array must be  the
	 same  value as 'meta_size' parameter used while creating the soring. If
	 user created the soring with 'meta_size' value equals zero, then 'meta'
	 parameter should be NULL. Otherwise the results are undefined.
	 stage Stage to acquire objects for.
	 num The number of objects to acquire.
	 ftoken Pointer to the opaque 'token' value used by release()  op.  User
	 has to store this value somewhere, and later provide to the release().
	 available  If	non-NULL, returns the number of remaining soring entries
	 for given stage after the acquire has finished.

     Returns

	 * Actual number of objects acquired, either 0 or 'num'.

   __rte_experimental uint32_t rte_soring_acquire_burst (struct rte_soring *  r,
     void  *  objs,  uint32_t stage, uint32_t num, uint32_t * ftoken, uint32_t *
     available)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Acquire several objects from the soring for given stage. Acquires up to re-
     quested number of objects.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to acquire. Size of objects  must
	 be the same value as 'elem_size' parameter used while creating the sor-
	 ing. Otherwise the results are undefined.
	 stage Stage to acquire objects for.
	 num The number of objects to acquire.
	 ftoken  Pointer  to the opaque 'token' value used by release() op. User
	 has to store this value somewhere, and later provide to the release().
	 available If non-NULL, returns the number of remaining  soring  entries
	 for given stage after the acquire has finished.

     Returns

	 * Actual number of objects acquired.

   __rte_experimental  uint32_t rte_soring_acquirx_burst (struct rte_soring * r,
     void * objs, void * meta, uint32_t stage, uint32_t num, uint32_t *  ftoken,
     uint32_t * available)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Acquire  several objects plus metadata from the soring for given stage. Ac-
     quires up to requested number of objects.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to acquire. Size of objects  must
	 be the same value as 'elem_size' parameter used while creating the sor-
	 ing. Otherwise the results are undefined.
	 meta  A  pointer  to  an array of metadata values for each for each ac-
	 quired object. Note that if user not using object metadata values, then
	 this parameter can be NULL. Size of elements in this array must be  the
	 same  value as 'meta_size' parameter used while creating the soring. If
	 user created the soring with 'meta_size' value equals zero, then 'meta'
	 parameter should be NULL. Otherwise the results are undefined.
	 stage Stage to acquire objects for.
	 num The number of objects to acquire.
	 ftoken Pointer to the opaque 'token' value used by release()  op.  User
	 has to store this value somewhere, and later provide to the release().
	 available  If	non-NULL, returns the number of remaining soring entries
	 for given stage after the acquire has finished.

     Returns

	 * Actual number of objects acquired.

   __rte_experimental void rte_soring_release (struct rte_soring * r, const void
     * objs, uint32_t stage, uint32_t n, uint32_t ftoken)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Release several objects for given stage back to the soring.  Note	that  it
     means these objects become available for next stage or dequeue.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to release. Note that unless user
	 needs	to  overwrite soring objects this parameter can be NULL. Size of
	 objects must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 stage Current stage.
	 n The number of objects to release. Has to be the  same  value  as  re-
	 turned by acquire() op.
	 ftoken Opaque 'token' value obtained from acquire() op.

   __rte_experimental void rte_soring_releasx (struct rte_soring * r, const void
     * objs, const void * meta, uint32_t stage, uint32_t n, uint32_t ftoken)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Release  several  objects plus metadata for given stage back to the soring.
     Note that it means these objects become available for  next  stage  or  de-
     queue.

     Parameters
	 r A pointer to the soring structure.
	 objs A pointer to an array of objects to release. Note that unless user
	 needs	to  overwrite soring objects this parameter can be NULL. Size of
	 objects must be the same value as 'elem_size' parameter used while cre-
	 ating the soring. Otherwise the results are undefined.
	 meta A pointer to an array of metadata values for each  object  to  re-
	 lease.  Note  that  if user not using object metadata values, then this
	 parameter can be NULL. Size of elements in this array must be the  same
	 value	as 'meta_size' parameter used while creating the soring. If user
	 created the soring with 'meta_size' value equals zero, then meta  para-
	 meter should be NULL. Otherwise the results are undefined.
	 stage Current stage.
	 n  The  number  of  objects to release. Has to be the same value as re-
	 turned by acquire() op.
	 ftoken Opaque 'token' value obtained from acquire() op.

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

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

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

home | help