mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-07-02 11:51:02 +08:00
rtemsbsd/atomic: Return a value for CMPSET
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.
This commit is contained in:
parent
0baf1a8545
commit
38f3de6469
@ -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) \
|
||||
|
Loading…
x
Reference in New Issue
Block a user