[dpdk-dev] [PATCH v4 2/4] ring: read tail using atomic load
Gavin Hu
gavin.hu at arm.com
Mon Sep 17 10:11:17 CEST 2018
In update_tail, read ht->tail using __atomic_load.Although the
compiler currently seems to be doing the right thing even without
_atomic_load, we don't want to give the compiler freedom to optimise
what should be an atomic load, it should not be arbitarily moved
around.
Fixes: 39368ebfc6 ("ring: introduce C11 memory model barrier option")
Cc: stable at dpdk.org
Signed-off-by: Gavin Hu <gavin.hu at arm.com>
Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli at arm.com>
Reviewed-by: Steve Capper <steve.capper at arm.com>
Reviewed-by: Ola Liljedahl <Ola.Liljedahl at arm.com>
---
lib/librte_ring/rte_ring_c11_mem.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/librte_ring/rte_ring_c11_mem.h b/lib/librte_ring/rte_ring_c11_mem.h
index 94df3c4..234fea0 100644
--- a/lib/librte_ring/rte_ring_c11_mem.h
+++ b/lib/librte_ring/rte_ring_c11_mem.h
@@ -21,7 +21,8 @@ update_tail(struct rte_ring_headtail *ht, uint32_t old_val, uint32_t new_val,
* we need to wait for them to complete
*/
if (!single)
- while (unlikely(ht->tail != old_val))
+ while (unlikely(old_val != __atomic_load_n(&ht->tail,
+ __ATOMIC_RELAXED)))
rte_pause();
__atomic_store_n(&ht->tail, new_val, __ATOMIC_RELEASE);
--
2.7.4
More information about the dev
mailing list