NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/39725: wdc timeout softintr panic: (l->l_pflag & LP_INTR) == 0



On Sat, Oct 11, 2008 at 04:17:44PM +0200, Manuel Bouyer wrote:
> On Sat, Oct 11, 2008 at 08:05:01AM +0000, kardel%netbsg.org@localhost wrote:
> > [...]
> > >Description:
> >     during presumably heavy diskio this timeout triggers the assertion. 
> > Beats me why I seems to attempt to restart the disk - maybe a probelm with 
> > the disk or the ATA emulation mode of the board for
> >         the actual SATA disks.
> >     ...
> >     #23 0xc04ef66d in panic (fmt=0xc0afa558 "kernel %sassertion \"%s\" 
> > failed: file \"%s\", line %d") at 
> > /fs/raid1a/src/NetBSD/tc-merge/src/sys/kern/subr_prf.c:244
> >     #24 0xc0832019 in __kernassert (t=0xc0a3d5c0 "diagnostic ", 
> > f=0xc0a89c34 "/fs/raid1a/src/NetBSD/tc-merge/src/sys/kern/kern_synch.c", 
> > l=189, e=0xc0a89baa "(l->l_pflag & LP_INTR) == 0")
> >         at /fs/raid1a/src/NetBSD/tc-merge/src/sys/lib/libkern/__assert.c:50
> >     #25 0xc04d1cb8 in ltsleep (ident=0xce01cc08, priority=16, 
> > wmesg=0xc0a6db52 "atapoll", timo=1, interlock=0x0) at 
> > /fs/raid1a/src/NetBSD/tc-merge/src/sys/kern/kern_synch.c:189
> >     #26 0xc034bc14 in wdcwait (chp=0xce73481c, mask=64, bits=64, 
> > timeout=10000, flags=0) at 
> > /fs/raid1a/src/NetBSD/tc-merge/src/sys/dev/ic/wdc.c:1272
> >     #27 0xc05d8795 in wdc_ata_bio_start (chp=0xce73481c, xfer=0xc47e7f18) 
> > at /fs/raid1a/src/NetBSD/tc-merge/src/sys/dev/ata/ata_wdc.c:225
> >     #28 0xc05d8e56 in atastart (chp=0xce73481c) at 
> > /fs/raid1a/src/NetBSD/tc-merge/src/sys/dev/ata/ata.c:896
> >     #29 0xc05d7469 in wdc_ata_bio (drvp=0xce73485c, ata_bio=0xd0087090) at 
> > /fs/raid1a/src/NetBSD/tc-merge/src/sys/dev/ata/ata_wdc.c:175
> >     #30 0xc05d51bd in __wdstart (wd=0xd0087004, bp=0xc4a5115c) at 
> > /fs/raid1a/src/NetBSD/tc-merge/src/sys/dev/ata/wd.c:758
> >     #31 0xc05d7305 in wdrestart (v=0xd0087004) at 
> > /fs/raid1a/src/NetBSD/tc-merge/src/sys/dev/ata/wd.c:896
> >     #32 0xc04d9fed in callout_softclock (v=0x0) at 
> > /fs/raid1a/src/NetBSD/tc-merge/src/sys/kern/kern_timeout.c:730
> 
> wdcwait() checks for cpu_intr_p() to know if it can tsleep() or not,
> but this doesn't work for soft interrupts (I though soft interrupt handlers
> could tsleep now). Is there other checks that can be used to know if
> tsleep() is allowed or not (beside checking LP_INTR in curlwp()).
> 
> I'm also concerned by the fact that cpu_intr_p() doesn't catch this case,
> because biodone() can be called from soft interrupt handlers (especially
> callout handlers).

This isn't an issue, as biodone2() is also called from a soft interrupt.
But the first question about cpu_intr_p() and tsleep() remains.

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--


Home | Main Index | Thread Index | Old Index