DPDK  20.05.0
Functions
rte_ring_hts.h File Reference
#include <rte_ring_hts_c11_mem.h>

Go to the source code of this file.

Functions

static __rte_experimental __rte_always_inline unsigned int rte_ring_mp_hts_enqueue_bulk_elem (struct rte_ring *r, const void *obj_table, unsigned int esize, unsigned int n, unsigned int *free_space)
 
static __rte_experimental __rte_always_inline unsigned int rte_ring_mc_hts_dequeue_bulk_elem (struct rte_ring *r, void *obj_table, unsigned int esize, unsigned int n, unsigned int *available)
 
static __rte_experimental __rte_always_inline unsigned rte_ring_mp_hts_enqueue_burst_elem (struct rte_ring *r, const void *obj_table, unsigned int esize, unsigned int n, unsigned int *free_space)
 
static __rte_experimental __rte_always_inline unsigned rte_ring_mc_hts_dequeue_burst_elem (struct rte_ring *r, void *obj_table, unsigned int esize, unsigned int n, unsigned int *available)
 
static __rte_experimental __rte_always_inline unsigned int rte_ring_mp_hts_enqueue_bulk (struct rte_ring *r, void *const *obj_table, unsigned int n, unsigned int *free_space)
 
static __rte_experimental __rte_always_inline unsigned int rte_ring_mc_hts_dequeue_bulk (struct rte_ring *r, void **obj_table, unsigned int n, unsigned int *available)
 
static __rte_experimental __rte_always_inline unsigned rte_ring_mp_hts_enqueue_burst (struct rte_ring *r, void *const *obj_table, unsigned int n, unsigned int *free_space)
 
static __rte_experimental __rte_always_inline unsigned rte_ring_mc_hts_dequeue_burst (struct rte_ring *r, void **obj_table, unsigned int n, unsigned int *available)
 

Detailed Description

EXPERIMENTAL: this API may change without prior notice It is not recommended to include this file directly. Please include <rte_ring.h> instead.

Contains functions for serialized, aka Head-Tail Sync (HTS) ring mode. In that mode enqueue/dequeue operation is fully serialized: at any given moment only one enqueue/dequeue operation can proceed. This is achieved by allowing a thread to proceed with changing head.value only when head.value == tail.value. Both head and tail values are updated atomically (as one 64-bit value). To achieve that 64-bit CAS is used by head update routine.

Definition in file rte_ring_hts.h.

Function Documentation

static __rte_experimental __rte_always_inline unsigned int rte_ring_mp_hts_enqueue_bulk_elem ( struct rte_ring r,
const void *  obj_table,
unsigned int  esize,
unsigned int  n,
unsigned int *  free_space 
)
static

Enqueue several objects on the HTS ring (multi-producers safe).

Parameters
rA pointer to the ring structure.
obj_tableA pointer to a table of objects.
esizeThe size of ring element, in bytes. It must be a multiple of 4. This must be the same value used while creating the ring. Otherwise the results are undefined.
nThe number of objects to add in the ring from the obj_table.
free_spaceif non-NULL, returns the amount of space in the ring after the enqueue operation has finished.
Returns
The number of objects enqueued, either 0 or n

Definition at line 137 of file rte_ring_hts.h.

static __rte_experimental __rte_always_inline unsigned int rte_ring_mc_hts_dequeue_bulk_elem ( struct rte_ring r,
void *  obj_table,
unsigned int  esize,
unsigned int  n,
unsigned int *  available 
)
static

Dequeue several objects from an HTS ring (multi-consumers safe).

Parameters
rA pointer to the ring structure.
obj_tableA pointer to a table of objects that will be filled.
esizeThe size of ring element, in bytes. It must be a multiple of 4. This must be the same value used while creating the ring. Otherwise the results are undefined.
nThe number of objects to dequeue from the ring to the obj_table.
availableIf non-NULL, returns the number of remaining ring entries after the dequeue has finished.
Returns
The number of objects dequeued, either 0 or n

Definition at line 165 of file rte_ring_hts.h.

static __rte_experimental __rte_always_inline unsigned rte_ring_mp_hts_enqueue_burst_elem ( struct rte_ring r,
const void *  obj_table,
unsigned int  esize,
unsigned int  n,
unsigned int *  free_space 
)
static

