summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-10-24 13:29:03 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-09 10:04:32 +0100
commit71a0436d149858e78377e9dada180dfb28620adc (patch)
treedee974f37c7df095a74acb84b38f55d43dc08815
parentFix warnings for linker sets (diff)
downloadrtems-libbsd-71a0436d149858e78377e9dada180dfb28620adc.tar.bz2
Add thread fences to <machine/atomic.h>
-rw-r--r--rtemsbsd/include/machine/atomic.h52
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_ */