summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKinsey Moore <kinsey.moore@oarcorp.com>2021-10-07 15:38:51 -0500
committerJoel Sherrill <joel@rtems.org>2021-10-08 09:05:05 -0500
commit38f3de6469a43ff053f8c082175ca67b0c489af9 (patch)
tree5a34d6d9ad88d7b9627f31c0262ba4666819a5eb
parent0baf1a854553c09a2ebdc5b0e5d84469b7f8aa89 (diff)
rtemsbsd/atomic: Return a value for CMPSET6-freebsd-12
When the cmpset and fcmpset functions were refactored, the return value of the operation was discarded instead of being returned for SMP builds outside of gcc 4.x. This had the effect of turning these functions into a long busywait loop that eventually failed due to integer overflow. This patch restores the use of the return value of the atomic operations.
-rw-r--r--rtemsbsd/include/machine/atomic.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/rtemsbsd/include/machine/atomic.h b/rtemsbsd/include/machine/atomic.h
index 9465fefd..f25dc5d0 100644
--- a/rtemsbsd/include/machine/atomic.h
+++ b/rtemsbsd/include/machine/atomic.h
@@ -530,7 +530,7 @@ atomic_clear_rel_long(volatile long *p, long v)
#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC)
#define _ATOMIC_CMPSET(T, p, cmp, set, mo) \
atomic_##T *q = (atomic_##T *)RTEMS_DEVOLATILE(T *, p); \
- atomic_compare_exchange_strong_explicit(q, &cmp, set, \
+ rv = atomic_compare_exchange_strong_explicit(q, &cmp, set, \
mo, memory_order_relaxed)
#else
#define _ATOMIC_CMPSET(T, p, cmp, set, mo) \
@@ -676,7 +676,7 @@ atomic_cmpset_rel_ptr(volatile uintptr_t *p, uintptr_t cmp, uintptr_t set)
#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC)
#define _ATOMIC_FCMPSET(T, p, cmp, set, mo) \
atomic_##T *q = (atomic_##T *)RTEMS_DEVOLATILE(T *, p); \
- atomic_compare_exchange_strong_explicit(q, cmp, set, \
+ rv = atomic_compare_exchange_strong_explicit(q, cmp, set, \
mo, memory_order_relaxed)
#else
#define _ATOMIC_FCMPSET(T, p, cmp, set, mo) \