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