Module Name: src
Committed By: jmcneill
Date: Fri Oct 16 22:39:21 UTC 2020
Modified Files:
src/sys/external/bsd/common/include/asm: barrier.h
Log Message:
Fix mb/wmb/rmb on aarch64 to use dsb instead of dmb.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/common/include/asm/barrier.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/common/include/asm/barrier.h
diff -u src/sys/external/bsd/common/include/asm/barrier.h:1.4 src/sys/external/bsd/common/include/asm/barrier.h:1.5
--- src/sys/external/bsd/common/include/asm/barrier.h:1.4 Tue Aug 28 15:04:58 2018
+++ src/sys/external/bsd/common/include/asm/barrier.h Fri Oct 16 22:39:21 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: barrier.h,v 1.4 2018/08/28 15:04:58 riastradh Exp $ */
+/* $NetBSD: barrier.h,v 1.5 2020/10/16 22:39:21 jmcneill Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -40,9 +40,15 @@
#define MULTIPROCESSOR 1 /* safer to assume multiprocessor */
#endif
+#if defined(__aarch64__)
+#define mb() __asm __volatile ("dsb sy" ::: "memory")
+#define wmb() __asm __volatile ("dsb st" ::: "memory")
+#define rmb() __asm __volatile ("dsb ld" ::: "memory")
+#else
#define mb membar_sync
#define wmb membar_producer
#define rmb membar_consumer
+#endif
#ifdef __alpha__ /* XXX As if... */
# define read_barrier_depends membar_sync
@@ -51,9 +57,9 @@
#endif
#ifdef MULTIPROCESSOR
-# define smp_mb mb
-# define smp_wmb wmb
-# define smp_rmb rmb
+# define smp_mb membar_sync
+# define smp_wmb membar_producer
+# define smp_rmb membar_consumer
# define smp_read_barrier_depends read_barrier_depends
#else
# define smp_mb() do {} while (0)