Module Name:    src
Committed By:   skrll
Date:           Mon Feb  8 09:54:27 UTC 2010

Modified Files:
        src/sys/kern: kern_mutex.c kern_rwlock.c
        src/sys/sys: mutex.h rwlock.h

Log Message:
Re-apply:

        Invert the sense of the bit to mark if LOCKDEBUG is enabled to
        disabled.

        This will help my fellow developers spot "use before initialised"
        problems that hppa picks up very well.

but fix the !LOCKDEBUG case by defining the "no debug" bits to zero so
they have no effect on lock stubs.


To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/sys/kern/kern_mutex.c
cvs rdiff -u -r1.35 -r1.36 src/sys/kern/kern_rwlock.c
cvs rdiff -u -r1.19 -r1.20 src/sys/sys/mutex.h
cvs rdiff -u -r1.9 -r1.10 src/sys/sys/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/kern/kern_mutex.c
diff -u src/sys/kern/kern_mutex.c:1.48 src/sys/kern/kern_mutex.c:1.49
--- src/sys/kern/kern_mutex.c:1.48	Sat Feb  6 04:50:19 2010
+++ src/sys/kern/kern_mutex.c	Mon Feb  8 09:54:27 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_mutex.c,v 1.48 2010/02/06 04:50:19 cube Exp $	*/
+/*	$NetBSD: kern_mutex.c,v 1.49 2010/02/08 09:54:27 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -40,7 +40,7 @@
 #define	__MUTEX_PRIVATE
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.48 2010/02/06 04:50:19 cube Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.49 2010/02/08 09:54:27 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -156,16 +156,16 @@
 	(((int)(mtx)->mtx_owner & MUTEX_BIT_WAITERS) != 0)
 
 #define	MUTEX_INITIALIZE_ADAPTIVE(mtx, dodebug)				\
+	if (!dodebug)							\
+		(mtx)->mtx_owner |= MUTEX_BIT_NODEBUG;			\
 do {									\
-	if (dodebug)							\
-		(mtx)->mtx_owner |= MUTEX_BIT_DEBUG;			\
 } while (/* CONSTCOND */ 0);
 
 #define	MUTEX_INITIALIZE_SPIN(mtx, dodebug, ipl)			\
 do {									\
 	(mtx)->mtx_owner = MUTEX_BIT_SPIN;				\
-	if (dodebug)							\
-		(mtx)->mtx_owner |= MUTEX_BIT_DEBUG;			\
+	if (!dodebug)							\
+		(mtx)->mtx_owner |= MUTEX_BIT_NODEBUG;			\
 	(mtx)->mtx_ipl = makeiplcookie((ipl));				\
 	__cpu_simple_lock_init(&(mtx)->mtx_lock);			\
 } while (/* CONSTCOND */ 0)
@@ -180,10 +180,10 @@
 #define	MUTEX_ADAPTIVE_P(mtx)		\
     (((mtx)->mtx_owner & MUTEX_BIT_SPIN) == 0)
 
-#define	MUTEX_DEBUG_P(mtx)	(((mtx)->mtx_owner & MUTEX_BIT_DEBUG) != 0)
+#define	MUTEX_DEBUG_P(mtx)	(((mtx)->mtx_owner & MUTEX_BIT_NODEBUG) == 0)
 #if defined(LOCKDEBUG)
-#define	MUTEX_OWNED(owner)		(((owner) & ~MUTEX_BIT_DEBUG) != 0)
-#define	MUTEX_INHERITDEBUG(new, old)	(new) |= (old) & MUTEX_BIT_DEBUG
+#define	MUTEX_OWNED(owner)		(((owner) & ~MUTEX_BIT_NODEBUG) != 0)
+#define	MUTEX_INHERITDEBUG(new, old)	(new) |= (old) & MUTEX_BIT_NODEBUG
 #else /* defined(LOCKDEBUG) */
 #define	MUTEX_OWNED(owner)		((owner) != 0)
 #define	MUTEX_INHERITDEBUG(new, old)	/* nothing */

Index: src/sys/kern/kern_rwlock.c
diff -u src/sys/kern/kern_rwlock.c:1.35 src/sys/kern/kern_rwlock.c:1.36
--- src/sys/kern/kern_rwlock.c:1.35	Sat Feb  6 04:50:19 2010
+++ src/sys/kern/kern_rwlock.c	Mon Feb  8 09:54:27 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_rwlock.c,v 1.35 2010/02/06 04:50:19 cube Exp $	*/
+/*	$NetBSD: kern_rwlock.c,v 1.36 2010/02/08 09:54:27 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_rwlock.c,v 1.35 2010/02/06 04:50:19 cube Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_rwlock.c,v 1.36 2010/02/08 09:54:27 skrll Exp $");
 
 #define	__RWLOCK_PRIVATE
 
@@ -103,10 +103,10 @@
 
 #endif	/* DIAGNOSTIC */
 
