Changeset be6515d in rtems-libbsd


Ignore:
Timestamp:
Sep 17, 2018, 5:38:32 AM (13 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
c1e05b9ea378b2971e3d7704779112b4bc4296da, 4a77611a223ea883fb548679b516d326a020d447
Children:
860d833
Parents:
1af372a
git-author:
Sebastian Huber <sebastian.huber@…> (09/17/18 05:38:32)
git-committer:
Sebastian Huber <sebastian.huber@…> (09/21/18 08:29:43)
Message:

ck: Use relaxed memory order if possible

In uniprocessor configurations we can use a relaxed memory order and
compiler memory barriers should be sufficient.

Update #3472.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/contrib/ck/include/gcc/ck_pr.h

    r1af372a rbe6515d  
    3333
    3434#include <ck_cc.h>
     35#ifdef RTEMS_SMP
     36#define CK_PR_ATOMIC_ORDER __ATOMIC_SEQ_CST
     37#else
     38#define CK_PR_ATOMIC_ORDER __ATOMIC_RELAXED
     39#endif
    3540
    3641CK_CC_INLINE static void
     
    123128 * Load and store fences are equivalent to full fences in the GCC port.
    124129 */
    125 #define CK_PR_FENCE(T)                                  \
    126         CK_CC_INLINE static void                        \
    127         ck_pr_fence_strict_##T(void)                    \
    128         {                                               \
    129                 __atomic_thread_fence(__ATOMIC_SEQ_CST);\
    130         }
     130#ifdef RTEMS_SMP
     131#define CK_PR_FENCE(T)                                          \
     132        CK_CC_INLINE static void                                \
     133        ck_pr_fence_strict_##T(void)                            \
     134        {                                                       \
     135                __atomic_thread_fence(CK_PR_ATOMIC_ORDER);      \
     136        }
     137#else
     138#define CK_PR_FENCE(T)                                          \
     139        CK_CC_INLINE static void                                \
     140        ck_pr_fence_strict_##T(void)                            \
     141        {                                                       \
     142                __asm__ __volatile__("" ::: "memory");          \
     143        }
     144#endif
    131145
    132146CK_PR_FENCE(atomic)
     
    160174                bool z;                                                         \
    161175                z = __atomic_compare_exchange_n((T *)target, &compare, set,     \
    162                     false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);                 \
     176                    false, CK_PR_ATOMIC_ORDER, CK_PR_ATOMIC_ORDER);             \
    163177                return z;                                                       \
    164178        }
     
    187201        *(void **)v = compare;
    188202        return __atomic_compare_exchange_n((void **)target, v, set, false,
    189             __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
     203            CK_PR_ATOMIC_ORDER, CK_PR_ATOMIC_ORDER);
    190204}
    191205
     
    196210                *v = compare;                                           \
    197211                return __atomic_compare_exchange_n(target, v, set,      \
    198                     false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);         \
     212                    false, CK_PR_ATOMIC_ORDER, CK_PR_ATOMIC_ORDER);     \
    199213        }
    200214
     
    217231        {                                                       \
    218232                d = __atomic_fetch_add((T *)target, d,          \
    219                     __ATOMIC_SEQ_CST);                          \
     233                    CK_PR_ATOMIC_ORDER);                        \
    220234                return (d);                                     \
    221235        }
     
    244258        {                                                       \
    245259                d = __atomic_fetch_##K((T *)target, d,          \
    246                     __ATOMIC_SEQ_CST);                          \
     260                    CK_PR_ATOMIC_ORDER);                        \
    247261                return;                                         \
    248262        }
     
    297311#undef CK_PR_UNARY_S
    298312#undef CK_PR_UNARY
     313#undef CK_PR_ATOMIC_ORDER
    299314#endif /* !CK_F_PR */
    300315#endif /* CK_PR_GCC_H */
Note: See TracChangeset for help on using the changeset viewer.