From ce74a620bf9e1a40b7ba06d35160e20633a4d8bb Mon Sep 17 00:00:00 2001 From: Catalin Enache Date: Fri, 7 Jul 2017 13:11:16 +0300 Subject: [PATCH 1/6] Add atomic_exchange_relaxed. * include/atomic.h (atomic_exchange_relaxed): New Upstream-Status: Backport Author: Torvald Riegel Signed-off-by: Catalin Enache --- ChangeLog | 4 ++++ include/atomic.h | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index 0fbda90..cb87279 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2016-08-05 Torvald Riegel + + * include/atomic.h (atomic_exchange_relaxed): New. + 2016-01-28 Carlos O'Donell Alexey Makhalov Florian Weimer diff --git a/include/atomic.h b/include/atomic.h index ad3db25..129ee24 100644 --- a/include/atomic.h +++ b/include/atomic.h @@ -588,6 +588,9 @@ void __atomic_link_error (void); __atomic_compare_exchange_n ((mem), (expected), (desired), 1, \ __ATOMIC_RELEASE, __ATOMIC_RELAXED); }) +# define atomic_exchange_relaxed(mem, desired) \ + ({ __atomic_check_size((mem)); \ + __atomic_exchange_n ((mem), (desired), __ATOMIC_RELAXED); }) # define atomic_exchange_acquire(mem, desired) \ ({ __atomic_check_size((mem)); \ __atomic_exchange_n ((mem), (desired), __ATOMIC_ACQUIRE); }) @@ -684,6 +687,12 @@ void __atomic_link_error (void); *(expected) == __atg103_expected; }) # endif +/* XXX Fall back to acquire MO because archs do not define a weaker + atomic_exchange. */ +# ifndef atomic_exchange_relaxed +# define atomic_exchange_relaxed(mem, val) \ + atomic_exchange_acq ((mem), (val)) +# endif # ifndef atomic_exchange_acquire # define atomic_exchange_acquire(mem, val) \ atomic_exchange_acq ((mem), (val)) -- 2.10.2