Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Jun 2001 17:08:16 -0400
From:      "Alexander N. Kabaev" <ak03@gte.com>
To:        freebsd-current@FreeBSD.org
Cc:        jhb@FreeBSD.org
Subject:   Kernel panics with debug.witness_watch=0
Message-ID:  <20010628170816.A717@kanpc.gte.com>

next in thread | raw e-mail | index | archive | help
-CURRENT kernel panics when booting with debug.witness_watch tunable set to 0
in loader. It looks like witness_assert function should not do anything in
this case. Attached patch fixes the problem for me.

The panic I am getting looks like that:

panic: Lock (sx) fork list not locked @ ../../kern/kern_fork.c:590.
Debugger("panic")
Stopped at      Debugger+0x44:  pushl   %ebx
db> trace
Debugger(c034ff7b) at Debugger+0x44
panic(c0353360,c0350540,c034da0e,c034da2a,24e) at panic+0x70
witness_assert(c03e3c00,2,c034da2a,24e,0) at witness_assert+0x9f
_sx_sunlock(c03e3c00,c034da2a,24e,c03c7c30,c0b3dad0) at _sx_sunlock+0x8e
fork1(c0426e00,20014,c0426de0) at fork1+0x1c6a
create_init(0,4eec00,4ee000,0,c012f0b2) at create_init+0x18
mi_startup() at mi_startup+0x90
begin() at begin+0x29
db>

The patch:

Index: subr_witness.c
===================================================================
RCS file: /usr/ncvs/src/sys/kern/subr_witness.c,v
retrieving revision 1.77
diff -u -r1.77 subr_witness.c
--- subr_witness.c	2001/06/27 06:27:29	1.77
+++ subr_witness.c	2001/06/28 20:27:57
@@ -1351,6 +1351,9 @@
 #ifdef INVARIANT_SUPPORT
 	struct lock_instance *instance;
 
+	if (lock->lo_witness == NULL || witness_dead)
+		return;
+
 	if ((lock->lo_class->lc_flags & LC_SLEEPLOCK) != 0)
 		instance = find_instance(curproc->p_sleeplocks, lock);
 	else if ((lock->lo_class->lc_flags & LC_SPINLOCK) != 0)

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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