[ovs-dev] [PATCH 3/5] ovs-atomic: Avoid evaluating arguments multiple times.

Jarno Rajahalme jrajahalme at nicira.com
Sat Jul 19 04:05:50 UTC 2014


ovs-atomic-gcc4+ did expand arguments again, if locked set/get was
called.

Also fix atomic_is_lock_free().

Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
---
 lib/ovs-atomic-gcc4+.h |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/ovs-atomic-gcc4+.h b/lib/ovs-atomic-gcc4+.h
index e3dd68e..9a79f7e 100644
--- a/lib/ovs-atomic-gcc4+.h
+++ b/lib/ovs-atomic-gcc4+.h
@@ -72,7 +72,7 @@ atomic_signal_fence(memory_order order OVS_UNUSED)
 
 #define atomic_is_lock_free(OBJ)                \
     ((void) *(OBJ),                             \
-     IF_LOCKLESS_ATOMIC(OBJ, true, false))
+     IS_LOCKLESS_ATOMIC(*(OBJ)) ? 2 : 0)
 
 #define atomic_store(DST, SRC) \
     atomic_store_explicit(DST, SRC, memory_order_seq_cst)
@@ -87,7 +87,7 @@ atomic_signal_fence(memory_order order OVS_UNUSED)
             *dst__ = src__;                             \
             atomic_thread_fence_if_seq_cst(order__);    \
         } else {                                        \
-            atomic_store_locked(DST, SRC);              \
+            atomic_store_locked(dst__, src__);          \
         }                                               \
         (void) 0;                                       \
     })
@@ -103,7 +103,7 @@ atomic_signal_fence(memory_order order OVS_UNUSED)
             atomic_thread_fence_if_seq_cst(order__);    \
             *dst__ = *src__;                            \
         } else {                                        \
-            atomic_read_locked(SRC, DST);               \
+            atomic_read_locked(src__, dst__);           \
         }                                               \
         (void) 0;                                       \
     })
@@ -140,7 +140,7 @@ atomic_signal_fence(memory_order order OVS_UNUSED)
         if (IS_LOCKLESS_ATOMIC(*rmw__)) {                   \
             *orig__ = __sync_fetch_and_##OP(rmw__, arg__);  \
         } else {                                            \
-            atomic_op_locked(RMW, OP, ARG, ORIG);           \
+            atomic_op_locked(rmw__, OP, arg__, orig__);     \
         }                                                   \
     })
 
-- 
1.7.10.4




More information about the dev mailing list