-#define	RW_SETDEBUG(rw, on)		((rw)->rw_owner |= (on) ? RW_DEBUG : 0)
-#define	RW_DEBUG_P(rw)			(((rw)->rw_owner & RW_DEBUG) != 0)
+#define	RW_SETDEBUG(rw, on)		((rw)->rw_owner |= (on) ? 0 : RW_NODEBUG)
+#define	RW_DEBUG_P(rw)			(((rw)->rw_owner & RW_NODEBUG) == 0)
 #if defined(LOCKDEBUG)
-#define	RW_INHERITDEBUG(new, old)	(new) |= (old) & RW_DEBUG
+#define	RW_INHERITDEBUG(new, old)	(new) |= (old) & RW_NODEBUG
 #else /* defined(LOCKDEBUG) */
 #define	RW_INHERITDEBUG(new, old)	/* nothing */
 #endif /* defined(LOCKDEBUG) */
@@ -218,7 +218,7 @@
 rw_destroy(krwlock_t *rw)
 {
 
-	RW_ASSERT(rw, (rw->rw_owner & ~RW_DEBUG) == 0);
+	RW_ASSERT(rw, (rw->rw_owner & ~RW_NODEBUG) == 0);
 	LOCKDEBUG_FREE(RW_DEBUG_P(rw), rw);
 }
 

Index: src/sys/sys/mutex.h
diff -u src/sys/sys/mutex.h:1.19 src/sys/sys/mutex.h:1.20
--- src/sys/sys/mutex.h:1.19	Sat Feb  6 04:50:19 2010
+++ src/sys/sys/mutex.h	Mon Feb  8 09:54:27 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mutex.h,v 1.19 2010/02/06 04:50:19 cube Exp $	*/
+/*	$NetBSD: mutex.h,v 1.20 2010/02/08 09:54:27 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -160,7 +160,12 @@
 
 #define	MUTEX_BIT_SPIN			0x01
 #define	MUTEX_BIT_WAITERS		0x02
-#define	MUTEX_BIT_DEBUG			0x04
+
+#if defined(LOCKDEBUG)
+#define	MUTEX_BIT_NODEBUG		0x04	/* LOCKDEBUG disabled */
+#else
+#define	MUTEX_BIT_NODEBUG		0x00	/* do nothing */
+#endif	/* LOCKDEBUG */
 
 #define	MUTEX_SPIN_IPL(mtx)		((mtx)->mtx_ipl)
 #define	MUTEX_SPIN_OLDSPL(ci)		((ci)->ci_mtx_oldspl)

Index: src/sys/sys/rwlock.h
diff -u src/sys/sys/rwlock.h:1.9 src/sys/sys/rwlock.h:1.10
--- src/sys/sys/rwlock.h:1.9	Sat Feb  6 04:50:19 2010
+++ src/sys/sys/rwlock.h	Mon Feb  8 09:54:27 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rwlock.h,v 1.9 2010/02/06 04:50:19 cube Exp $	*/
+/*	$NetBSD: rwlock.h,v 1.10 2010/02/08 09:54:27 skrll Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -67,15 +67,19 @@
  * WRITE_LOCKED bit is clear, then the owner field is actually a count of
  * the number of readers.  The rw_owner field is laid out like so:
  *
- *	 N                    4       3        2        1      0
- *	+------------------------------------------------------+
- *	| owner or read count | debug | wrlock | wrwant | wait |
- *	+------------------------------------------------------+
+ *	 N                    4        3        2        1        0
+ *	+---------------------------------------------------------+
+ *	| owner or read count | nodbug | wrlock | wrwant |  wait  |
+ *	+---------------------------------------------------------+
  */
 #define	RW_HAS_WAITERS		0x01UL	/* lock has waiters */
 #define	RW_WRITE_WANTED		0x02UL	/* >= 1 waiter is a writer */
 #define	RW_WRITE_LOCKED		0x04UL	/* lock is currently write locked */
-#define	RW_DEBUG		0x08UL	/* LOCKDEBUG enabled */
+#if defined(LOCKDEBUG)
+#define	RW_NODEBUG		0x08UL	/* LOCKDEBUG disabled */
+#else
+#define	RW_NODEBUG		0x00UL	/* do nothing */
+#endif	/* LOCKDEBUG */
 
 #define	RW_READ_COUNT_SHIFT	4
 #define	RW_READ_INCR		(1UL << RW_READ_COUNT_SHIFT)

Reply via email to