Enqueue several objects on the HTS ring (multi-producers safe).

Parameters
rA pointer to the ring structure.
obj_tableA pointer to a table of objects.
esizeThe size of ring element, in bytes. It must be a multiple of 4. This must be the same value used while creating the ring. Otherwise the results are undefined.
nThe number of objects to add in the ring from the obj_table.
free_spaceif non-NULL, returns the amount of space in the ring after the enqueue operation has finished.
Returns
  • n: Actual number of objects enqueued.

Definition at line 193 of file rte_ring_hts.h.

static __rte_experimental __rte_always_inline unsigned rte_ring_mc_hts_dequeue_burst_elem ( struct rte_ring r,
void *  obj_table,
unsigned int  esize,
unsigned int  n,
unsigned int *  available 
)
static

Dequeue several objects from an HTS ring (multi-consumers safe). When the requested objects are more than the available objects, only dequeue the actual number of objects.

Parameters
rA pointer to the ring structure.
obj_tableA pointer to a table of objects that will be filled.
esizeThe size of ring element, in bytes. It must be a multiple of 4. This must be the same value used while creating the ring. Otherwise the results are undefined.
nThe number of objects to dequeue from the ring to the obj_table.
availableIf non-NULL, returns the number of remaining ring entries after the dequeue has finished.
Returns
  • n: Actual number of objects dequeued, 0 if ring is empty

Definition at line 223 of file rte_ring_hts.h.

static __rte_experimental __rte_always_inline unsigned int rte_ring_mp_hts_enqueue_bulk ( struct rte_ring r,
void *const *  obj_table,
unsigned int  n,
unsigned int *  free_space 
)
static

Enqueue several objects on the HTS ring (multi-producers safe).

Parameters
rA pointer to the ring structure.
obj_tableA pointer to a table of void * pointers (objects).
nThe number of objects to add in the ring from the obj_table.
free_spaceif non-NULL, returns the amount of space in the ring after the enqueue operation has finished.
Returns
The number of objects enqueued, either 0 or n

Definition at line 247 of file rte_ring_hts.h.

static __rte_experimental __rte_always_inline unsigned int rte_ring_mc_hts_dequeue_bulk ( struct rte_ring r,
void **  obj_table,
unsigned int  n,
unsigned int *  available 
)
static

Dequeue several objects from an HTS ring (multi-consumers safe).

Parameters
rA pointer to the ring structure.
obj_tableA pointer to a table of void * pointers (objects) that will be filled.
nThe number of objects to dequeue from the ring to the obj_table.
availableIf non-NULL, returns the number of remaining ring entries after the dequeue has finished.
Returns
The number of objects dequeued, either 0 or n

Definition at line 271 of file rte_ring_hts.h.

static __rte_experimental __rte_always_inline unsigned rte_ring_mp_hts_enqueue_burst ( struct rte_ring r,
void *const *  obj_table,
unsigned int  n,
unsigned int *  free_space 
)
static

Enqueue several objects on the HTS ring (multi-producers safe).

Parameters
rA pointer to the ring structure.
obj_tableA pointer to a table of void * pointers (objects).
nThe number of objects to add in the ring from the obj_table.
free_spaceif non-NULL, returns the amount of space in the ring after the enqueue operation has finished.
Returns
  • n: Actual number of objects enqueued.

Definition at line 295 of file rte_ring_hts.h.

static __rte_experimental __rte_always_inline unsigned rte_ring_mc_hts_dequeue_burst ( struct rte_ring r,
void **  obj_table,
unsigned int  n,
unsigned int *  available 
)
static

Dequeue several objects from an HTS ring (multi-consumers safe). When the requested objects are more than the available objects, only dequeue the actual number of objects.

Parameters
rA pointer to the ring structure.
obj_tableA pointer to a table of void * pointers (objects) that will be filled.
nThe number of objects to dequeue from the ring to the obj_table.
availableIf non-NULL, returns the number of remaining ring entries after the dequeue has finished.
Returns
  • n: Actual number of objects dequeued, 0 if ring is empty

Definition at line 321 of file rte_ring_hts.h.