Re: panic: Assertion td->td_turnstile != NULL failed at ../../../kern/subr_turnstile.c:478

From: Robert Watson <rwatson_at_FreeBSD.org>
Date: Tue, 13 Jul 2004 16:38:34 -0400 (EDT)
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_at_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
> _at__at_ -736,6 +736,7 _at__at_
>                         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 <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
> "Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
> 
Received on Tue Jul 13 2004 - 18:38:51 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:01 UTC