Module Name:    src
Committed By:   matt
Date:           Fri Mar 28 21:40:53 UTC 2014

Modified Files:
        src/sys/arch/arm/include: mutex.h rwlock.h

Log Message:
Use dmb/dsb


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/include/mutex.h
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/include/rwlock.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/arch/arm/include/mutex.h
diff -u src/sys/arch/arm/include/mutex.h:1.13 src/sys/arch/arm/include/mutex.h:1.14
--- src/sys/arch/arm/include/mutex.h:1.13	Tue Sep 25 05:24:00 2012
+++ src/sys/arch/arm/include/mutex.h	Fri Mar 28 21:40:53 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.13 2012/09/25 05:24:00 matt Exp $	*/
+/*	$NetBSD: mutex.h,v 1.14 2014/03/28 21:40:53 matt Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc.
@@ -88,12 +88,28 @@ struct kmutex {
  * MUTEX_RECEIVE: no memory barrier required; we're synchronizing against
  * interrupts, not multiple processors.
  */
+#ifdef MULTIPROCESSOR
+#if defined(_ARM_ARCH_7) && !defined(_ARM_ARCH_6)
+#define	MUTEX_RECEIVE(mtx)		__asm __volatile("dmb")
+#else
+#define	MUTEX_RECEIVE(mtx)		membar_consumer()
+#endif
+#else
 #define	MUTEX_RECEIVE(mtx)		/* nothing */
+#endif
 
 /*
  * MUTEX_GIVE: no memory barrier required; same reason.
  */
+#ifdef MULTIPROCESSOR
+#if defined(_ARM_ARCH_7) && !defined(_ARM_ARCH_6)
+#define	MUTEX_RECEIVE(mtx)		__asm __volatile("dsb")
+#else
+#define	MUTEX_GIVE(mtx)			membar_producer()
+#endif
+#else
 #define	MUTEX_GIVE(mtx)			/* nothing */
+#endif
 
 #define	MUTEX_CAS(p, o, n)		\
     (atomic_cas_ulong((volatile unsigned long *)(p), (o), (n)) == (o))

Index: src/sys/arch/arm/include/rwlock.h
diff -u src/sys/arch/arm/include/rwlock.h:1.6 src/sys/arch/arm/include/rwlock.h:1.7
--- src/sys/arch/arm/include/rwlock.h:1.6	Wed Jan 29 00:17:21 2014
+++ src/sys/arch/arm/include/rwlock.h	Fri Mar 28 21:40:53 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rwlock.h,v 1.6 2014/01/29 00:17:21 matt Exp $	*/
+/*	$NetBSD: rwlock.h,v 1.7 2014/03/28 21:40:53 matt Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006 The NetBSD Foundation, Inc.
@@ -40,8 +40,18 @@ struct krwlock {
 
 #define	__HAVE_SIMPLE_RW_LOCKS		1
 
+#ifdef MULTIPROCESSOR
+#if defined(_ARM_ARCH_7) && !defined(_ARM_ARCH_6)
+#define	RW_RECEIVE(rw)			__asm __volatile("dmb")
+#define	RW_GIVE(rw)			__asm __volatile("dsb")
+#else
+#define	RW_RECEIVE(rw)			membar_consumer()
+#define	RW_GIVE(rw)			membar_producer()
+#endif
+#else
 #define	RW_RECEIVE(rw)			/* nothing */
 #define	RW_GIVE(rw)			/* nothing */
+#endif
 
 #define	RW_CAS(p, o, n)			\
     (atomic_cas_ulong((volatile unsigned long *)(p), (o), (n)) == (o))

Reply via email to