exclusive sleep mutex mskc0 (network driver) r = 0 (0xc32c3690)
locked @ /usr/src/sys/dev/msk/if_msk.c:3589
John Baldwin
jhb at freebsd.org
Tue May 4 14:08:06 UTC 2010
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 @
> > /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)
@@ -3580,6 +3580,7 @@
(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
More information about the freebsd-current
mailing list