diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-10-24 13:29:03 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-09 10:04:32 +0100 |
commit | 71a0436d149858e78377e9dada180dfb28620adc (patch) | |
tree | dee974f37c7df095a74acb84b38f55d43dc08815 | |
parent | cc8f00d614145bee1a806f7a171279380de7773f (diff) |
Add thread fences to <machine/atomic.h>
-rw-r--r-- | rtemsbsd/include/machine/atomic.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/rtemsbsd/include/machine/atomic.h b/rtemsbsd/include/machine/atomic.h index fa2b0053..b95a4b5a 100644 --- a/rtemsbsd/include/machine/atomic.h +++ b/rtemsbsd/include/machine/atomic.h @@ -1399,4 +1399,56 @@ atomic_store_rel_long(volatile long *p, long v) #endif } +static inline void +atomic_thread_fence_acq(void) +{ + +#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC) + std::atomic_thread_fence(std::memory_order_acquire); +#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC) + atomic_thread_fence(memory_order_acquire); +#else + RTEMS_COMPILER_MEMORY_BARRIER(); +#endif +} + +static inline void +atomic_thread_fence_rel(void) +{ + +#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC) + std::atomic_thread_fence(std::memory_order_release); +#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC) + atomic_thread_fence(memory_order_release); +#else + RTEMS_COMPILER_MEMORY_BARRIER(); +#endif +} + +static inline void +atomic_thread_fence_acq_rel(void) +{ + +#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC) + std::atomic_thread_fence(std::memory_order_acq_rel); +#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC) + atomic_thread_fence(memory_order_acq_rel); +#else + RTEMS_COMPILER_MEMORY_BARRIER(); +#endif +} + +static inline void +atomic_thread_fence_seq_cst(void) +{ + +#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC) + std::atomic_thread_fence(std::memory_order_seq_cst); +#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC) + atomic_thread_fence(memory_order_seq_cst); +#else + RTEMS_COMPILER_MEMORY_BARRIER(); +#endif +} + #endif /* _RTEMS_BSD_MACHINE_ATOMIC_H_ */ |