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 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).

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


Home | Main Index | Thread Index | Old Index