From 2f6d7bb93c157b874efb79a2d1583a4c368bf89a Mon Sep 17 00:00:00 2001 From: Sirshak Das Date: Wed, 3 Oct 2018 22:53:51 +0000 Subject: vppinfra: add atomic macros for __sync builtins This is first part of addition of atomic macros with only macros for __sync builtins. - Based on earlier patch by Damjan (https://gerrit.fd.io/r/#/c/10729/) Additionally - clib_atomic_release macro added and used in the absence of any memory barrier. - clib_atomic_bool_cmp_and_swap added Change-Id: Ie4e48c1e184a652018d1d0d87c4be80ddd180a3b Original-patch-by: Damjan Marion Signed-off-by: Sirshak Das Reviewed-by: Honnappa Nagarahalli Reviewed-by: Ola Liljedahl Reviewed-by: Steve Capper --- src/plugins/ioam/export-common/ioam_export.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/plugins/ioam/export-common') diff --git a/src/plugins/ioam/export-common/ioam_export.h b/src/plugins/ioam/export-common/ioam_export.h index 36d71d26716..6e640951802 100644 --- a/src/plugins/ioam/export-common/ioam_export.h +++ b/src/plugins/ioam/export-common/ioam_export.h @@ -436,11 +436,11 @@ ioam_export_process_common (ioam_export_main_t * em, vlib_main_t * vm, */ for (i = 0; i < vec_len (thread_index); i++) { - while (__sync_lock_test_and_set (em->lockp[thread_index[i]], 1)) + while (clib_atomic_test_and_set (em->lockp[thread_index[i]])) ; em->buffer_per_thread[thread_index[i]] = vec_pop (vec_buffer_indices); - *em->lockp[thread_index[i]] = 0; + clib_atomic_release (em->lockp[thread_index[i]]); } /* Send the buffers */ @@ -479,7 +479,7 @@ do { \ from = vlib_frame_vector_args (F); \ n_left_from = (F)->n_vectors; \ next_index = (N)->cached_next_index; \ - while (__sync_lock_test_and_set ((EM)->lockp[(VM)->thread_index], 1)); \ + while (clib_atomic_test_and_set ((EM)->lockp[(VM)->thread_index])); \ my_buf = ioam_export_get_my_buffer (EM, (VM)->thread_index); \ my_buf->touched_at = vlib_time_now (VM); \ while (n_left_from > 0) \ -- cgit 1.2.3-korg