DPDK
19.08.0-rc0
|
Go to the source code of this file.
Data Structures | |
struct | rte_atomic16_t |
struct | rte_atomic32_t |
struct | rte_atomic64_t |
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 int __rte_experimental | 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.
|
inlinestatic |
General memory barrier.
Guarantees that the LOAD and STORE operations generated before the barrier occur before the LOAD and STORE operations generated after.
|
inlinestatic |
Write memory barrier.
Guarantees that the STORE operations generated before the barrier occur before the STORE operations generated after.
|
inlinestatic |
Read memory barrier.
Guarantees that the LOAD operations generated before the barrier occur before the LOAD operations generated after.
|
inlinestatic |
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.
|
inlinestatic |
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.
|
inlinestatic |
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.
|
inlinestatic |
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.
|
inlinestatic |
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.
|
inlinestatic |
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.
|
inlinestatic |
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.
|
inlinestatic |
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. |