--- kern_mutex.c.orig	2008-05-21 08:32:31.000000000 +0930
+++ kern_mutex.c	2008-06-12 21:01:04.182472766 +0930
@@ -223,6 +223,12 @@
 	KASSERT(LOCK_CLASS(&m->lock_object) == &lock_class_mtx_spin,
 	    ("mtx_lock_spin() of sleep mutex %s @ %s:%d",
 	    m->lock_object.lo_name, file, line));
+	KASSERT((m->lock_object.lo_flags & LO_RECURSABLE) != 0,
+  	    ("mtx_lock_spin: recursed on non-recursive mutex %s @ %s:%d\n",
+  		    m->lock_object.lo_name, file, line));
+	if (!strcmp(m->lock_object.lo_name, "sleepq chain"))
+ 		CTR4(KTR_SPARE2, "%s: mutex %p held @ %s:%d\n", __func__, m,
+ 		    file, line);
 	WITNESS_CHECKORDER(&m->lock_object, opts | LOP_NEWORDER | LOP_EXCLUSIVE,
 	    file, line);
 	_get_spin_lock(m, curthread, opts, file, line);
@@ -241,6 +247,9 @@
 	KASSERT(LOCK_CLASS(&m->lock_object) == &lock_class_mtx_spin,
 	    ("mtx_unlock_spin() of sleep mutex %s @ %s:%d",
 	    m->lock_object.lo_name, file, line));
+	if (!strcmp(m->lock_object.lo_name, "sleepq chain"))
+		CTR4(KTR_SPARE2, "%s: mutex %p held @ %s:%d\n", __func__, m,
+		    file, line);
 	WITNESS_UNLOCK(&m->lock_object, opts | LOP_EXCLUSIVE, file, line);
 	LOCK_LOG_LOCK("UNLOCK", &m->lock_object, opts, m->mtx_recurse, file,
 	    line);
@@ -512,6 +521,12 @@
 		KASSERT(LOCK_CLASS(&m->lock_object) == &lock_class_mtx_spin,
 		    ("thread_lock() of sleep mutex %s @ %s:%d",
 		    m->lock_object.lo_name, file, line));
+		KASSERT((m->lock_object.lo_flags & LO_RECURSABLE) != 0,
+		("thread_lock: recursed on non-recursive mutex %s @ %s:%d\n",
+			    m->lock_object.lo_name, file, line));
+		if (!strcmp(m->lock_object.lo_name, "sleepq chain"))
+			CTR4(KTR_SPARE2, "%s: mutex %p held @ %s:%d\n",
+			    __func__, m, file, line);
 		WITNESS_CHECKORDER(&m->lock_object,
 		    opts | LOP_NEWORDER | LOP_EXCLUSIVE, file, line);
 		while (!_obtain_lock(m, tid)) {

