Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Jan 2015 17:21:20 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r276626 - head/sys/kern
Message-ID:  <201501031721.t03HLKHp060964@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Sat Jan  3 17:21:19 2015
New Revision: 276626
URL: https://svnweb.freebsd.org/changeset/base/276626

Log:
  Rework r276532 a bit. Always avoid recursing into the console drivers
  clients, hence they might not handle it very well. This change allows
  debugging mutex problems with kernel console drivers when
  "debug.witness.skipspin=0" is set in the boot environment.
  
  MFC after:	1 week

Modified:
  head/sys/kern/kern_cons.c

Modified: head/sys/kern/kern_cons.c
==============================================================================
--- head/sys/kern/kern_cons.c	Sat Jan  3 16:48:08 2015	(r276625)
+++ head/sys/kern/kern_cons.c	Sat Jan  3 17:21:19 2015	(r276626)
@@ -512,6 +512,13 @@ cnputs(char *p)
 	int unlock_reqd = 0;
 
 	if (use_cnputs_mtx) {
+	  	/*
+		 * NOTE: Debug prints and/or witness printouts in
+		 * console driver clients can cause the "cnputs_mtx"
+		 * mutex to recurse. Simply return if that happens.
+		 */
+		if (mtx_owned(&cnputs_mtx))
+			return;
 		mtx_lock_spin(&cnputs_mtx);
 		unlock_reqd = 1;
 	}
@@ -601,13 +608,7 @@ static void
 cn_drvinit(void *unused)
 {
 
-	/*
-	 * NOTE: Debug prints and/or witness printouts in console
-	 * driver clients can cause the "cnputs_mtx" mutex to
-	 * recurse. Make sure the "MTX_RECURSE" flags is set!
-	 */
-	mtx_init(&cnputs_mtx, "cnputs_mtx", NULL, MTX_SPIN |
-	    MTX_NOWITNESS | MTX_RECURSE);
+	mtx_init(&cnputs_mtx, "cnputs_mtx", NULL, MTX_SPIN | MTX_NOWITNESS);
 	use_cnputs_mtx = 1;
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201501031721.t03HLKHp060964>