@@ -122,6 +122,14 @@ static inline uint64_t ntohll(uint64_t x) { return x; }
#define wmb() mb() /* for s390x */
#define wc_wmb() wmb() /* for s390x */
+#elif defined(__aarch64__)
+
+/* Perhaps dmb would be sufficient? Let us be conservative for now. */
+#define mb() asm volatile("dsb sy" ::: "memory")
+#define rmb() asm volatile("dsb ld" ::: "memory")
+#define wmb() asm volatile("dsb st" ::: "memory")
+#define wc_wmb() wmb()
+
#else
#warning No architecture specific defines found. Using generic implementation.
The default generic barriers are not correct for ARM64. This results in data corruption. The correct macros are based on the ARM Compiler Toolchain Assembler Reference documenation. Signed-off-by: Steve Wise <swise@opengridcomputing.com> --- include/infiniband/arch.h | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)