summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGurucharan Shetty <guru@ovn.org>2019-06-12 03:57:29 -0700
committerGurucharan Shetty <guru@ovn.org>2019-06-26 02:02:17 -0700
commit35736cff1901eab5b33892ff053f02d5d87cb8c1 (patch)
tree3ac7a9d67874362a1a5c93ea82def389f2df0a2a /lib
parent7235cd206e9f768cbbc46ca0a41bdc3e9cf60cfa (diff)
downloadopenvswitch-35736cff1901eab5b33892ff053f02d5d87cb8c1.tar.gz
ovs-atomic-c++.h: Fix for 64 bit atomics.
Commit e981a45a6cae4 (ovs-atomic: Add 64 bit apis.) added a few 64 bit apis (e.g: atomic_count_inc64). For C++, this invokes std::atomic_fetch_*_explicit() functions in lib/ovs-atomic-c++.h. The function overloading for 64 bit function fails without specifiying something like: std::atomic_fetch_*_explicit<std::uint64_t>(). But it looks tricky to do this with macros. This patch tries to fix the compilation failures by calling atomic functions on the variables itself. Signed-off-by: Gurucharan Shetty <guru@ovn.org> Acked-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/ovs-atomic-c++.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/ovs-atomic-c++.h b/lib/ovs-atomic-c++.h
index 949e4ffd3..d47b8dd39 100644
--- a/lib/ovs-atomic-c++.h
+++ b/lib/ovs-atomic-c++.h
@@ -47,15 +47,15 @@ using std::atomic_compare_exchange_weak_explicit;
atomic_and_explicit(RMW, ARG, ORIG, memory_order_seq_cst)
#define atomic_add_explicit(RMW, ARG, ORIG, ORDER) \
- (*(ORIG) = std::atomic_fetch_add_explicit(RMW, ARG, ORDER), (void) 0)
+ (*(ORIG) = (*(RMW)).fetch_add(ARG, ORDER), (void) 0)
#define atomic_sub_explicit(RMW, ARG, ORIG, ORDER) \
- (*(ORIG) = std::atomic_fetch_sub_explicit(RMW, ARG, ORDER), (void) 0)
+ (*(ORIG) = (*(RMW)).fetch_sub(ARG, ORDER), (void) 0)
#define atomic_or_explicit(RMW, ARG, ORIG, ORDER) \
- (*(ORIG) = std::atomic_fetch_or_explicit(RMW, ARG, ORDER), (void) 0)
+ (*(ORIG) = (*(RMW)).fetch_or(ARG, ORDER), (void) 0)
#define atomic_xor_explicit(RMW, ARG, ORIG, ORDER) \
- (*(ORIG) = std::atomic_fetch_xor_explicit(RMW, ARG, ORDER), (void) 0)
+ (*(ORIG) = (*(RMW)).fetch_xor(ARG, ORDER), (void) 0)
#define atomic_and_explicit(RMW, ARG, ORIG, ORDER) \
- (*(ORIG) = std::atomic_fetch_and_explicit(RMW, ARG, ORDER), (void) 0)
+ (*(ORIG) = (*(RMW)).fetch_and(ARG, ORDER), (void) 0)
using std::atomic_flag;
using std::atomic_flag_test_and_set_explicit;