Re: panic: sleeping thread owns a mutex

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Mon, 28 Apr 2003 17:16:23 -0400 (EDT)
On 28-Apr-2003 M. Warner Losh wrote:
> In message: <XFMail.20030428164942.jhb_at_FreeBSD.org>
>             John Baldwin <jhb_at_FreeBSD.org> writes:
>: 
>: On 26-Apr-2003 AIDA Shinra wrote:
>: > My kernel always panics when I remove my wi pccard (WLI-PCM-S11).
>: > I am using OLDCARD and enabling hw.pcic.intr_path=1. With NEWCARD no
>: > cards work. I reported this bug 2 weeks ago but even today's kernel
>: > panics in exactly the same way. Anyone experiencing the same problem?
>: > Or just my misconfiguration?
>: 
>: Can you try this patch:
>: 
>: Index: if_wi.c
>: ===================================================================
>: RCS file: /usr/cvs/src/sys/dev/wi/if_wi.c,v
>: retrieving revision 1.137
>: diff -u -r1.137 if_wi.c
>: --- if_wi.c     10 Apr 2003 07:55:55 -0000      1.137
>: +++ if_wi.c     28 Apr 2003 20:39:37 -0000
>: _at__at_ -486,10 +486,10 _at__at_
>:         ifmedia_removeall(&sc->sc_media);
>:  
>:         ieee80211_ifdetach(ifp);
>: +       WI_UNLOCK(sc);
>:         bus_teardown_intr(dev, sc->irq, sc->wi_intrhand);
>:         wi_free(dev);
>:  
>: -       WI_UNLOCK(sc);
>:  #if __FreeBSD_version >= 500000
>:         mtx_destroy(&sc->sc_mtx);
>:  #endif
>: 
>: It is not ok to hold a lock when calling bus_teardown_intr() or
>: bus_setup_intr().
> 
> This brings up another problem.
> 
> If wi is on a shared interrupt, what happens if an interrupt comes in
> while the device is being torn down?  Eg, as soon as you drop that
> lock, the wi_intr gets the lock and bad things happen at the
> mtx_destroy potentially.  How do we keep from racing?

Set a flag in your driver before you drop the wi lock that the
wiintr() function can check and bail out immediately if it is set.
For example:

foo_detach()
{
        ...
        sc->sc_dead = 1;
        FOO_UNLOCK(sc);
        bus_teardown_intr(...)
        ...
}


foo_intr()
{
        FOO_LOCK(sc);
        if (sc->sc_dead) {
                FOO_UNLOCK(sc);
                return;
        }
        ...
}

-- 

John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/
Received on Mon Apr 28 2003 - 12:16:21 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:05 UTC