From 3bb6540ab531f5474217f5f1f7cb7b8dce1d4e57 Mon Sep 17 00:00:00 2001 From: Sirshak Das Date: Tue, 28 May 2019 08:44:46 -0500 Subject: [PATCH] Switch atomic test and set API from __sync to __atomic builtin __sync_test_and_set uses full memory barriers for AArch64, __atomic_exchange(ACQUIRE) would use load acquire. Change-Id: Ifdf2481db3b9dde6c5842d75671402862adb6d81 Signed-off-by: Sirshak Das Reviewed-by: Lijian Zhang Reviewed-by: Honnappa Nagarahalli --- src/vppinfra/atomics.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vppinfra/atomics.h b/src/vppinfra/atomics.h index 5444b6df350..1d480af407b 100644 --- a/src/vppinfra/atomics.h +++ b/src/vppinfra/atomics.h @@ -37,7 +37,7 @@ #define clib_atomic_cmp_and_swap(addr,old,new) __sync_val_compare_and_swap(addr, old, new) #define clib_atomic_bool_cmp_and_swap(addr,old,new) __sync_bool_compare_and_swap(addr, old, new) -#define clib_atomic_test_and_set(a) __sync_lock_test_and_set(a, 1) +#define clib_atomic_test_and_set(a) __atomic_exchange_n(a, 1, __ATOMIC_ACQUIRE) #define clib_atomic_release(a) __sync_lock_release(a) #define clib_atomic_fence_rel() __atomic_thread_fence(__ATOMIC_RELEASE); -- 2.16.6