acked_token should be read using atomic operation as the the API rte_rcu_qsbr_check is advertised as multi-thread safe.
Fixes: 1f90d32ce175 ("rcu: add least acknowledged token optimization") Cc: sta...@dpdk.org Reported-by: Ola Liljedahl <ola.liljed...@arm.com> Signed-off-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com> Reviewed-by: Ola Liljedahl <ola.liljed...@arm.com> --- lib/rcu/rte_rcu_qsbr.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/rcu/rte_rcu_qsbr.h b/lib/rcu/rte_rcu_qsbr.h index 5979fb0efb..f6a3731308 100644 --- a/lib/rcu/rte_rcu_qsbr.h +++ b/lib/rcu/rte_rcu_qsbr.h @@ -667,7 +667,8 @@ rte_rcu_qsbr_check(struct rte_rcu_qsbr *v, uint64_t t, bool wait) RTE_ASSERT(v != NULL); /* Check if all the readers have already acknowledged this token */ - if (likely(t <= v->acked_token)) { + if (likely(t <= rte_atomic_load_explicit(&v->acked_token, + rte_memory_order_relaxed))) { __RTE_RCU_DP_LOG(DEBUG, "%s: check: token = %" PRIu64 ", wait = %d", __func__, t, wait); -- 2.34.1