[rtems-libbsd commit] Add thread fences to <machine/atomic.h>

Sebastian Huber sebh at rtems.org
Wed Nov 9 09:05:07 UTC 2016


Module:    rtems-libbsd
Branch:    master
Commit:    71a0436d149858e78377e9dada180dfb28620adc
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=71a0436d149858e78377e9dada180dfb28620adc

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon Oct 24 13:29:03 2016 +0200

Add thread fences to <machine/atomic.h>

---

 rtemsbsd/include/machine/atomic.h | 52 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/rtemsbsd/include/machine/atomic.h b/rtemsbsd/include/machine/atomic.h
index fa2b005..b95a4b5 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_ */



More information about the vc mailing list