table of contents
rte_atomic.h(3) | DPDK | rte_atomic.h(3) |
NAME¶
rte_atomic.h
SYNOPSIS¶
#include <stdint.h>
#include <rte_common.h>
#include <rte_stdatomic.h>
Data Structures¶
struct rte_atomic16_t
struct rte_atomic32_t
struct rte_atomic64_t
struct __rte_aligned
Macros¶
#define rte_compiler_barrier()
#define RTE_ATOMIC16_INIT(val) { (val) }
#define RTE_ATOMIC32_INIT(val) { (val) }
#define RTE_ATOMIC64_INIT(val) { (val) }
Functions¶
static void rte_atomic_thread_fence (rte_memory_order
memorder)
static int rte_atomic16_cmpset (volatile uint16_t *dst, uint16_t exp,
uint16_t src)
static uint16_t rte_atomic16_exchange (volatile uint16_t *dst, uint16_t
val)
static void rte_atomic16_init (rte_atomic16_t *v)
static int16_t rte_atomic16_read (const rte_atomic16_t *v)
static void rte_atomic16_set (rte_atomic16_t *v, int16_t
new_value)
static void rte_atomic16_add (rte_atomic16_t *v, int16_t inc)
static void rte_atomic16_sub (rte_atomic16_t *v, int16_t dec)
static void rte_atomic16_inc (rte_atomic16_t *v)
static void rte_atomic16_dec (rte_atomic16_t *v)
static int16_t rte_atomic16_add_return (rte_atomic16_t *v,
int16_t inc)
static int16_t rte_atomic16_sub_return (rte_atomic16_t *v,
int16_t dec)
static int rte_atomic16_inc_and_test (rte_atomic16_t *v)
static int rte_atomic16_dec_and_test (rte_atomic16_t *v)
static int rte_atomic16_test_and_set (rte_atomic16_t *v)
static void rte_atomic16_clear (rte_atomic16_t *v)
static int rte_atomic32_cmpset (volatile uint32_t *dst, uint32_t exp,
uint32_t src)
static uint32_t rte_atomic32_exchange (volatile uint32_t *dst, uint32_t
val)
static void rte_atomic32_init (rte_atomic32_t *v)
static int32_t rte_atomic32_read (const rte_atomic32_t *v)
static void rte_atomic32_set (rte_atomic32_t *v, int32_t
new_value)
static void rte_atomic32_add (rte_atomic32_t *v, int32_t inc)
static void rte_atomic32_sub (rte_atomic32_t *v, int32_t dec)
static void rte_atomic32_inc (rte_atomic32_t *v)
static void rte_atomic32_dec (rte_atomic32_t *v)
static int32_t rte_atomic32_add_return (rte_atomic32_t *v,
int32_t inc)
static int32_t rte_atomic32_sub_return (rte_atomic32_t *v,
int32_t dec)
static int rte_atomic32_inc_and_test (rte_atomic32_t *v)
static int rte_atomic32_dec_and_test (rte_atomic32_t *v)
static int rte_atomic32_test_and_set (rte_atomic32_t *v)
static void rte_atomic32_clear (rte_atomic32_t *v)
static int rte_atomic64_cmpset (volatile uint64_t *dst, uint64_t exp,
uint64_t src)
static uint64_t rte_atomic64_exchange (volatile uint64_t *dst, uint64_t
val)
static void rte_atomic64_init (rte_atomic64_t *v)
static int64_t rte_atomic64_read (rte_atomic64_t *v)
static void rte_atomic64_set (rte_atomic64_t *v, int64_t
new_value)
static void rte_atomic64_add (rte_atomic64_t *v, int64_t inc)
static void rte_atomic64_sub (rte_atomic64_t *v, int64_t dec)
static void rte_atomic64_inc (rte_atomic64_t *v)
static void rte_atomic64_dec (rte_atomic64_t *v)
static int64_t rte_atomic64_add_return (rte_atomic64_t *v,
int64_t inc)
static int64_t rte_atomic64_sub_return (rte_atomic64_t *v,
int64_t dec)
static int rte_atomic64_inc_and_test (rte_atomic64_t *v)
static int rte_atomic64_dec_and_test (rte_atomic64_t *v)
static int rte_atomic64_test_and_set (rte_atomic64_t *v)
static void rte_atomic64_clear (rte_atomic64_t *v)
static int rte_atomic128_cmp_exchange (rte_int128_t *dst, rte_int128_t
*exp, const rte_int128_t *src, unsigned int weak, int success, int failure)
Memory Barrier
static void rte_mb (void)
static void rte_wmb (void)
static void rte_rmb (void)
SMP Memory Barrier
static void rte_smp_mb (void)
static void rte_smp_wmb (void)
static void rte_smp_rmb (void)
I/O Memory Barrier
static void rte_io_mb (void)
static void rte_io_wmb (void)
static void rte_io_rmb (void)
Detailed Description¶
Atomic Operations
This file defines a generic API for atomic operations.
Definition in file rte_atomic.h.
Macro Definition Documentation¶
#define rte_compiler_barrier()¶
Value:
do { asm volatile ("" : : : "memory"); } while(0)Compiler barrier.
Guarantees that operation reordering does not occur at compile time for operations directly before and after the barrier.
Definition at line 153 of file rte_atomic.h.
#define RTE_ATOMIC16_INIT(val) { (val) }¶
Static initializer for an atomic counter.
Definition at line 230 of file rte_atomic.h.
#define RTE_ATOMIC32_INIT(val) { (val) }¶
Static initializer for an atomic counter.
Definition at line 515 of file rte_atomic.h.
#define RTE_ATOMIC64_INIT(val) { (val) }¶
Static initializer for an atomic counter.
Definition at line 799 of file rte_atomic.h.
Function Documentation¶
static void rte_mb (void) [inline], [static]¶
General memory barrier.
Guarantees that the LOAD and STORE operations generated before the barrier occur before the LOAD and STORE operations generated after.
static void rte_wmb (void) [inline], [static]¶
Write memory barrier.
Guarantees that the STORE operations generated before the barrier occur before the STORE operations generated after.
static void rte_rmb (void) [inline], [static]¶
Read memory barrier.
Guarantees that the LOAD operations generated before the barrier occur before the LOAD operations generated after.
static void rte_smp_mb (void) [inline], [static]¶
General memory barrier between lcores
Guarantees that the LOAD and STORE operations that precede the rte_smp_mb() call are globally visible across the lcores before the LOAD and STORE operations that follows it.
Note:
rte_atomic_thread_fence(rte_memory_order_acq_rel) should be used instead.
static void rte_smp_wmb (void) [inline], [static]¶
Write memory barrier between lcores
Guarantees that the STORE operations that precede the rte_smp_wmb() call are globally visible across the lcores before the STORE operations that follows it.
Note:
rte_atomic_thread_fence(rte_memory_order_release) should be used instead. The fence also guarantees LOAD operations that precede the call are globally visible across the lcores before the STORE operations that follows it.
static void rte_smp_rmb (void) [inline], [static]¶
Read memory barrier between lcores
Guarantees that the LOAD operations that precede the rte_smp_rmb() call are globally visible across the lcores before the LOAD operations that follows it.
Note:
rte_atomic_thread_fence(rte_memory_order_acquire) should be used instead. The fence also guarantees LOAD operations that precede the call are globally visible across the lcores before the STORE operations that follows it.
static void rte_io_mb (void) [inline], [static]¶
General memory barrier for I/O device
Guarantees that the LOAD and STORE operations that precede the rte_io_mb() call are visible to I/O device or CPU before the LOAD and STORE operations that follow it.
static void rte_io_wmb (void) [inline], [static]¶
Write memory barrier for I/O device
Guarantees that the STORE operations that precede the rte_io_wmb() call are visible to I/O device before the STORE operations that follow it.
static void rte_io_rmb (void) [inline], [static]¶
Read memory barrier for IO device
Guarantees that the LOAD operations on I/O device that precede the rte_io_rmb() call are visible to CPU before the LOAD operations that follow it.
static void rte_atomic_thread_fence (rte_memory_order memorder) [inline], [static]¶
Synchronization fence between threads based on the specified memory order.
static int rte_atomic16_cmpset (volatile uint16_t * dst, uint16_t exp, uint16_t src) [inline], [static]¶
Atomic compare and set.
(atomic) equivalent to: if (*dst == exp) *dst = src (all 16-bit words)
Parameters:
exp The expected value.
src The new value.
Returns:
static uint16_t rte_atomic16_exchange (volatile uint16_t * dst, uint16_t val) [inline], [static]¶
Atomic exchange.
(atomic) equivalent to: ret = *dst *dst = val; return ret;
Parameters:
val The new value.
Returns:
static void rte_atomic16_init (rte_atomic16_t * v) [inline], [static]¶
Initialize an atomic counter.
Parameters:
Definition at line 239 of file rte_atomic.h.
static int16_t rte_atomic16_read (const rte_atomic16_t * v) [inline], [static]¶
Atomically read a 16-bit value from a counter.
Parameters:
Returns:
Definition at line 253 of file rte_atomic.h.
static void rte_atomic16_set (rte_atomic16_t * v, int16_t new_value) [inline], [static]¶
Atomically set a counter to a 16-bit value.
Parameters:
new_value The new value for the counter.
Definition at line 267 of file rte_atomic.h.
static void rte_atomic16_add (rte_atomic16_t * v, int16_t inc) [inline], [static]¶
Atomically add a 16-bit value to an atomic counter.
Parameters:
inc The value to be added to the counter.
Definition at line 281 of file rte_atomic.h.
static void rte_atomic16_sub (rte_atomic16_t * v, int16_t dec) [inline], [static]¶
Atomically subtract a 16-bit value from an atomic counter.
Parameters:
dec The value to be subtracted from the counter.
Definition at line 296 of file rte_atomic.h.
static void rte_atomic16_inc (rte_atomic16_t * v) [inline], [static]¶
Atomically increment a counter by one.
Parameters:
static void rte_atomic16_dec (rte_atomic16_t * v) [inline], [static]¶
Atomically decrement a counter by one.
Parameters:
static int16_t rte_atomic16_add_return (rte_atomic16_t * v, int16_t inc) [inline], [static]¶
Atomically add a 16-bit value to a counter and return the result.
Atomically adds the 16-bits value (inc) to the atomic counter (v) and returns the value of v after addition.
Parameters:
inc The value to be added to the counter.
Returns:
Definition at line 350 of file rte_atomic.h.
static int16_t rte_atomic16_sub_return (rte_atomic16_t * v, int16_t dec) [inline], [static]¶
Atomically subtract a 16-bit value from a counter and return the result.
Atomically subtracts the 16-bit value (inc) from the atomic counter (v) and returns the value of v after the subtraction.
Parameters:
dec The value to be subtracted from the counter.
Returns:
Definition at line 371 of file rte_atomic.h.
static int rte_atomic16_inc_and_test (rte_atomic16_t * v) [inline], [static]¶
Atomically increment a 16-bit counter by one and test.
Atomically increments the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
Parameters:
Returns:
static int rte_atomic16_dec_and_test (rte_atomic16_t * v) [inline], [static]¶
Atomically decrement a 16-bit counter by one and test.
Atomically decrements the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
Parameters:
Returns:
static int rte_atomic16_test_and_set (rte_atomic16_t * v) [inline], [static]¶
Atomically test and set a 16-bit atomic counter.
If the counter value is already set, return 0 (failed). Otherwise, set the counter value to 1 and return 1 (success).
Parameters:
Returns:
static void rte_atomic16_clear (rte_atomic16_t * v) [inline], [static]¶
Atomically set a 16-bit counter to 0.
Parameters:
Definition at line 445 of file rte_atomic.h.
static int rte_atomic32_cmpset (volatile uint32_t * dst, uint32_t exp, uint32_t src) [inline], [static]¶
Atomic compare and set.
(atomic) equivalent to: if (*dst == exp) *dst = src (all 32-bit words)
Parameters:
exp The expected value.
src The new value.
Returns:
static uint32_t rte_atomic32_exchange (volatile uint32_t * dst, uint32_t val) [inline], [static]¶
Atomic exchange.
(atomic) equivalent to: ret = *dst *dst = val; return ret;
Parameters:
val The new value.
Returns:
static void rte_atomic32_init (rte_atomic32_t * v) [inline], [static]¶
Initialize an atomic counter.
Parameters:
Definition at line 524 of file rte_atomic.h.
static int32_t rte_atomic32_read (const rte_atomic32_t * v) [inline], [static]¶
Atomically read a 32-bit value from a counter.
Parameters:
Returns:
Definition at line 538 of file rte_atomic.h.
static void rte_atomic32_set (rte_atomic32_t * v, int32_t new_value) [inline], [static]¶
Atomically set a counter to a 32-bit value.
Parameters:
new_value The new value for the counter.
Definition at line 552 of file rte_atomic.h.
static void rte_atomic32_add (rte_atomic32_t * v, int32_t inc) [inline], [static]¶
Atomically add a 32-bit value to an atomic counter.
Parameters:
inc The value to be added to the counter.
Definition at line 566 of file rte_atomic.h.
static void rte_atomic32_sub (rte_atomic32_t * v, int32_t dec) [inline], [static]¶
Atomically subtract a 32-bit value from an atomic counter.
Parameters:
dec The value to be subtracted from the counter.
Definition at line 581 of file rte_atomic.h.
static void rte_atomic32_inc (rte_atomic32_t * v) [inline], [static]¶
Atomically increment a counter by one.
Parameters:
static void rte_atomic32_dec (rte_atomic32_t * v) [inline], [static]¶
Atomically decrement a counter by one.
Parameters:
static int32_t rte_atomic32_add_return (rte_atomic32_t * v, int32_t inc) [inline], [static]¶
Atomically add a 32-bit value to a counter and return the result.
Atomically adds the 32-bits value (inc) to the atomic counter (v) and returns the value of v after addition.
Parameters:
inc The value to be added to the counter.
Returns:
Definition at line 635 of file rte_atomic.h.
static int32_t rte_atomic32_sub_return (rte_atomic32_t * v, int32_t dec) [inline], [static]¶
Atomically subtract a 32-bit value from a counter and return the result.
Atomically subtracts the 32-bit value (inc) from the atomic counter (v) and returns the value of v after the subtraction.
Parameters:
dec The value to be subtracted from the counter.
Returns:
Definition at line 656 of file rte_atomic.h.
static int rte_atomic32_inc_and_test (rte_atomic32_t * v) [inline], [static]¶
Atomically increment a 32-bit counter by one and test.
Atomically increments the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
Parameters:
Returns:
static int rte_atomic32_dec_and_test (rte_atomic32_t * v) [inline], [static]¶
Atomically decrement a 32-bit counter by one and test.
Atomically decrements the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
Parameters:
Returns:
static int rte_atomic32_test_and_set (rte_atomic32_t * v) [inline], [static]¶
Atomically test and set a 32-bit atomic counter.
If the counter value is already set, return 0 (failed). Otherwise, set the counter value to 1 and return 1 (success).
Parameters:
Returns:
static void rte_atomic32_clear (rte_atomic32_t * v) [inline], [static]¶
Atomically set a 32-bit counter to 0.
Parameters:
Definition at line 730 of file rte_atomic.h.
static int rte_atomic64_cmpset (volatile uint64_t * dst, uint64_t exp, uint64_t src) [inline], [static]¶
An atomic compare and set function used by the mutex functions. (atomic) equivalent to: if (*dst == exp) *dst = src (all 64-bit words)
Parameters:
exp The expected value.
src The new value.
Returns:
static uint64_t rte_atomic64_exchange (volatile uint64_t * dst, uint64_t val) [inline], [static]¶
Atomic exchange.
(atomic) equivalent to: ret = *dst *dst = val; return ret;
Parameters:
val The new value.
Returns:
static void rte_atomic64_init (rte_atomic64_t * v) [inline], [static]¶
Initialize the atomic counter.
Parameters:
static int64_t rte_atomic64_read (rte_atomic64_t * v) [inline], [static]¶
Atomically read a 64-bit counter.
Parameters:
Returns:
static void rte_atomic64_set (rte_atomic64_t * v, int64_t new_value) [inline], [static]¶
Atomically set a 64-bit counter.
Parameters:
new_value The new value of the counter.
static void rte_atomic64_add (rte_atomic64_t * v, int64_t inc) [inline], [static]¶
Atomically add a 64-bit value to a counter.
Parameters:
inc The value to be added to the counter.
static void rte_atomic64_sub (rte_atomic64_t * v, int64_t dec) [inline], [static]¶
Atomically subtract a 64-bit value from a counter.
Parameters:
dec The value to be subtracted from the counter.
static void rte_atomic64_inc (rte_atomic64_t * v) [inline], [static]¶
Atomically increment a 64-bit counter by one and test.
Parameters:
static void rte_atomic64_dec (rte_atomic64_t * v) [inline], [static]¶
Atomically decrement a 64-bit counter by one and test.
Parameters:
static int64_t rte_atomic64_add_return (rte_atomic64_t * v, int64_t inc) [inline], [static]¶
Add a 64-bit value to an atomic counter and return the result.
Atomically adds the 64-bit value (inc) to the atomic counter (v) and returns the value of v after the addition.
Parameters:
inc The value to be added to the counter.
Returns:
static int64_t rte_atomic64_sub_return (rte_atomic64_t * v, int64_t dec) [inline], [static]¶
Subtract a 64-bit value from an atomic counter and return the result.
Atomically subtracts the 64-bit value (dec) from the atomic counter (v) and returns the value of v after the subtraction.
Parameters:
dec The value to be subtracted from the counter.
Returns:
static int rte_atomic64_inc_and_test (rte_atomic64_t * v) [inline], [static]¶
Atomically increment a 64-bit counter by one and test.
Atomically increments the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
Parameters:
Returns:
static int rte_atomic64_dec_and_test (rte_atomic64_t * v) [inline], [static]¶
Atomically decrement a 64-bit counter by one and test.
Atomically decrements the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
Parameters:
Returns:
static int rte_atomic64_test_and_set (rte_atomic64_t * v) [inline], [static]¶
Atomically test and set a 64-bit atomic counter.
If the counter value is already set, return 0 (failed). Otherwise, set the counter value to 1 and return 1 (success).
Parameters:
Returns:
static void rte_atomic64_clear (rte_atomic64_t * v) [inline], [static]¶
Atomically set a 64-bit counter to 0.
Parameters:
static int rte_atomic128_cmp_exchange (rte_int128_t * dst, rte_int128_t * exp, const rte_int128_t * src, unsigned int weak, int success, int failure) [inline], [static]¶
An atomic compare and set function used by the mutex functions. (Atomically) Equivalent to:
if (*dst == *exp)
*dst = *src else
*exp = *dst
Note:
The success and failure arguments must be one of the __ATOMIC_* values defined in the C++11 standard. For details on their behavior, refer to the standard.
Parameters:
exp Pointer to the expected value. If the operation fails, this memory is updated with the actual value.
src Pointer to the new value.
weak A value of true allows the comparison to spuriously fail and allows the 'exp' update to occur non-atomically (i.e. a torn read may occur). Implementations may ignore this argument and only implement the strong variant.
success If successful, the operation's memory behavior conforms to this (or a stronger) model.
failure If unsuccessful, the operation's memory behavior conforms to this (or a stronger) model. This argument cannot be rte_memory_order_release, rte_memory_order_acq_rel, or a stronger model than success.
Returns:
Author¶
Generated automatically by Doxygen for DPDK from the source code.
Thu May 23 2024 | Version 23.11.0 |