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))