From: Tyler Retzlaff <roretzla@linux.microsoft.com>
To: dev@dpdk.org
Cc: Akhil Goyal <gakhil@marvell.com>,
Anatoly Burakov <anatoly.burakov@intel.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
Bruce Richardson <bruce.richardson@intel.com>,
Chenbo Xia <chenbo.xia@intel.com>,
Ciara Power <ciara.power@intel.com>,
David Christensen <drc@linux.vnet.ibm.com>,
David Hunt <david.hunt@intel.com>,
Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,
Dmitry Malloy <dmitrym@microsoft.com>,
Elena Agostini <eagostini@nvidia.com>,
Erik Gabriel Carrillo <erik.g.carrillo@intel.com>,
Fan Zhang <fanzhang.oss@gmail.com>,
Ferruh Yigit <ferruh.yigit@amd.com>,
Harman Kalra <hkalra@marvell.com>,
Harry van Haaren <harry.van.haaren@intel.com>,
Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>,
Jerin Jacob <jerinj@marvell.com>,
Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>,
Matan Azrad <matan@nvidia.com>,
Maxime Coquelin <maxime.coquelin@redhat.com>,
Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>,
Nicolas Chautru <nicolas.chautru@intel.com>,
Olivier Matz <olivier.matz@6wind.com>, Ori Kam <orika@nvidia.com>,
Pallavi Kadam <pallavi.kadam@intel.com>,
Pavan Nikhilesh <pbhagavatula@marvell.com>,
Reshma Pattan <reshma.pattan@intel.com>,
Sameh Gobriel <sameh.gobriel@intel.com>,
Shijith Thotton <sthotton@marvell.com>,
Sivaprasad Tummala <sivaprasad.tummala@amd.com>,
Stephen Hemminger <stephen@networkplumber.org>,
Suanming Mou <suanmingm@nvidia.com>,
Sunil Kumar Kori <skori@marvell.com>,
Thomas Monjalon <thomas@monjalon.net>,
Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
Vladimir Medvedkin <vladimir.medvedkin@intel.com>,
Yipeng Wang <yipeng1.wang@intel.com>,
Tyler Retzlaff <roretzla@linux.microsoft.com>
Subject: [PATCH v3 03/19] eal: use rte optional stdatomic API
Date: Wed, 25 Oct 2023 17:31:38 -0700 [thread overview]
Message-ID: <1698280314-25861-4-git-send-email-roretzla@linux.microsoft.com> (raw)
In-Reply-To: <1698280314-25861-1-git-send-email-roretzla@linux.microsoft.com>
Replace the use of gcc builtin __atomic_xxx intrinsics with corresponding
rte_atomic_xxx optional stdatomic API
Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
---
lib/eal/common/eal_common_launch.c | 10 +--
lib/eal/common/eal_common_mcfg.c | 2 +-
lib/eal/common/eal_common_proc.c | 14 ++--
lib/eal/common/eal_common_thread.c | 26 ++++----
lib/eal/common/eal_common_trace.c | 8 +--
lib/eal/common/eal_common_trace_ctf.c | 4 +-
lib/eal/common/eal_memcfg.h | 2 +-
lib/eal/common/eal_private.h | 4 +-
lib/eal/common/eal_trace.h | 4 +-
lib/eal/common/rte_service.c | 122 +++++++++++++++++-----------------
lib/eal/freebsd/eal.c | 20 +++---
lib/eal/include/rte_epoll.h | 3 +-
lib/eal/linux/eal.c | 26 ++++----
lib/eal/linux/eal_interrupts.c | 42 ++++++------
lib/eal/ppc/include/rte_atomic.h | 6 +-
lib/eal/windows/rte_thread.c | 8 ++-
16 files changed, 152 insertions(+), 149 deletions(-)
diff --git a/lib/eal/common/eal_common_launch.c b/lib/eal/common/eal_common_launch.c
index 0504598..5320c3b 100644
--- a/lib/eal/common/eal_common_launch.c
+++ b/lib/eal/common/eal_common_launch.c
@@ -18,8 +18,8 @@
int
rte_eal_wait_lcore(unsigned worker_id)
{
- while (__atomic_load_n(&lcore_config[worker_id].state,
- __ATOMIC_ACQUIRE) != WAIT)
+ while (rte_atomic_load_explicit(&lcore_config[worker_id].state,
+ rte_memory_order_acquire) != WAIT)
rte_pause();
return lcore_config[worker_id].ret;
@@ -38,8 +38,8 @@
/* Check if the worker is in 'WAIT' state. Use acquire order
* since 'state' variable is used as the guard variable.
*/
- if (__atomic_load_n(&lcore_config[worker_id].state,
- __ATOMIC_ACQUIRE) != WAIT)
+ if (rte_atomic_load_explicit(&lcore_config[worker_id].state,
+ rte_memory_order_acquire) != WAIT)
goto finish;
lcore_config[worker_id].arg = arg;
@@ -47,7 +47,7 @@
* before the worker thread starts running the function.
* Use worker thread function as the guard variable.
*/
- __atomic_store_n(&lcore_config[worker_id].f, f, __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&lcore_config[worker_id].f, f, rte_memory_order_release);
rc = eal_thread_wake_worker(worker_id);
diff --git a/lib/eal/common/eal_common_mcfg.c b/lib/eal/common/eal_common_mcfg.c
index 2a785e7..dabb80e 100644
--- a/lib/eal/common/eal_common_mcfg.c
+++ b/lib/eal/common/eal_common_mcfg.c
@@ -30,7 +30,7 @@
struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
/* wait until shared mem_config finish initialising */
- rte_wait_until_equal_32(&mcfg->magic, RTE_MAGIC, __ATOMIC_RELAXED);
+ rte_wait_until_equal_32(&mcfg->magic, RTE_MAGIC, rte_memory_order_relaxed);
}
int
diff --git a/lib/eal/common/eal_common_proc.c b/lib/eal/common/eal_common_proc.c
index f20a348..728815c 100644
--- a/lib/eal/common/eal_common_proc.c
+++ b/lib/eal/common/eal_common_proc.c
@@ -33,7 +33,7 @@
#include "eal_filesystem.h"
#include "eal_internal_cfg.h"
-static int mp_fd = -1;
+static RTE_ATOMIC(int) mp_fd = -1;
static rte_thread_t mp_handle_tid;
static char mp_filter[PATH_MAX]; /* Filter for secondary process sockets */
static char mp_dir_path[PATH_MAX]; /* The directory path for all mp sockets */
@@ -404,7 +404,7 @@ struct pending_request {
struct sockaddr_un sa;
int fd;
- while ((fd = __atomic_load_n(&mp_fd, __ATOMIC_RELAXED)) >= 0) {
+ while ((fd = rte_atomic_load_explicit(&mp_fd, rte_memory_order_relaxed)) >= 0) {
int ret;
ret = read_msg(fd, &msg, &sa);
@@ -652,7 +652,7 @@ enum async_action {
RTE_LOG(ERR, EAL, "failed to create mp thread: %s\n",
strerror(errno));
close(dir_fd);
- close(__atomic_exchange_n(&mp_fd, -1, __ATOMIC_RELAXED));
+ close(rte_atomic_exchange_explicit(&mp_fd, -1, rte_memory_order_relaxed));
return -1;
}
@@ -668,7 +668,7 @@ enum async_action {
{
int fd;
- fd = __atomic_exchange_n(&mp_fd, -1, __ATOMIC_RELAXED);
+ fd = rte_atomic_exchange_explicit(&mp_fd, -1, rte_memory_order_relaxed);
if (fd < 0)
return;
@@ -1282,11 +1282,11 @@ enum mp_status {
expected = MP_STATUS_UNKNOWN;
desired = status;
- if (__atomic_compare_exchange_n(&mcfg->mp_status, &expected, desired,
- false, __ATOMIC_RELAXED, __ATOMIC_RELAXED))
+ if (rte_atomic_compare_exchange_strong_explicit(&mcfg->mp_status, &expected, desired,
+ rte_memory_order_relaxed, rte_memory_order_relaxed))
return true;
- return __atomic_load_n(&mcfg->mp_status, __ATOMIC_RELAXED) == desired;
+ return rte_atomic_load_explicit(&mcfg->mp_status, rte_memory_order_relaxed) == desired;
}
bool
diff --git a/lib/eal/common/eal_common_thread.c b/lib/eal/common/eal_common_thread.c
index 668b1ed..c422ea8 100644
--- a/lib/eal/common/eal_common_thread.c
+++ b/lib/eal/common/eal_common_thread.c
@@ -191,8 +191,8 @@ unsigned rte_socket_id(void)
/* Set the state to 'RUNNING'. Use release order
* since 'state' variable is used as the guard variable.
*/
- __atomic_store_n(&lcore_config[lcore_id].state, RUNNING,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&lcore_config[lcore_id].state, RUNNING,
+ rte_memory_order_release);
eal_thread_ack_command();
@@ -201,8 +201,8 @@ unsigned rte_socket_id(void)
* are accessed only after update to 'f' is visible.
* Wait till the update to 'f' is visible to the worker.
*/
- while ((f = __atomic_load_n(&lcore_config[lcore_id].f,
- __ATOMIC_ACQUIRE)) == NULL)
+ while ((f = rte_atomic_load_explicit(&lcore_config[lcore_id].f,
+ rte_memory_order_acquire)) == NULL)
rte_pause();
rte_eal_trace_thread_lcore_running(lcore_id, f);
@@ -219,8 +219,8 @@ unsigned rte_socket_id(void)
* are completed before the state is updated.
* Use 'state' as the guard variable.
*/
- __atomic_store_n(&lcore_config[lcore_id].state, WAIT,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&lcore_config[lcore_id].state, WAIT,
+ rte_memory_order_release);
rte_eal_trace_thread_lcore_stopped(lcore_id);
}
@@ -242,7 +242,7 @@ struct control_thread_params {
/* Control thread status.
* If the status is CTRL_THREAD_ERROR, 'ret' has the error code.
*/
- enum __rte_ctrl_thread_status status;
+ RTE_ATOMIC(enum __rte_ctrl_thread_status) status;
};
static int control_thread_init(void *arg)
@@ -259,13 +259,13 @@ static int control_thread_init(void *arg)
RTE_PER_LCORE(_socket_id) = SOCKET_ID_ANY;
params->ret = rte_thread_set_affinity_by_id(rte_thread_self(), cpuset);
if (params->ret != 0) {
- __atomic_store_n(¶ms->status,
- CTRL_THREAD_ERROR, __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(¶ms->status,
+ CTRL_THREAD_ERROR, rte_memory_order_release);
return 1;
}
- __atomic_store_n(¶ms->status,
- CTRL_THREAD_RUNNING, __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(¶ms->status,
+ CTRL_THREAD_RUNNING, rte_memory_order_release);
return 0;
}
@@ -310,8 +310,8 @@ static uint32_t control_thread_start(void *arg)
/* Wait for the control thread to initialize successfully */
while ((ctrl_thread_status =
- __atomic_load_n(¶ms->status,
- __ATOMIC_ACQUIRE)) == CTRL_THREAD_LAUNCHING) {
+ rte_atomic_load_explicit(¶ms->status,
+ rte_memory_order_acquire)) == CTRL_THREAD_LAUNCHING) {
rte_delay_us_sleep(1);
}
diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c
index d2eac2d..6ad87fc 100644
--- a/lib/eal/common/eal_common_trace.c
+++ b/lib/eal/common/eal_common_trace.c
@@ -97,7 +97,7 @@ struct trace_point_head *
bool
rte_trace_is_enabled(void)
{
- return __atomic_load_n(&trace.status, __ATOMIC_ACQUIRE) != 0;
+ return rte_atomic_load_explicit(&trace.status, rte_memory_order_acquire) != 0;
}
static void
@@ -157,7 +157,7 @@ rte_trace_mode rte_trace_mode_get(void)
prev = rte_atomic_fetch_or_explicit(t, __RTE_TRACE_FIELD_ENABLE_MASK,
rte_memory_order_release);
if ((prev & __RTE_TRACE_FIELD_ENABLE_MASK) == 0)
- __atomic_fetch_add(&trace.status, 1, __ATOMIC_RELEASE);
+ rte_atomic_fetch_add_explicit(&trace.status, 1, rte_memory_order_release);
return 0;
}
@@ -172,7 +172,7 @@ rte_trace_mode rte_trace_mode_get(void)
prev = rte_atomic_fetch_and_explicit(t, ~__RTE_TRACE_FIELD_ENABLE_MASK,
rte_memory_order_release);
if ((prev & __RTE_TRACE_FIELD_ENABLE_MASK) != 0)
- __atomic_fetch_sub(&trace.status, 1, __ATOMIC_RELEASE);
+ rte_atomic_fetch_sub_explicit(&trace.status, 1, rte_memory_order_release);
return 0;
}
@@ -526,7 +526,7 @@ rte_trace_mode rte_trace_mode_get(void)
/* Add the trace point at tail */
STAILQ_INSERT_TAIL(&tp_list, tp, next);
- __atomic_thread_fence(__ATOMIC_RELEASE);
+ __atomic_thread_fence(rte_memory_order_release);
/* All Good !!! */
return 0;
diff --git a/lib/eal/common/eal_common_trace_ctf.c b/lib/eal/common/eal_common_trace_ctf.c
index c6775c3..04c4f71 100644
--- a/lib/eal/common/eal_common_trace_ctf.c
+++ b/lib/eal/common/eal_common_trace_ctf.c
@@ -361,10 +361,10 @@
if (ctf_meta == NULL)
return -EINVAL;
- if (!__atomic_load_n(&trace->ctf_fixup_done, __ATOMIC_SEQ_CST) &&
+ if (!rte_atomic_load_explicit(&trace->ctf_fixup_done, rte_memory_order_seq_cst) &&
rte_get_timer_hz()) {
meta_fixup(trace, ctf_meta);
- __atomic_store_n(&trace->ctf_fixup_done, 1, __ATOMIC_SEQ_CST);
+ rte_atomic_store_explicit(&trace->ctf_fixup_done, 1, rte_memory_order_seq_cst);
}
rc = fprintf(f, "%s", ctf_meta);
diff --git a/lib/eal/common/eal_memcfg.h b/lib/eal/common/eal_memcfg.h
index d5c63e2..60e2089 100644
--- a/lib/eal/common/eal_memcfg.h
+++ b/lib/eal/common/eal_memcfg.h
@@ -42,7 +42,7 @@ struct rte_mem_config {
rte_rwlock_t memory_hotplug_lock;
/**< Indicates whether memory hotplug request is in progress. */
- uint8_t mp_status; /**< Multiprocess status. */
+ RTE_ATOMIC(uint8_t) mp_status; /**< Multiprocess status. */
/* memory segments and zones */
struct rte_fbarray memzones; /**< Memzone descriptors. */
diff --git a/lib/eal/common/eal_private.h b/lib/eal/common/eal_private.h
index ebd496b..4d2e806 100644
--- a/lib/eal/common/eal_private.h
+++ b/lib/eal/common/eal_private.h
@@ -24,11 +24,11 @@ struct lcore_config {
int pipe_main2worker[2]; /**< communication pipe with main */
int pipe_worker2main[2]; /**< communication pipe with main */
- lcore_function_t * volatile f; /**< function to call */
+ RTE_ATOMIC(lcore_function_t *) volatile f; /**< function to call */
void * volatile arg; /**< argument of function */
volatile int ret; /**< return value of function */
- volatile enum rte_lcore_state_t state; /**< lcore state */
+ volatile RTE_ATOMIC(enum rte_lcore_state_t) state; /**< lcore state */
unsigned int socket_id; /**< physical socket id for this lcore */
unsigned int core_id; /**< core number on socket for this lcore */
int core_index; /**< relative index, starting from 0 */
diff --git a/lib/eal/common/eal_trace.h b/lib/eal/common/eal_trace.h
index d66bcfe..ace2ef3 100644
--- a/lib/eal/common/eal_trace.h
+++ b/lib/eal/common/eal_trace.h
@@ -50,7 +50,7 @@ struct trace_arg {
struct trace {
char *dir;
int register_errno;
- uint32_t status;
+ RTE_ATOMIC(uint32_t) status;
enum rte_trace_mode mode;
rte_uuid_t uuid;
uint32_t buff_len;
@@ -65,7 +65,7 @@ struct trace {
uint32_t ctf_meta_offset_freq;
uint32_t ctf_meta_offset_freq_off_s;
uint32_t ctf_meta_offset_freq_off;
- uint16_t ctf_fixup_done;
+ RTE_ATOMIC(uint16_t) ctf_fixup_done;
rte_spinlock_t lock;
};
diff --git a/lib/eal/common/rte_service.c b/lib/eal/common/rte_service.c
index 098a821..e183d2e 100644
--- a/lib/eal/common/rte_service.c
+++ b/lib/eal/common/rte_service.c
@@ -43,8 +43,8 @@ struct rte_service_spec_impl {
rte_spinlock_t execute_lock;
/* API set/get-able variables */
- int8_t app_runstate;
- int8_t comp_runstate;
+ RTE_ATOMIC(int8_t) app_runstate;
+ RTE_ATOMIC(int8_t) comp_runstate;
uint8_t internal_flags;
/* per service statistics */
@@ -52,24 +52,24 @@ struct rte_service_spec_impl {
* It does not indicate the number of cores the service is running
* on currently.
*/
- uint32_t num_mapped_cores;
+ RTE_ATOMIC(uint32_t) num_mapped_cores;
} __rte_cache_aligned;
struct service_stats {
- uint64_t calls;
- uint64_t cycles;
+ RTE_ATOMIC(uint64_t) calls;
+ RTE_ATOMIC(uint64_t) cycles;
};
/* the internal values of a service core */
struct core_state {
/* map of services IDs are run on this core */
uint64_t service_mask;
- uint8_t runstate; /* running or stopped */
- uint8_t thread_active; /* indicates when thread is in service_run() */
+ RTE_ATOMIC(uint8_t) runstate; /* running or stopped */
+ RTE_ATOMIC(uint8_t) thread_active; /* indicates when thread is in service_run() */
uint8_t is_service_core; /* set if core is currently a service core */
uint8_t service_active_on_lcore[RTE_SERVICE_NUM_MAX];
- uint64_t loops;
- uint64_t cycles;
+ RTE_ATOMIC(uint64_t) loops;
+ RTE_ATOMIC(uint64_t) cycles;
struct service_stats service_stats[RTE_SERVICE_NUM_MAX];
} __rte_cache_aligned;
@@ -314,11 +314,11 @@ struct core_state {
* service_run and service_runstate_get function.
*/
if (runstate)
- __atomic_store_n(&s->comp_runstate, RUNSTATE_RUNNING,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&s->comp_runstate, RUNSTATE_RUNNING,
+ rte_memory_order_release);
else
- __atomic_store_n(&s->comp_runstate, RUNSTATE_STOPPED,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&s->comp_runstate, RUNSTATE_STOPPED,
+ rte_memory_order_release);
return 0;
}
@@ -334,11 +334,11 @@ struct core_state {
* service_run runstate_get function.
*/
if (runstate)
- __atomic_store_n(&s->app_runstate, RUNSTATE_RUNNING,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&s->app_runstate, RUNSTATE_RUNNING,
+ rte_memory_order_release);
else
- __atomic_store_n(&s->app_runstate, RUNSTATE_STOPPED,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&s->app_runstate, RUNSTATE_STOPPED,
+ rte_memory_order_release);
rte_eal_trace_service_runstate_set(id, runstate);
return 0;
@@ -354,14 +354,14 @@ struct core_state {
* Use load-acquire memory order. This synchronizes with
* store-release in service state set functions.
*/
- if (__atomic_load_n(&s->comp_runstate, __ATOMIC_ACQUIRE) ==
+ if (rte_atomic_load_explicit(&s->comp_runstate, rte_memory_order_acquire) ==
RUNSTATE_RUNNING &&
- __atomic_load_n(&s->app_runstate, __ATOMIC_ACQUIRE) ==
+ rte_atomic_load_explicit(&s->app_runstate, rte_memory_order_acquire) ==
RUNSTATE_RUNNING) {
int check_disabled = !(s->internal_flags &
SERVICE_F_START_CHECK);
- int lcore_mapped = (__atomic_load_n(&s->num_mapped_cores,
- __ATOMIC_RELAXED) > 0);
+ int lcore_mapped = (rte_atomic_load_explicit(&s->num_mapped_cores,
+ rte_memory_order_relaxed) > 0);
return (check_disabled | lcore_mapped);
} else
@@ -392,15 +392,15 @@ struct core_state {
uint64_t end = rte_rdtsc();
uint64_t cycles = end - start;
- __atomic_store_n(&cs->cycles, cs->cycles + cycles,
- __ATOMIC_RELAXED);
- __atomic_store_n(&service_stats->cycles,
+ rte_atomic_store_explicit(&cs->cycles, cs->cycles + cycles,
+ rte_memory_order_relaxed);
+ rte_atomic_store_explicit(&service_stats->cycles,
service_stats->cycles + cycles,
- __ATOMIC_RELAXED);
+ rte_memory_order_relaxed);
}
- __atomic_store_n(&service_stats->calls,
- service_stats->calls + 1, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&service_stats->calls,
+ service_stats->calls + 1, rte_memory_order_relaxed);
} else {
s->spec.callback(userdata);
}
@@ -420,9 +420,9 @@ struct core_state {
* Use load-acquire memory order. This synchronizes with
* store-release in service state set functions.
*/
- if (__atomic_load_n(&s->comp_runstate, __ATOMIC_ACQUIRE) !=
+ if (rte_atomic_load_explicit(&s->comp_runstate, rte_memory_order_acquire) !=
RUNSTATE_RUNNING ||
- __atomic_load_n(&s->app_runstate, __ATOMIC_ACQUIRE) !=
+ rte_atomic_load_explicit(&s->app_runstate, rte_memory_order_acquire) !=
RUNSTATE_RUNNING ||
!(service_mask & (UINT64_C(1) << i))) {
cs->service_active_on_lcore[i] = 0;
@@ -472,11 +472,11 @@ struct core_state {
/* Increment num_mapped_cores to reflect that this core is
* now mapped capable of running the service.
*/
- __atomic_fetch_add(&s->num_mapped_cores, 1, __ATOMIC_RELAXED);
+ rte_atomic_fetch_add_explicit(&s->num_mapped_cores, 1, rte_memory_order_relaxed);
int ret = service_run(id, cs, UINT64_MAX, s, serialize_mt_unsafe);
- __atomic_fetch_sub(&s->num_mapped_cores, 1, __ATOMIC_RELAXED);
+ rte_atomic_fetch_sub_explicit(&s->num_mapped_cores, 1, rte_memory_order_relaxed);
return ret;
}
@@ -489,13 +489,13 @@ struct core_state {
const int lcore = rte_lcore_id();
struct core_state *cs = &lcore_states[lcore];
- __atomic_store_n(&cs->thread_active, 1, __ATOMIC_SEQ_CST);
+ rte_atomic_store_explicit(&cs->thread_active, 1, rte_memory_order_seq_cst);
/* runstate act as the guard variable. Use load-acquire
* memory order here to synchronize with store-release
* in runstate update functions.
*/
- while (__atomic_load_n(&cs->runstate, __ATOMIC_ACQUIRE) ==
+ while (rte_atomic_load_explicit(&cs->runstate, rte_memory_order_acquire) ==
RUNSTATE_RUNNING) {
const uint64_t service_mask = cs->service_mask;
@@ -513,7 +513,7 @@ struct core_state {
service_run(i, cs, service_mask, service_get(i), 1);
}
- __atomic_store_n(&cs->loops, cs->loops + 1, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&cs->loops, cs->loops + 1, rte_memory_order_relaxed);
}
/* Switch off this core for all services, to ensure that future
@@ -526,7 +526,7 @@ struct core_state {
* this store, ensuring that once this store is visible, the service
* lcore thread really is done in service cores code.
*/
- __atomic_store_n(&cs->thread_active, 0, __ATOMIC_SEQ_CST);
+ rte_atomic_store_explicit(&cs->thread_active, 0, rte_memory_order_seq_cst);
return 0;
}
@@ -539,8 +539,8 @@ struct core_state {
/* Load thread_active using ACQUIRE to avoid instructions dependent on
* the result being re-ordered before this load completes.
*/
- return __atomic_load_n(&lcore_states[lcore].thread_active,
- __ATOMIC_ACQUIRE);
+ return rte_atomic_load_explicit(&lcore_states[lcore].thread_active,
+ rte_memory_order_acquire);
}
int32_t
@@ -646,13 +646,13 @@ struct core_state {
if (*set && !lcore_mapped) {
lcore_states[lcore].service_mask |= sid_mask;
- __atomic_fetch_add(&rte_services[sid].num_mapped_cores,
- 1, __ATOMIC_RELAXED);
+ rte_atomic_fetch_add_explicit(&rte_services[sid].num_mapped_cores,
+ 1, rte_memory_order_relaxed);
}
if (!*set && lcore_mapped) {
lcore_states[lcore].service_mask &= ~(sid_mask);
- __atomic_fetch_sub(&rte_services[sid].num_mapped_cores,
- 1, __ATOMIC_RELAXED);
+ rte_atomic_fetch_sub_explicit(&rte_services[sid].num_mapped_cores,
+ 1, rte_memory_order_relaxed);
}
}
@@ -709,13 +709,13 @@ struct core_state {
* store-release memory order here to synchronize
* with load-acquire in runstate read functions.
*/
- __atomic_store_n(&lcore_states[i].runstate,
- RUNSTATE_STOPPED, __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&lcore_states[i].runstate,
+ RUNSTATE_STOPPED, rte_memory_order_release);
}
}
for (i = 0; i < RTE_SERVICE_NUM_MAX; i++)
- __atomic_store_n(&rte_services[i].num_mapped_cores, 0,
- __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&rte_services[i].num_mapped_cores, 0,
+ rte_memory_order_relaxed);
return 0;
}
@@ -735,8 +735,8 @@ struct core_state {
/* Use store-release memory order here to synchronize with
* load-acquire in runstate read functions.
*/
- __atomic_store_n(&lcore_states[lcore].runstate, RUNSTATE_STOPPED,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&lcore_states[lcore].runstate, RUNSTATE_STOPPED,
+ rte_memory_order_release);
return rte_eal_wait_lcore(lcore);
}
@@ -755,7 +755,7 @@ struct core_state {
* memory order here to synchronize with store-release
* in runstate update functions.
*/
- if (__atomic_load_n(&cs->runstate, __ATOMIC_ACQUIRE) !=
+ if (rte_atomic_load_explicit(&cs->runstate, rte_memory_order_acquire) !=
RUNSTATE_STOPPED)
return -EBUSY;
@@ -779,7 +779,7 @@ struct core_state {
* memory order here to synchronize with store-release
* in runstate update functions.
*/
- if (__atomic_load_n(&cs->runstate, __ATOMIC_ACQUIRE) ==
+ if (rte_atomic_load_explicit(&cs->runstate, rte_memory_order_acquire) ==
RUNSTATE_RUNNING)
return -EALREADY;
@@ -789,7 +789,7 @@ struct core_state {
/* Use load-acquire memory order here to synchronize with
* store-release in runstate update functions.
*/
- __atomic_store_n(&cs->runstate, RUNSTATE_RUNNING, __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&cs->runstate, RUNSTATE_RUNNING, rte_memory_order_release);
rte_eal_trace_service_lcore_start(lcore);
@@ -808,7 +808,7 @@ struct core_state {
* memory order here to synchronize with store-release
* in runstate update functions.
*/
- if (__atomic_load_n(&lcore_states[lcore].runstate, __ATOMIC_ACQUIRE) ==
+ if (rte_atomic_load_explicit(&lcore_states[lcore].runstate, rte_memory_order_acquire) ==
RUNSTATE_STOPPED)
return -EALREADY;
@@ -820,8 +820,8 @@ struct core_state {
int32_t enabled = service_mask & (UINT64_C(1) << i);
int32_t service_running = rte_service_runstate_get(i);
int32_t only_core = (1 ==
- __atomic_load_n(&rte_services[i].num_mapped_cores,
- __ATOMIC_RELAXED));
+ rte_atomic_load_explicit(&rte_services[i].num_mapped_cores,
+ rte_memory_order_relaxed));
/* if the core is mapped, and the service is running, and this
* is the only core that is mapped, the service would cease to
@@ -834,8 +834,8 @@ struct core_state {
/* Use store-release memory order here to synchronize with
* load-acquire in runstate read functions.
*/
- __atomic_store_n(&lcore_states[lcore].runstate, RUNSTATE_STOPPED,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&lcore_states[lcore].runstate, RUNSTATE_STOPPED,
+ rte_memory_order_release);
rte_eal_trace_service_lcore_stop(lcore);
@@ -847,7 +847,7 @@ struct core_state {
{
struct core_state *cs = &lcore_states[lcore];
- return __atomic_load_n(&cs->loops, __ATOMIC_RELAXED);
+ return rte_atomic_load_explicit(&cs->loops, rte_memory_order_relaxed);
}
static uint64_t
@@ -855,7 +855,7 @@ struct core_state {
{
struct core_state *cs = &lcore_states[lcore];
- return __atomic_load_n(&cs->cycles, __ATOMIC_RELAXED);
+ return rte_atomic_load_explicit(&cs->cycles, rte_memory_order_relaxed);
}
static uint64_t
@@ -863,8 +863,8 @@ struct core_state {
{
struct core_state *cs = &lcore_states[lcore];
- return __atomic_load_n(&cs->service_stats[service_id].calls,
- __ATOMIC_RELAXED);
+ return rte_atomic_load_explicit(&cs->service_stats[service_id].calls,
+ rte_memory_order_relaxed);
}
static uint64_t
@@ -872,8 +872,8 @@ struct core_state {
{
struct core_state *cs = &lcore_states[lcore];
- return __atomic_load_n(&cs->service_stats[service_id].cycles,
- __ATOMIC_RELAXED);
+ return rte_atomic_load_explicit(&cs->service_stats[service_id].cycles,
+ rte_memory_order_relaxed);
}
typedef uint64_t (*lcore_attr_get_fun)(uint32_t service_id,
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index 39a2868..568e06e 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -597,8 +597,8 @@ static void rte_eal_init_alert(const char *msg)
return -1;
}
- if (!__atomic_compare_exchange_n(&run_once, &has_run, 1, 0,
- __ATOMIC_RELAXED, __ATOMIC_RELAXED)) {
+ if (!rte_atomic_compare_exchange_strong_explicit(&run_once, &has_run, 1,
+ rte_memory_order_relaxed, rte_memory_order_relaxed)) {
rte_eal_init_alert("already called initialization.");
rte_errno = EALREADY;
return -1;
@@ -622,7 +622,7 @@ static void rte_eal_init_alert(const char *msg)
if (fctret < 0) {
rte_eal_init_alert("Invalid 'command line' arguments.");
rte_errno = EINVAL;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
@@ -636,20 +636,20 @@ static void rte_eal_init_alert(const char *msg)
if (eal_plugins_init() < 0) {
rte_eal_init_alert("Cannot init plugins");
rte_errno = EINVAL;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
if (eal_trace_init() < 0) {
rte_eal_init_alert("Cannot init trace");
rte_errno = EFAULT;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
if (eal_option_device_parse()) {
rte_errno = ENODEV;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
@@ -683,7 +683,7 @@ static void rte_eal_init_alert(const char *msg)
if (rte_bus_scan()) {
rte_eal_init_alert("Cannot scan the buses for devices");
rte_errno = ENODEV;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
@@ -736,7 +736,7 @@ static void rte_eal_init_alert(const char *msg)
if (ret < 0) {
rte_eal_init_alert("Cannot get hugepage information.");
rte_errno = EACCES;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
}
@@ -915,8 +915,8 @@ static void rte_eal_init_alert(const char *msg)
static uint32_t run_once;
uint32_t has_run = 0;
- if (!__atomic_compare_exchange_n(&run_once, &has_run, 1, 0,
- __ATOMIC_RELAXED, __ATOMIC_RELAXED)) {
+ if (!rte_atomic_compare_exchange_strong_explicit(&run_once, &has_run, 1,
+ rte_memory_order_relaxed, rte_memory_order_relaxed)) {
RTE_LOG(WARNING, EAL, "Already called cleanup\n");
rte_errno = EALREADY;
return -1;
diff --git a/lib/eal/include/rte_epoll.h b/lib/eal/include/rte_epoll.h
index 01525f5..ae0cf20 100644
--- a/lib/eal/include/rte_epoll.h
+++ b/lib/eal/include/rte_epoll.h
@@ -13,6 +13,7 @@
#include <stdint.h>
+#include <rte_stdatomic.h>
#ifdef __cplusplus
extern "C" {
@@ -38,7 +39,7 @@ enum {
/** interrupt epoll event obj, taken by epoll_event.ptr */
struct rte_epoll_event {
- uint32_t status; /**< OUT: event status */
+ RTE_ATOMIC(uint32_t) status; /**< OUT: event status */
int fd; /**< OUT: event fd */
int epfd; /**< OUT: epoll instance the ev associated with */
struct rte_epoll_data epdata;
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index 5f4b2fb..57da058 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -967,7 +967,7 @@ static void rte_eal_init_alert(const char *msg)
rte_eal_init(int argc, char **argv)
{
int i, fctret, ret;
- static uint32_t run_once;
+ static RTE_ATOMIC(uint32_t) run_once;
uint32_t has_run = 0;
char cpuset[RTE_CPU_AFFINITY_STR_LEN];
char thread_name[RTE_THREAD_NAME_SIZE];
@@ -983,8 +983,8 @@ static void rte_eal_init_alert(const char *msg)
return -1;
}
- if (!__atomic_compare_exchange_n(&run_once, &has_run, 1, 0,
- __ATOMIC_RELAXED, __ATOMIC_RELAXED)) {
+ if (!rte_atomic_compare_exchange_strong_explicit(&run_once, &has_run, 1,
+ rte_memory_order_relaxed, rte_memory_order_relaxed)) {
rte_eal_init_alert("already called initialization.");
rte_errno = EALREADY;
return -1;
@@ -1008,14 +1008,14 @@ static void rte_eal_init_alert(const char *msg)
if (fctret < 0) {
rte_eal_init_alert("Invalid 'command line' arguments.");
rte_errno = EINVAL;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
if (eal_plugins_init() < 0) {
rte_eal_init_alert("Cannot init plugins");
rte_errno = EINVAL;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
@@ -1027,7 +1027,7 @@ static void rte_eal_init_alert(const char *msg)
if (eal_option_device_parse()) {
rte_errno = ENODEV;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
@@ -1061,7 +1061,7 @@ static void rte_eal_init_alert(const char *msg)
if (rte_bus_scan()) {
rte_eal_init_alert("Cannot scan the buses for devices");
rte_errno = ENODEV;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
@@ -1125,7 +1125,7 @@ static void rte_eal_init_alert(const char *msg)
if (ret < 0) {
rte_eal_init_alert("Cannot get hugepage information.");
rte_errno = EACCES;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
}
@@ -1150,7 +1150,7 @@ static void rte_eal_init_alert(const char *msg)
internal_conf->syslog_facility) < 0) {
rte_eal_init_alert("Cannot init logging.");
rte_errno = ENOMEM;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
@@ -1158,7 +1158,7 @@ static void rte_eal_init_alert(const char *msg)
if (rte_eal_vfio_setup() < 0) {
rte_eal_init_alert("Cannot init VFIO");
rte_errno = EAGAIN;
- __atomic_store_n(&run_once, 0, __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&run_once, 0, rte_memory_order_relaxed);
return -1;
}
#endif
@@ -1345,11 +1345,11 @@ static void rte_eal_init_alert(const char *msg)
int
rte_eal_cleanup(void)
{
- static uint32_t run_once;
+ static RTE_ATOMIC(uint32_t) run_once;
uint32_t has_run = 0;
- if (!__atomic_compare_exchange_n(&run_once, &has_run, 1, 0,
- __ATOMIC_RELAXED, __ATOMIC_RELAXED)) {
+ if (!rte_atomic_compare_exchange_strong_explicit(&run_once, &has_run, 1,
+ rte_memory_order_relaxed, rte_memory_order_relaxed)) {
RTE_LOG(WARNING, EAL, "Already called cleanup\n");
rte_errno = EALREADY;
return -1;
diff --git a/lib/eal/linux/eal_interrupts.c b/lib/eal/linux/eal_interrupts.c
index 24fff3d..d4919df 100644
--- a/lib/eal/linux/eal_interrupts.c
+++ b/lib/eal/linux/eal_interrupts.c
@@ -1266,9 +1266,9 @@ struct rte_intr_source {
* ordering below acting as a lock to synchronize
* the event data updating.
*/
- if (!rev || !__atomic_compare_exchange_n(&rev->status,
- &valid_status, RTE_EPOLL_EXEC, 0,
- __ATOMIC_ACQUIRE, __ATOMIC_RELAXED))
+ if (!rev || !rte_atomic_compare_exchange_strong_explicit(&rev->status,
+ &valid_status, RTE_EPOLL_EXEC,
+ rte_memory_order_acquire, rte_memory_order_relaxed))
continue;
events[count].status = RTE_EPOLL_VALID;
@@ -1283,8 +1283,8 @@ struct rte_intr_source {
/* the status update should be observed after
* the other fields change.
*/
- __atomic_store_n(&rev->status, RTE_EPOLL_VALID,
- __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&rev->status, RTE_EPOLL_VALID,
+ rte_memory_order_release);
count++;
}
return count;
@@ -1374,10 +1374,10 @@ struct rte_intr_source {
{
uint32_t valid_status = RTE_EPOLL_VALID;
- while (!__atomic_compare_exchange_n(&ev->status, &valid_status,
- RTE_EPOLL_INVALID, 0, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) {
- while (__atomic_load_n(&ev->status,
- __ATOMIC_RELAXED) != RTE_EPOLL_VALID)
+ while (!rte_atomic_compare_exchange_strong_explicit(&ev->status, &valid_status,
+ RTE_EPOLL_INVALID, rte_memory_order_acquire, rte_memory_order_relaxed)) {
+ while (rte_atomic_load_explicit(&ev->status,
+ rte_memory_order_relaxed) != RTE_EPOLL_VALID)
rte_pause();
valid_status = RTE_EPOLL_VALID;
}
@@ -1402,8 +1402,8 @@ struct rte_intr_source {
epfd = rte_intr_tls_epfd();
if (op == EPOLL_CTL_ADD) {
- __atomic_store_n(&event->status, RTE_EPOLL_VALID,
- __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&event->status, RTE_EPOLL_VALID,
+ rte_memory_order_relaxed);
event->fd = fd; /* ignore fd in event */
event->epfd = epfd;
ev.data.ptr = (void *)event;
@@ -1415,13 +1415,13 @@ struct rte_intr_source {
op, fd, strerror(errno));
if (op == EPOLL_CTL_ADD)
/* rollback status when CTL_ADD fail */
- __atomic_store_n(&event->status, RTE_EPOLL_INVALID,
- __ATOMIC_RELAXED);
+ rte_atomic_store_explicit(&event->status, RTE_EPOLL_INVALID,
+ rte_memory_order_relaxed);
return -1;
}
- if (op == EPOLL_CTL_DEL && __atomic_load_n(&event->status,
- __ATOMIC_RELAXED) != RTE_EPOLL_INVALID)
+ if (op == EPOLL_CTL_DEL && rte_atomic_load_explicit(&event->status,
+ rte_memory_order_relaxed) != RTE_EPOLL_INVALID)
eal_epoll_data_safe_free(event);
return 0;
@@ -1450,8 +1450,8 @@ struct rte_intr_source {
case RTE_INTR_EVENT_ADD:
epfd_op = EPOLL_CTL_ADD;
rev = rte_intr_elist_index_get(intr_handle, efd_idx);
- if (__atomic_load_n(&rev->status,
- __ATOMIC_RELAXED) != RTE_EPOLL_INVALID) {
+ if (rte_atomic_load_explicit(&rev->status,
+ rte_memory_order_relaxed) != RTE_EPOLL_INVALID) {
RTE_LOG(INFO, EAL, "Event already been added.\n");
return -EEXIST;
}
@@ -1474,8 +1474,8 @@ struct rte_intr_source {
case RTE_INTR_EVENT_DEL:
epfd_op = EPOLL_CTL_DEL;
rev = rte_intr_elist_index_get(intr_handle, efd_idx);
- if (__atomic_load_n(&rev->status,
- __ATOMIC_RELAXED) == RTE_EPOLL_INVALID) {
+ if (rte_atomic_load_explicit(&rev->status,
+ rte_memory_order_relaxed) == RTE_EPOLL_INVALID) {
RTE_LOG(INFO, EAL, "Event does not exist.\n");
return -EPERM;
}
@@ -1500,8 +1500,8 @@ struct rte_intr_source {
for (i = 0; i < (uint32_t)rte_intr_nb_efd_get(intr_handle); i++) {
rev = rte_intr_elist_index_get(intr_handle, i);
- if (__atomic_load_n(&rev->status,
- __ATOMIC_RELAXED) == RTE_EPOLL_INVALID)
+ if (rte_atomic_load_explicit(&rev->status,
+ rte_memory_order_relaxed) == RTE_EPOLL_INVALID)
continue;
if (rte_epoll_ctl(rev->epfd, EPOLL_CTL_DEL, rev->fd, rev)) {
/* force free if the entry valid */
diff --git a/lib/eal/ppc/include/rte_atomic.h b/lib/eal/ppc/include/rte_atomic.h
index 7382412..645c713 100644
--- a/lib/eal/ppc/include/rte_atomic.h
+++ b/lib/eal/ppc/include/rte_atomic.h
@@ -48,7 +48,7 @@
static inline int
rte_atomic16_cmpset(volatile uint16_t *dst, uint16_t exp, uint16_t src)
{
- return __atomic_compare_exchange(dst, &exp, &src, 0, rte_memory_order_acquire,
+ return rte_atomic_compare_exchange_strong_explicit(dst, &exp, src, rte_memory_order_acquire,
rte_memory_order_acquire) ? 1 : 0;
}
@@ -90,7 +90,7 @@ static inline int rte_atomic16_dec_and_test(rte_atomic16_t *v)
static inline int
rte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src)
{
- return __atomic_compare_exchange(dst, &exp, &src, 0, rte_memory_order_acquire,
+ return rte_atomic_compare_exchange_strong_explicit(dst, &exp, src, rte_memory_order_acquire,
rte_memory_order_acquire) ? 1 : 0;
}
@@ -132,7 +132,7 @@ static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v)
static inline int
rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t exp, uint64_t src)
{
- return __atomic_compare_exchange(dst, &exp, &src, 0, rte_memory_order_acquire,
+ return rte_atomic_compare_exchange_strong_explicit(dst, &exp, src, rte_memory_order_acquire,
rte_memory_order_acquire) ? 1 : 0;
}
diff --git a/lib/eal/windows/rte_thread.c b/lib/eal/windows/rte_thread.c
index acf6484..145ac4b 100644
--- a/lib/eal/windows/rte_thread.c
+++ b/lib/eal/windows/rte_thread.c
@@ -9,6 +9,7 @@
#include <rte_eal.h>
#include <rte_common.h>
#include <rte_errno.h>
+#include <rte_stdatomic.h>
#include <rte_thread.h>
#include "eal_windows.h"
@@ -19,7 +20,7 @@ struct eal_tls_key {
struct thread_routine_ctx {
rte_thread_func thread_func;
- bool thread_init_failed;
+ RTE_ATOMIC(bool) thread_init_failed;
void *routine_args;
};
@@ -168,7 +169,8 @@ struct thread_routine_ctx {
thread_func_wrapper(void *arg)
{
struct thread_routine_ctx ctx = *(struct thread_routine_ctx *)arg;
- const bool thread_exit = __atomic_load_n(&ctx.thread_init_failed, __ATOMIC_ACQUIRE);
+ const bool thread_exit = rte_atomic_load_explicit(
+ &ctx.thread_init_failed, rte_memory_order_acquire);
free(arg);
@@ -237,7 +239,7 @@ struct thread_routine_ctx {
}
resume_thread:
- __atomic_store_n(&ctx->thread_init_failed, thread_exit, __ATOMIC_RELEASE);
+ rte_atomic_store_explicit(&ctx->thread_init_failed, thread_exit, rte_memory_order_release);
if (ResumeThread(thread_handle) == (DWORD)-1) {
ret = thread_log_last_error("ResumeThread()");
--
1.8.3.1
next prev parent reply other threads:[~2023-10-26 0:32 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-16 23:08 [PATCH 00/21] use rte optional stdatomic API Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 01/21] power: fix use of rte stdatomic Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 02/21] event/cnxk: remove single " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 03/21] power: use rte optional stdatomic API Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 04/21] bbdev: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 05/21] eal: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 06/21] eventdev: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 07/21] gpudev: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 08/21] ipsec: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 09/21] mbuf: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 10/21] mempool: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 11/21] rcu: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 12/21] pdump: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 13/21] stack: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 14/21] telemetry: " Tyler Retzlaff
2023-10-16 23:08 ` [PATCH 15/21] vhost: " Tyler Retzlaff
2023-10-16 23:09 ` [PATCH 16/21] cryptodev: " Tyler Retzlaff
2023-10-16 23:09 ` [PATCH 17/21] distributor: " Tyler Retzlaff
2023-10-16 23:09 ` [PATCH 18/21] ethdev: " Tyler Retzlaff
2023-10-16 23:09 ` [PATCH 19/21] hash: " Tyler Retzlaff
2023-10-16 23:09 ` [PATCH 20/21] timer: " Tyler Retzlaff
2023-10-16 23:09 ` [PATCH 21/21] ring: " Tyler Retzlaff
2023-10-17 20:30 ` [PATCH v2 00/19] " Tyler Retzlaff
2023-10-17 20:30 ` [PATCH v2 01/19] power: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 02/19] bbdev: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 03/19] eal: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 04/19] eventdev: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 05/19] gpudev: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 06/19] ipsec: " Tyler Retzlaff
2023-10-24 8:45 ` Konstantin Ananyev
2023-10-17 20:31 ` [PATCH v2 07/19] mbuf: " Tyler Retzlaff
2023-10-24 8:46 ` Konstantin Ananyev
2023-10-17 20:31 ` [PATCH v2 08/19] mempool: " Tyler Retzlaff
2023-10-24 8:47 ` Konstantin Ananyev
2023-10-17 20:31 ` [PATCH v2 09/19] rcu: " Tyler Retzlaff
2023-10-25 9:41 ` Ruifeng Wang
2023-10-25 22:38 ` Tyler Retzlaff
2023-10-26 4:24 ` Ruifeng Wang
2023-10-26 16:36 ` Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 10/19] pdump: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 11/19] stack: " Tyler Retzlaff
2023-10-24 8:48 ` Konstantin Ananyev
2023-10-17 20:31 ` [PATCH v2 12/19] telemetry: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 13/19] vhost: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 14/19] cryptodev: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 15/19] distributor: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 16/19] ethdev: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 17/19] hash: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 18/19] timer: " Tyler Retzlaff
2023-10-17 20:31 ` [PATCH v2 19/19] ring: " Tyler Retzlaff
2023-10-24 8:43 ` Konstantin Ananyev
2023-10-24 9:56 ` Morten Brørup
2023-10-24 15:58 ` Tyler Retzlaff
2023-10-24 16:36 ` Morten Brørup
2023-10-24 16:29 ` Tyler Retzlaff
2023-10-25 10:06 ` Konstantin Ananyev
2023-10-25 22:49 ` Tyler Retzlaff
2023-10-25 23:22 ` Tyler Retzlaff
2023-10-17 23:55 ` [PATCH v2 00/19] " Stephen Hemminger
2023-10-26 0:31 ` [PATCH v3 " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 01/19] power: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 02/19] bbdev: " Tyler Retzlaff
2023-10-26 11:57 ` Maxime Coquelin
2023-10-26 0:31 ` Tyler Retzlaff [this message]
2023-10-26 0:31 ` [PATCH v3 04/19] eventdev: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 05/19] gpudev: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 06/19] ipsec: " Tyler Retzlaff
2023-10-26 15:54 ` [EXT] " Akhil Goyal
2023-10-26 0:31 ` [PATCH v3 07/19] mbuf: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 08/19] mempool: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 09/19] rcu: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 10/19] pdump: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 11/19] stack: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 12/19] telemetry: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 13/19] vhost: " Tyler Retzlaff
2023-10-26 11:57 ` Maxime Coquelin
2023-10-26 0:31 ` [PATCH v3 14/19] cryptodev: " Tyler Retzlaff
2023-10-26 15:53 ` [EXT] " Akhil Goyal
2023-10-26 0:31 ` [PATCH v3 15/19] distributor: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 16/19] ethdev: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 17/19] hash: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 18/19] timer: " Tyler Retzlaff
2023-10-26 0:31 ` [PATCH v3 19/19] ring: " Tyler Retzlaff
2023-10-26 13:47 ` [PATCH v3 00/19] " David Marchand
2023-10-30 15:34 ` David Marchand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1698280314-25861-4-git-send-email-roretzla@linux.microsoft.com \
--to=roretzla@linux.microsoft.com \
--cc=anatoly.burakov@intel.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=bruce.richardson@intel.com \
--cc=chenbo.xia@intel.com \
--cc=ciara.power@intel.com \
--cc=david.hunt@intel.com \
--cc=dev@dpdk.org \
--cc=dmitry.kozliuk@gmail.com \
--cc=dmitrym@microsoft.com \
--cc=drc@linux.vnet.ibm.com \
--cc=eagostini@nvidia.com \
--cc=erik.g.carrillo@intel.com \
--cc=fanzhang.oss@gmail.com \
--cc=ferruh.yigit@amd.com \
--cc=gakhil@marvell.com \
--cc=harry.van.haaren@intel.com \
--cc=hkalra@marvell.com \
--cc=honnappa.nagarahalli@arm.com \
--cc=jerinj@marvell.com \
--cc=konstantin.v.ananyev@yandex.ru \
--cc=matan@nvidia.com \
--cc=maxime.coquelin@redhat.com \
--cc=navasile@linux.microsoft.com \
--cc=nicolas.chautru@intel.com \
--cc=olivier.matz@6wind.com \
--cc=orika@nvidia.com \
--cc=pallavi.kadam@intel.com \
--cc=pbhagavatula@marvell.com \
--cc=reshma.pattan@intel.com \
--cc=sameh.gobriel@intel.com \
--cc=sivaprasad.tummala@amd.com \
--cc=skori@marvell.com \
--cc=stephen@networkplumber.org \
--cc=sthotton@marvell.com \
--cc=suanmingm@nvidia.com \
--cc=thomas@monjalon.net \
--cc=viacheslavo@nvidia.com \
--cc=vladimir.medvedkin@intel.com \
--cc=yipeng1.wang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.