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



The following reply was made to PR kern/39725; it has been noted by GNATS.

From: Manuel Bouyer <bouyer%antioche.eu.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: kern-bug-people%NetBSD.org@localhost, gnats-admin%NetBSD.org@localhost, 
netbsd-bugs%NetBSD.org@localhost
Subject: Re: kern/39725: wdc timeout softintr panic: (l->l_pflag & LP_INTR) == 0
Date: Sat, 11 Oct 2008 18:27:55 +0200

 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