OK

On 8/10/21 7:43 am, Kinsey Moore wrote:
> 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.
> ---
>  rtemsbsd/include/machine/atomic.h | 4 ++--
>  1 file 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) \
> 
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to