|
DPDK 26.11.0-rc2
|
#include <stdalign.h>#include <rte_debug.h>#include <rte_errno.h>#include <rte_memzone.h>#include <rte_spinlock.h>#include "rte_stack_std.h"#include "rte_stack_lf.h"#include "rte_stack_pile.h"Go to the source code of this file.
Macros | |
| #define | RTE_STACK_NAMESIZE |
| #define | RTE_STACK_F_LF 0x0001 |
| #define | RTE_STACK_F_PILE 0x0002 |
Functions | |
| struct | __rte_aligned (16) rte_stack_lf_head |
| static __rte_always_inline unsigned int | rte_stack_push (struct rte_stack *s, void *const *obj_table, unsigned int n) |
| static __rte_always_inline unsigned int | rte_stack_pop (struct rte_stack *s, void **obj_table, unsigned int n) |
| static __rte_always_inline unsigned int | rte_stack_count (struct rte_stack *s) |
| static __rte_always_inline unsigned int | rte_stack_free_count (struct rte_stack *s) |
| struct rte_stack * | rte_stack_create (const char *name, unsigned int count, int socket_id, uint32_t flags) |
| void | rte_stack_free (struct rte_stack *s) |
| struct rte_stack * | rte_stack_lookup (const char *name) |
RTE Stack.
librte_stack provides an API for configuration and use of a bounded stack of pointers. Push and pop operations are MT-safe, allowing concurrent access, and the interface supports pushing and popping multiple pointers at a time.
Definition in file rte_stack.h.
| #define RTE_STACK_NAMESIZE |
The maximum length of a stack name.
Definition at line 29 of file rte_stack.h.
| #define RTE_STACK_F_LF 0x0001 |
The stack uses lock-free push and pop functions. This flag is only supported on x86_64 or arm64 platforms, currently.
Definition at line 137 of file rte_stack.h.
| #define RTE_STACK_F_PILE 0x0002 |
The stack-like pile uses lock-free push and pop functions. It is optimized for bulks of objects, and is not strictly LIFO, and is not strictly bounded by its size, but might hold more objects. This flag is only supported on x86_64 or arm64 platforms, currently.
Definition at line 148 of file rte_stack.h.
| struct __rte_aligned | ( | 16 | ) |
< Stack top
< Modification counter for avoiding ABA problem
Definition at line 56 of file rte_stack.h.
|
static |
Push several objects on the stack (MT-safe).
| s | A pointer to the stack structure. |
| obj_table | A pointer to a table of void * pointers (objects). |
| n | The number of objects to push on the stack from the obj_table. |
Definition at line 171 of file rte_stack.h.
|
static |
Pop several objects from the stack (MT-safe).
| s | A pointer to the stack structure. |
| obj_table | A pointer to a table of void * pointers (objects). |
| n | The number of objects to pull from the stack. |
Definition at line 197 of file rte_stack.h.
|
static |
Return the number of used entries in a stack.
| s | A pointer to the stack structure. |
Definition at line 219 of file rte_stack.h.
|
static |
Return the number of free entries in a stack.
| s | A pointer to the stack structure. |
Definition at line 240 of file rte_stack.h.
| struct rte_stack * rte_stack_create | ( | const char * | name, |
| unsigned int | count, | ||
| int | socket_id, | ||
| uint32_t | flags | ||
| ) |
Create a new stack named name in memory.
This function uses memzone_reserve() to allocate memory for a stack of size count. The behavior of the stack is controlled by the flags.
| name | The name of the stack. |
| count | The size of the stack. |
| socket_id | The socket_id argument is the socket identifier in case of NUMA. The value can be SOCKET_ID_ANY if there is no NUMA constraint for the reserved zone. |
| flags | An OR of the following:
|
| void rte_stack_free | ( | struct rte_stack * | s | ) |
Free all memory used by the stack.
| s | Pointer to stack created with rte_stack_create(). If s is NULL, no operation is performed. |
| struct rte_stack * rte_stack_lookup | ( | const char * | name | ) |
Lookup a stack by its name.
| name | The name of the stack. |