summaryrefslogtreecommitdiff
path: root/lib/ovs-atomic-gcc4+.h
diff options
context:
space:
mode:
authorGaetan Rivet <grive@u256.net>2021-09-08 11:47:35 +0200
committerIlya Maximets <i.maximets@ovn.org>2022-01-18 19:30:17 +0100
commit5878b9252209528d04c481c425f4bd41ab7943b6 (patch)
treea73037cbfdf25e094efe5c961c673b3303a0074e /lib/ovs-atomic-gcc4+.h
parent83823ae328aeee295d50cec57b9dc926fa3d1cf6 (diff)
downloadopenvswitch-5878b9252209528d04c481c425f4bd41ab7943b6.tar.gz
ovs-atomic: Expose atomic exchange operation.
The atomic exchange operation is a useful primitive that should be available as well. Most compilers already expose or offer a way to use it, but a single symbol needs to be defined. Signed-off-by: Gaetan Rivet <grive@u256.net> Reviewed-by: Eli Britstein <elibr@nvidia.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'lib/ovs-atomic-gcc4+.h')
-rw-r--r--lib/ovs-atomic-gcc4+.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/ovs-atomic-gcc4+.h b/lib/ovs-atomic-gcc4+.h
index 25bcf20a0..f9accde1a 100644
--- a/lib/ovs-atomic-gcc4+.h
+++ b/lib/ovs-atomic-gcc4+.h
@@ -128,6 +128,11 @@ atomic_signal_fence(memory_order order)
#define atomic_compare_exchange_weak_explicit \
atomic_compare_exchange_strong_explicit
+#define atomic_exchange_explicit(DST, SRC, ORDER) \
+ __sync_lock_test_and_set(DST, SRC)
+#define atomic_exchange(DST, SRC) \
+ atomic_exchange_explicit(DST, SRC, memory_order_seq_cst)
+
#define atomic_op__(RMW, OP, ARG, ORIG) \
({ \
typeof(RMW) rmw__ = (RMW); \