---
name: "rte_ring_mc_hts_dequeue_bulk_elem"
section: "3"
platform: "linux"
package: "dpdk-doc"
version: "24.11.4-0+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/rte_ring_hts.h"
---

# rte\_ring\_mc\_hts\_dequeue\_bulk\_elem(3)

Part of [rte\_ring\_hts.h(3)](/rte_ring_hts.h/3.md).

## NAME

rte\_ring\_hts.h

## SYNOPSIS

`#include <rte_ring_hts_elem_pvt.h>`\

### Functions

static **\_\_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\_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\_always\_inline** unsigned int **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\_always\_inline** unsigned int **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\_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\_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\_always\_inline** unsigned int **rte\_ring\_mp\_hts\_enqueue\_burst** (struct **rte\_ring** \*r, void \*const \*obj\_table, unsigned int n, unsigned int \*free\_space)\
 static **\_\_rte\_always\_inline** unsigned int **rte\_ring\_mc\_hts\_dequeue\_burst** (struct **rte\_ring** \*r, void \*\*obj\_table, unsigned int n, unsigned int \*available)\

## Detailed Description

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\_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**

*r* A pointer to the ring structure. \
 *obj\_table* A pointer to a table of objects. \
 *esize* The 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. \
 *n* The number of objects to add in the ring from the obj\_table. \
 *free\_space* if 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 **53** of file **rte\_ring\_hts.h**.

### static \_\_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**

*r* A pointer to the ring structure. \
 *obj\_table* A pointer to a table of objects that will be filled. \
 *esize* The 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. \
 *n* The number of objects to dequeue from the ring to the obj\_table. \
 *available* If 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 **80** of file **rte\_ring\_hts.h**.

### static \_\_rte\_always\_inline unsigned int 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**

*r* A pointer to the ring structure. \
 *obj\_table* A pointer to a table of objects. \
 *esize* The 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. \
 *n* The number of objects to add in the ring from the obj\_table. \
 *free\_space* if 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 **107** of file **rte\_ring\_hts.h**.

### static \_\_rte\_always\_inline unsigned int 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**

*r* A pointer to the ring structure. \
 *obj\_table* A pointer to a table of objects that will be filled. \
 *esize* The 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. \
 *n* The number of objects to dequeue from the ring to the obj\_table. \
 *available* If 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 **136** of file **rte\_ring\_hts.h**.

### static \_\_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**

*r* A pointer to the ring structure. \
 *obj\_table* A pointer to a table of void \* pointers (objects). \
 *n* The number of objects to add in the ring from the obj\_table. \
 *free\_space* if 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 **159** of file **rte\_ring\_hts.h**.

### static \_\_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**

*r* A pointer to the ring structure. \
 *obj\_table* A pointer to a table of void \* pointers (objects) that will be filled. \
 *n* The number of objects to dequeue from the ring to the obj\_table. \
 *available* If 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 **182** of file **rte\_ring\_hts.h**.

### static \_\_rte\_always\_inline unsigned int 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**

*r* A pointer to the ring structure. \
 *obj\_table* A pointer to a table of void \* pointers (objects). \
 *n* The number of objects to add in the ring from the obj\_table. \
 *free\_space* if 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 **205** of file **rte\_ring\_hts.h**.

### static \_\_rte\_always\_inline unsigned int 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**

*r* A pointer to the ring structure. \
 *obj\_table* A pointer to a table of void \* pointers (objects) that will be filled. \
 *n* The number of objects to dequeue from the ring to the obj\_table. \
 *available* If 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 **230** of file **rte\_ring\_hts.h**.

## Author

Generated automatically by Doxygen for DPDK from the source code.
