Re: exclusive sleep mutex mskc0 (network driver) r = 0 (0xc32c3690) locked @ /usr/src/sys/dev/msk/if_msk.c:3589

From: John Baldwin <jhb_at_freebsd.org>
Date: Tue, 4 May 2010 09:39:36 -0400
On Monday 03 May 2010 3:55:38 pm Pyun YongHyeon wrote:
> On Mon, May 03, 2010 at 07:01:56AM -0700, Mark Atkinson wrote:
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> > 
> > I updated to current yesterday and got the following 'witness_warn'
> > panic upon executing 'reboot':
> > 
> > suspending ithread with the following locks held:
> > exclusive sleep mutex mskc0 (network driver) r = 0 (0xc32c3690) locked _at_
> > /usr/src/sys/dev/msk/if_msk.c:3589
> > panic: witness_warn
> > cpuid = 0
> > KDB: enter: panic
> > Physical memory: 495 MB
> > Dumping 80 MB: 65 49 33 17 1
> > 
> > 
> >    3579 static void
> >    3580 msk_intr(void *xsc)
> >    3581 {
> >    3582     struct msk_softc *sc;
> >    3583     struct msk_if_softc *sc_if0, *sc_if1;
> >    3584     struct ifnet *ifp0, *ifp1;
> >    3585     uint32_t status;
> >    3586     int domore;
> >    3587
> >    3588     sc = xsc;
> >    3589     MSK_LOCK(sc);
> 
> It seems msk(4) didn't honor IFF_DRV_RUNNING in status block update
> check so it continued to process received packets.
> Would you try attached patch?

Actually, this panic looks like a leaked lock.  I think this might fix it:

Index: if_msk.c
===================================================================
--- if_msk.c	(revision 207329)
+++ if_msk.c	(working copy)
_at__at_ -3580,6 +3580,7 _at__at_
 	    (sc->msk_pflags & MSK_FLAG_SUSPEND) != 0 ||
 	    (status & sc->msk_intrmask) == 0) {
 		CSR_WRITE_4(sc, B0_Y2_SP_ICR, 2);
+		MSK_UNLOCK(sc);
 		return;
 	}

-- 
John Baldwin
Received on Tue May 04 2010 - 12:08:06 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:03 UTC