DPDK
19.11.3
|
Go to the source code of this file.
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 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 __rte_experimental 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) |
Coherent I/O Memory Barrier | |
Coherent I/O memory barrier is a lightweight version of I/O memory barriers which are system-wide data synchronization barriers. This is for only coherent memory domain between lcore and I/O device but it is same as the I/O memory barriers in most of architectures. However, some architecture provides even lighter barriers which are somewhere in between I/O memory barriers and SMP memory barriers. For example, in case of ARMv8, DMB(data memory barrier) instruction can have different shareability domains - inner-shareable and outer-shareable. And inner-shareable DMB fits for SMP memory barriers and outer-shareable DMB for coherent I/O memory barriers, which acts on coherent memory. In most cases, I/O memory barriers are safer but if operations are on coherent memory instead of incoherent MMIO region of a device, then coherent I/O memory barriers can be used and this could bring performance gain depending on architectures. | |
static void | rte_cio_wmb (void) |
static void | rte_cio_rmb (void) |
Atomic Operations
This file defines a generic API for atomic operations.
Definition in file rte_atomic.h.
#define rte_compiler_barrier | ( | ) |
Compiler barrier.
Guarantees that operation reordering does not occur at compile time for operations directly before and after the barrier.
Definition at line 157 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 513 of file rte_atomic.h.
#define RTE_ATOMIC64_INIT | ( | val | ) | { (val) } |
Static initializer for an atomic counter.
Definition at line 795 of file rte_atomic.h.
General memory barrier.
Guarantees that the LOAD and STORE operations generated before the barrier occur before the LOAD and STORE operations generated after.
Write memory barrier.
Guarantees that the STORE operations generated before the barrier occur before the STORE operations generated after.
Read memory barrier.
Guarantees that the LOAD operations generated before the barrier occur before the LOAD operations generated after.
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.
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.
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.
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.
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.
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.
Write memory barrier for coherent memory between lcore and I/O device
Guarantees that the STORE operations on coherent memory that precede the rte_cio_wmb() call are visible to I/O device before the STORE operations that follow it.
Read memory barrier for coherent memory between lcore and I/O device
Guarantees that the LOAD operations on coherent memory updated by I/O device that precede the rte_cio_rmb() call are visible to CPU before the LOAD operations that follow it.
|
inlinestatic |
Atomic compare and set.
(atomic) equivalent to: if (*dst == exp) *dst = src (all 16-bit words)
dst | The destination location into which the value will be written. |
exp | The expected value. |
src | The new value. |
|
inlinestatic |
Atomic exchange.
(atomic) equivalent to: ret = *dst *dst = val; return ret;
dst | The destination location into which the value will be written. |
val | The new value. |
|
inlinestatic |
Initialize an atomic counter.
v | A pointer to the atomic counter. |
Definition at line 239 of file rte_atomic.h.
|
inlinestatic |
Atomically read a 16-bit value from a counter.
v | A pointer to the atomic counter. |
Definition at line 253 of file rte_atomic.h.
|
inlinestatic |
Atomically set a counter to a 16-bit value.
v | A pointer to the atomic counter. |
new_value | The new value for the counter. |
Definition at line 267 of file rte_atomic.h.
|
inlinestatic |
Atomically add a 16-bit value to an atomic counter.
v | A pointer to the atomic counter. |
inc | The value to be added to the counter. |
Definition at line 281 of file rte_atomic.h.
|
inlinestatic |
Atomically subtract a 16-bit value from an atomic counter.
v | A pointer to the atomic counter. |
dec | The value to be subtracted from the counter. |
Definition at line 295 of file rte_atomic.h.
|
inlinestatic |
Atomically increment a counter by one.
v | A pointer to the atomic counter. |
|
inlinestatic |
Atomically decrement a counter by one.
v | A pointer to the atomic counter. |
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
inc | The value to be added to the counter. |
Definition at line 348 of file rte_atomic.h.
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
dec | The value to be subtracted from the counter. |
Definition at line 368 of file rte_atomic.h.
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
|
inlinestatic |
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).
v | A pointer to the atomic counter. |
|
inlinestatic |
Atomically set a 16-bit counter to 0.
v | A pointer to the atomic counter. |
Definition at line 439 of file rte_atomic.h.
|
inlinestatic |
Atomic compare and set.
(atomic) equivalent to: if (*dst == exp) *dst = src (all 32-bit words)
dst | The destination location into which the value will be written. |
exp | The expected value. |
src | The new value. |
|
inlinestatic |
Atomic exchange.
(atomic) equivalent to: ret = *dst *dst = val; return ret;
dst | The destination location into which the value will be written. |
val | The new value. |
|
inlinestatic |
Initialize an atomic counter.
v | A pointer to the atomic counter. |
Definition at line 522 of file rte_atomic.h.
|
inlinestatic |
Atomically read a 32-bit value from a counter.
v | A pointer to the atomic counter. |
Definition at line 536 of file rte_atomic.h.
|
inlinestatic |
Atomically set a counter to a 32-bit value.
v | A pointer to the atomic counter. |
new_value | The new value for the counter. |
Definition at line 550 of file rte_atomic.h.
|
inlinestatic |
Atomically add a 32-bit value to an atomic counter.
v | A pointer to the atomic counter. |
inc | The value to be added to the counter. |
Definition at line 564 of file rte_atomic.h.
|
inlinestatic |
Atomically subtract a 32-bit value from an atomic counter.
v | A pointer to the atomic counter. |
dec | The value to be subtracted from the counter. |
Definition at line 578 of file rte_atomic.h.
|
inlinestatic |
Atomically increment a counter by one.
v | A pointer to the atomic counter. |
|
inlinestatic |
Atomically decrement a counter by one.
v | A pointer to the atomic counter. |
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
inc | The value to be added to the counter. |
Definition at line 631 of file rte_atomic.h.
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
dec | The value to be subtracted from the counter. |
Definition at line 651 of file rte_atomic.h.
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
|
inlinestatic |
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).
v | A pointer to the atomic counter. |
|
inlinestatic |
Atomically set a 32-bit counter to 0.
v | A pointer to the atomic counter. |
Definition at line 722 of file rte_atomic.h.
|
inlinestatic |
An atomic compare and set function used by the mutex functions. (atomic) equivalent to: if (*dst == exp) *dst = src (all 64-bit words)
dst | The destination into which the value will be written. |
exp | The expected value. |
src | The new value. |
|
inlinestatic |
Atomic exchange.
(atomic) equivalent to: ret = *dst *dst = val; return ret;
dst | The destination location into which the value will be written. |
val | The new value. |
|
inlinestatic |
Initialize the atomic counter.
v | A pointer to the atomic counter. |
|
inlinestatic |
Atomically read a 64-bit counter.
v | A pointer to the atomic counter. |
|
inlinestatic |
Atomically set a 64-bit counter.
v | A pointer to the atomic counter. |
new_value | The new value of the counter. |
|
inlinestatic |
Atomically add a 64-bit value to a counter.
v | A pointer to the atomic counter. |
inc | The value to be added to the counter. |
|
inlinestatic |
Atomically subtract a 64-bit value from a counter.
v | A pointer to the atomic counter. |
dec | The value to be subtracted from the counter. |
|
inlinestatic |
Atomically increment a 64-bit counter by one and test.
v | A pointer to the atomic counter. |
|
inlinestatic |
Atomically decrement a 64-bit counter by one and test.
v | A pointer to the atomic counter. |
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
inc | The value to be added to the counter. |
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
dec | The value to be subtracted from the counter. |
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
|
inlinestatic |
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.
v | A pointer to the atomic counter. |
|
inlinestatic |
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).
v | A pointer to the atomic counter. |
|
inlinestatic |
Atomically set a 64-bit counter to 0.
v | A pointer to the atomic counter. |
|
inlinestatic |
An atomic compare and set function used by the mutex functions. (Atomically) Equivalent to:
dst | The destination into which the value will be written. |
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 __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, or a stronger model than success. |