patch 'test/timer: replace volatile with C11 atomics' has been queued to stable release 24.11.5
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Thu Mar 19 23:02:49 CET 2026
Hi,
FYI, your patch has been queued to stable release 24.11.5
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 03/21/26. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/f4c3094fbc9d093a213ad4f7f51b1278629a65c0
Thanks.
Luca Boccassi
---
>From f4c3094fbc9d093a213ad4f7f51b1278629a65c0 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen at networkplumber.org>
Date: Thu, 5 Mar 2026 09:51:00 -0800
Subject: [PATCH] test/timer: replace volatile with C11 atomics
[ upstream commit 5e52e43cdf823a9c59199eed40413e2bd5e9c09a ]
Replace volatile variables in test_timer_secondary shared memory
structure with RTE_ATOMIC() and rte_atomic_*_explicit() operations.
Change expected_count and expired_count from int to unsigned int
since they are non-negative counters.
Fixes: 50247fe03fe0 ("test/timer: exercise new APIs in secondary process")
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
app/test/test_timer_secondary.c | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/app/test/test_timer_secondary.c b/app/test/test_timer_secondary.c
index d85878dc5b..7d146edefb 100644
--- a/app/test/test_timer_secondary.c
+++ b/app/test/test_timer_secondary.c
@@ -12,7 +12,9 @@
#include <rte_timer.h>
#include <rte_cycles.h>
#include <rte_mempool.h>
+#include <rte_pause.h>
#include <rte_random.h>
+#include <rte_stdatomic.h>
#include "test.h"
@@ -41,12 +43,12 @@ struct test_info {
unsigned int sec_lcore;
unsigned int num_timers;
uint32_t timer_data_id;
- volatile int expected_count;
- volatile int expired_count;
+ RTE_ATOMIC(unsigned int) expected_count;
+ RTE_ATOMIC(unsigned int) expired_count;
struct rte_mempool *tim_mempool;
struct rte_timer *expired_timers[NUM_TIMERS_MAX];
int expired_timers_idx;
- volatile int exit_flag;
+ RTE_ATOMIC(int) exit_flag;
};
static int
@@ -80,7 +82,8 @@ handle_expired_timer(struct rte_timer *tim)
{
struct test_info *test_info = tim->arg;
- test_info->expired_count++;
+ rte_atomic_fetch_add_explicit(&test_info->expired_count, 1,
+ rte_memory_order_relaxed);
test_info->expired_timers[test_info->expired_timers_idx++] = tim;
}
@@ -92,7 +95,8 @@ timer_manage_loop(void *arg)
uint64_t prev_tsc = 0, cur_tsc, diff_tsc;
struct test_info *test_info = arg;
- while (!test_info->exit_flag) {
+ while (!rte_atomic_load_explicit(&test_info->exit_flag,
+ rte_memory_order_acquire)) {
cur_tsc = rte_rdtsc();
diff_tsc = cur_tsc - prev_tsc;
@@ -167,7 +171,8 @@ test_timer_secondary(void)
/* must set exit flag even on error case, so check ret later */
rte_delay_ms(2000);
- test_info->exit_flag = 1;
+ rte_atomic_store_explicit(&test_info->exit_flag, 1,
+ rte_memory_order_release);
TEST_ASSERT_SUCCESS(ret, "Secondary process execution failed");
rte_eal_wait_lcore(*mgr_lcorep);
@@ -176,7 +181,10 @@ test_timer_secondary(void)
rte_timer_alt_dump_stats(test_info->timer_data_id, stdout);
#endif
- return test_info->expected_count == test_info->expired_count ?
+ return rte_atomic_load_explicit(&test_info->expected_count,
+ rte_memory_order_relaxed) ==
+ rte_atomic_load_explicit(&test_info->expired_count,
+ rte_memory_order_relaxed) ?
TEST_SUCCESS : TEST_FAILED;
} else if (proc_type == RTE_PROC_SECONDARY) {
@@ -206,7 +214,8 @@ test_timer_secondary(void)
if (ret < 0)
return TEST_FAILED;
- test_info->expected_count++;
+ rte_atomic_fetch_add_explicit(&test_info->expected_count,
+ 1, rte_memory_order_relaxed);
/* randomly leave timer running or stop it */
if (rte_rand() & 1)
@@ -215,7 +224,8 @@ test_timer_secondary(void)
ret = rte_timer_alt_stop(test_info->timer_data_id,
tim);
if (ret == 0) {
- test_info->expected_count--;
+ rte_atomic_fetch_sub_explicit(&test_info->expected_count,
+ 1, rte_memory_order_relaxed);
rte_mempool_put(test_info->tim_mempool,
(void *)tim);
}
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-03-19 22:00:49.829573785 +0000
+++ 0057-test-timer-replace-volatile-with-C11-atomics.patch 2026-03-19 22:00:47.818359365 +0000
@@ -1 +1 @@
-From 5e52e43cdf823a9c59199eed40413e2bd5e9c09a Mon Sep 17 00:00:00 2001
+From f4c3094fbc9d093a213ad4f7f51b1278629a65c0 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 5e52e43cdf823a9c59199eed40413e2bd5e9c09a ]
+
@@ -13 +14,0 @@
-Cc: stable at dpdk.org
@@ -21 +22 @@
-index c80dee9c6c..57ab39130d 100644
+index d85878dc5b..7d146edefb 100644
@@ -50 +51 @@
-@@ -76,7 +78,8 @@ handle_expired_timer(struct rte_timer *tim)
+@@ -80,7 +82,8 @@ handle_expired_timer(struct rte_timer *tim)
@@ -60 +61 @@
-@@ -88,7 +91,8 @@ timer_manage_loop(void *arg)
+@@ -92,7 +95,8 @@ timer_manage_loop(void *arg)
@@ -70 +71 @@
-@@ -163,7 +167,8 @@ test_timer_secondary(void)
+@@ -167,7 +171,8 @@ test_timer_secondary(void)
@@ -73 +74 @@
- rte_delay_ms(500);
+ rte_delay_ms(2000);
@@ -80 +81 @@
-@@ -172,7 +177,10 @@ test_timer_secondary(void)
+@@ -176,7 +181,10 @@ test_timer_secondary(void)
@@ -92 +93 @@
-@@ -202,7 +210,8 @@ test_timer_secondary(void)
+@@ -206,7 +214,8 @@ test_timer_secondary(void)
@@ -102 +103 @@
-@@ -211,7 +220,8 @@ test_timer_secondary(void)
+@@ -215,7 +224,8 @@ test_timer_secondary(void)
More information about the stable
mailing list