From owner-freebsd-current@FreeBSD.ORG Tue Jul 13 20:38:51 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9CD8E16A4CE; Tue, 13 Jul 2004 20:38:51 +0000 (GMT) Received: from fledge.watson.org (fledge.watson.org [204.156.12.50]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2B4C143D3F; Tue, 13 Jul 2004 20:38:51 +0000 (GMT) (envelope-from robert@fledge.watson.org) Received: from fledge.watson.org (localhost [127.0.0.1]) by fledge.watson.org (8.12.11/8.12.11) with ESMTP id i6DKcYY1028127; Tue, 13 Jul 2004 16:38:34 -0400 (EDT) (envelope-from robert@fledge.watson.org) Received: from localhost (robert@localhost)i6DKcYL2028124; Tue, 13 Jul 2004 16:38:34 -0400 (EDT) (envelope-from robert@fledge.watson.org) Date: Tue, 13 Jul 2004 16:38:34 -0400 (EDT) From: Robert Watson X-Sender: robert@fledge.watson.org To: John Baldwin In-Reply-To: <200407091537.33824.jhb@FreeBSD.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: freebsd-current@FreeBSD.org cc: current@FreeBSD.org Subject: Re: panic: Assertion td->td_turnstile != NULL failed at ../../../kern/subr_turnstile.c:478 X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Jul 2004 20:38:51 -0000 On Fri, 9 Jul 2004, John Baldwin wrote: > On Friday 09 July 2004 01:54 pm, Robert Watson wrote: > > On Fri, 9 Jul 2004, John Baldwin wrote: > > > > login: root > > > > Password:panic: Assertion td->td_turnstile != NULL failed at > > > > ../../../kern/subr_turnstile.c:478 > > > > > > This means your thread has no turnstile to give to the lock it is > > > blocking on. Are you using TURNSTILE_PROFILING on this box? > > > > Not currently. Would you like me to? > > No, I was curious if there was a bug in the _PROFILING case. :) > Actually, hmm. Looks like we don't setrunqueue() until after giving the > thread a turnstile. Can you see if this assertion is triggered: FYI, I'm now using this tweak on my test kernels on the same box, and have yet to trigger it (with or without PREEMPTION). I'll keep hammering away, but largely without PREEMPTION because reproducing the hang is turning out not to be a problem :-). Robert N M Watson FreeBSD Core Team, TrustedBSD Projects robert@fledge.watson.org Principal Research Scientist, McAfee Research > > Index: subr_turnstile.c > =================================================================== > RCS file: /usr/cvs/src/sys/kern/subr_turnstile.c,v > retrieving revision 1.145 > diff -u -r1.145 subr_turnstile.c > --- subr_turnstile.c 2 Jul 2004 19:09:49 -0000 1.145 > +++ subr_turnstile.c 9 Jul 2004 19:35:27 -0000 > @@ -736,6 +736,7 @@ > td->td_lockname = NULL; > TD_CLR_LOCK(td); > MPASS(TD_CAN_RUN(td)); > + MPASS(td->td_turnstile != NULL); > setrunqueue(td); > } else { > td->td_flags |= TDF_TSNOBLOCK; > > Also, you can try wrapping the entire while() loop there in turnstile_unpend() > in a critical secton to force it to wake up all the threads before > preempting. Also, are you using MUTEX_WAKE_ALL by chance? > > -- > John Baldwin <>< http://www.FreeBSD.org/~jhb/ > "Power Users Use the Power to Serve" = http://www.FreeBSD.org >