Date: Tue, 29 Jun 2004 22:58:29 -0700 From: Colin Percival <colin.percival@wadham.ox.ac.uk> To: Daniel Lang <dl@leo.org> Cc: freebsd-current@freebsd.org Subject: sio vs sched_lock LOR (was: Re: kern/68442: panic - acquiring duplicate lock of same type: "sleepq chain") Message-ID: <6.1.0.6.1.20040629223609.03bdfce0@popserver.sfu.ca> In-Reply-To: <20040629153921.GE75577@atrbg11.informatik.tu-muenchen.de> References: <20040628202434.GA73213@atrbg11.informatik.tu-muenchen.de> <20040629153921.GE75577@atrbg11.informatik.tu-muenchen.de>
next in thread | previous in thread | raw e-mail | index | archive | help
At 08:39 29/06/2004, Daniel Lang wrote: >login: lock order reversal > 1st 0xc070a0c0 sched lock (sched lock) @ /usr/src/sys/kern/kern_proc.c:672 > 2nd 0xc0745d40 sio (sio) @ /usr/src/sys/dev/sio/sio.c:3205 >Stack backtrace: >backtrace(ffffffff,c0712948,c0712b00,c06e25c4,c07358dc) at 0xc051e066 = backtra2 >witness_checkorder(c0745d40,9,c06b1e34,c85,3f8) at 0xc05393c4 = witness_checkor4 >_mtx_lock_spin_flags(c0745d40,0,c06b1e34,c85,c0712498) at 0xc0516e9e = _mtx_loce >siocnputc(c06f9c40,63) at 0xc064375f = siocnputc+0x6b >cnputc(63) at 0xc05483ed = cnputc+0x4d >putchar(63,e5bd87e0) at 0xc053387a = putchar+0x92 >kvprintf(c069d236,c05337e8,e5bd87e0,a,e5bd8800) at 0xc0533a87 = kvprintf+0x77 >printf(c069d236,32cf1,0,32ce6,0,dd8,c9115828) at 0xc0533763 = printf+0x43 >calcru(c91156e0,e5bd8ad0,e5bd8ad8,0,e5bd8a10) at 0xc051cb9e = calcru+0x1f2 >[...] Regardless of the questionable validity of the other problems this machine is encountering, this LOR is real (and ugly). calcru() asserts that it is holding sched_lock, but it can printf() about negative runtime or runtime going backwards. With a serial console attached, these messages end up at siocnputc(), which needs sio_lock. Now, I presume that there is some reason why the locking order hard-coded into witness makes it illegal to pick up sio_lock while holding sched_lock, but I can't see it. Maybe someone else can explain? In the mean time, a workaround for this LOR is to unplug the serial console. :-) Colin Percival
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6.1.0.6.1.20040629223609.03bdfce0>