diff options
author | Gurucharan Shetty <guru@ovn.org> | 2019-06-12 03:57:29 -0700 |
---|---|---|
committer | Gurucharan Shetty <guru@ovn.org> | 2019-06-26 02:02:17 -0700 |
commit | 35736cff1901eab5b33892ff053f02d5d87cb8c1 (patch) | |
tree | 3ac7a9d67874362a1a5c93ea82def389f2df0a2a /lib | |
parent | 7235cd206e9f768cbbc46ca0a41bdc3e9cf60cfa (diff) | |
download | openvswitch-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++.h | 10 |
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; |