Module Name:    src
Committed By:   riastradh
Date:           Sun Jul 17 18:45:48 UTC 2022

Modified Files:
        src/sys/external/bsd/common/include/asm: barrier.h

Log Message:
drm: Comment *mb() vs smp_*mb() and omit default for *mb().

In general membar_*() is _not_ enough for *mb(), because membar_*()
is only for CPU/CPU synchronization on normal memory, and *mb()
requires machine-dependent I/O logic.  Leave it as an `#error' case
if the architecture isn't listed here.  But membar_*() is OK for
smp_*().

Fill in powerpc and sparc while here, as examples of what the
now-removed defaults failed to do.  If you want to use drm on a mips
or alpha system yer gonna hafta fill this in yourself.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 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.13 src/sys/external/bsd/common/include/asm/barrier.h:1.14
--- src/sys/external/bsd/common/include/asm/barrier.h:1.13	Sat Apr  9 23:43:30 2022
+++ src/sys/external/bsd/common/include/asm/barrier.h	Sun Jul 17 18:45:48 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: barrier.h,v 1.13 2022/04/09 23:43:30 riastradh Exp $	*/
+/*	$NetBSD: barrier.h,v 1.14 2022/07/17 18:45:48 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -42,6 +42,14 @@
 #define	MULTIPROCESSOR	1	/* safer to assume multiprocessor */
 #endif
 
+/*
+ * I/O memory barriers.  drm uses these to order memory operations on
+ * normal or write-combining/prefetchable, or uncacheable I/O
+ * operations, for coordination between the CPU and I/O devices.
+ *
+ * In NetBSD, this is normally done with bus_space_barrier, but Linux
+ * doesn't pass around the bus space tag and handle needed for that.
+ */
 #if defined(__aarch64__)
 #define	mb()	__asm __volatile ("dsb sy" ::: "memory")
 #define	wmb()	__asm __volatile ("dsb st" ::: "memory")
@@ -51,12 +59,27 @@
 #define	mb()	x86_mfence()
 #define	wmb()	x86_sfence()
 #define	rmb()	x86_lfence()
+#elif defined(__powerpc__)
+#define	mb()	__asm __volatile ("eieio" ::: "memory")
+#define	wmb()	mb()
+#define	rmb()	mb()
+#elif defined(__sparc__) || defined(__sparc64__)
+#ifdef __sparc64__
+#define	mb()	__asm __volatile ("membar #MemIssue" ::: "memory")
 #else
-#define	mb	membar_sync
-#define	wmb	membar_producer
-#define	rmb	membar_consumer
+#define	mb()	membar_sync()	/* ldstub */
+#endif
+#define	wmb()	mb()		/* XXX could maybe be __insn_barrier in TSO */
+#define	rmb()	mb()		/* XXX could maybe be __insn_barrier in TSO */
+#else
+#error Define machine-dependent memory-mapped I/O barriers for drm.
 #endif
 
+/*
+ * MP memory barriers.  drm uses these to order memory operations on
+ * normal memory for coordination between CPUs.  Aliases for NetBSD's
+ * membar_*.
+ */
 #ifdef MULTIPROCESSOR
 #  define	smp_mb				membar_sync
 #  define	smp_wmb				membar_producer

Reply via email to