From owner-freebsd-current Sun Jun 30 16:46:25 2002 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 C166137B400 for ; Sun, 30 Jun 2002 16:46:19 -0700 (PDT) Received: from web20903.mail.yahoo.com (web20903.mail.yahoo.com [216.136.226.225]) by mx1.FreeBSD.org (Postfix) with SMTP id 85BFD43E0A for ; Sun, 30 Jun 2002 16:46:19 -0700 (PDT) (envelope-from bsddiy@yahoo.com) Message-ID: <20020630234619.7290.qmail@web20903.mail.yahoo.com> Received: from [218.108.151.136] by web20903.mail.yahoo.com via HTTP; Sun, 30 Jun 2002 16:46:19 PDT Date: Sun, 30 Jun 2002 16:46:19 -0700 (PDT) From: David Xu Subject: Re: KSE / interrupt panic To: Matthew Dillon Cc: julian@elischer.org, sgk@troutmask.apl.washington.edu, wa1ter@hotmail.com, freebsd-current@FreeBSD.ORG MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG setrunqueue() call can be simply removed from cv_timedwait_end(), because there is a race in softclock() and callout_stop(), when cv_timedwait_end() losts a race, it means that that thread is already running(wokenup by another thread), when you setrunqueue() it, of course it will panic. in cv_timedwait_end(), sentence "if (td->td_flags & TDF_TIMEOUT) {...}" is to check this race condition. -David Xu ----- Original Message ----- From: "Matthew Dillon" To: "Julian Elischer" Cc: "Steve Kargl" ; "walt" ; Sent: Monday, July 01, 2002 4:43 AM Subject: KSE / interrupt panic > Got another one. Different panic, same place. > > panic: setrunqueue: bad thread state > cpuid = 0; lapic.id = 01000000 > Debugger("panic") > Stopped at Debugger+0x46: xchgl %ebx,in_Debugger.0 > db> trace > Debugger(c02ec2ba) at Debugger+0x46 > panic(c02ec8a9,c6461d80,c6461d80,c6461d80,c01afa30) at panic+0xd6 > setrunqueue(c6461d80) at setrunqueue+0x1dd > cv_timedwait_end(c6461d80) at cv_timedwait_end+0x36 > softclock(0) at softclock+0x159 > ithread_loop(c229c700,df3eed48,c22aec00,c01b9c6c,0) at ithread_loop+0x12c > fork_exit(c01b9c6c,c229c700,df3eed48) at fork_exit+0xa8 > fork_trampoline() at fork_trampoline+0x37 > db> gdb > ... > > #0 Debugger (msg=0xc02ec2ba "panic") > at /FreeBSD/FreeBSD-current/src/sys/i386/i386/db_interface.c:324 > #1 0xc01c878a in panic (fmt=0xc02ec8a9 "setrunqueue: bad thread state") > at /FreeBSD/FreeBSD-current/src/sys/kern/kern_shutdown.c:482 > #2 0xc01cc6cd in setrunqueue (td=0xc6461d80) > at /FreeBSD/FreeBSD-current/src/sys/kern/kern_switch.c:396 > #3 0xc01afa66 in cv_timedwait_end (arg=0xc6461d80) > at /FreeBSD/FreeBSD-current/src/sys/kern/kern_condvar.c:608 > #4 0xc01d22c9 in softclock (dummy=0x0) > at /FreeBSD/FreeBSD-current/src/sys/kern/kern_timeout.c:187 > #5 0xc01b9d98 in ithread_loop (arg=0xc229c700) > at /FreeBSD/FreeBSD-current/src/sys/kern/kern_intr.c:535 > #6 0xc01b923c in fork_exit (callout=0xc01b9c6c , > arg=0xc229c700, frame=0xdf3eed48) > at /FreeBSD/FreeBSD-current/src/sys/kern/kern_fork.c:863 > > I'm not sure why the panic was 'bad thread state' when gdb seems to > show it being stuck on 'unexpected ke present'. Maybe it was an > optimization and gdb is confused. The panic is definitely > 'bad thread state'. > > (gdb) print td->td_state > $2 = TDS_RUNQ > > setrunqueue() is being called on a thread which is already on the run > queue. > > -Matt > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-current" in the body of the message __________________________________________________ Do You Yahoo!? Yahoo! - Official partner of 2002 FIFA World Cup http://fifaworldcup.yahoo.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message