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)

Reply via email to