Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Apr 2003 16:04:46 -0700
From:      Jeffrey Hsu <hsu@FreeBSD.org>
To:        jhb@FreeBSD.org
Cc:        imp@bsdimp.com
Subject:   Re: panic: sleeping thread owns a mutex
Message-ID:  <200304282255.h3SMtuPi008021@mta4.rcsntx.swbell.net>

next in thread | raw e-mail | index | archive | help
  > 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(...)
  >        ...
	   mtx_destroy(&sc->sc_mtx);		<--- note this
  > }

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

The sc_dead flag doesn't protect against foo_intr() attempting to
lock a mutex that has been destroyed.  fxp has the same problem
and is one of the reasons, among others,  I wasn't too happy with
the fxp softc locks introduced there.

The solution I have in mind involves using the DEAD flag in the interrupt
handler to defer destroying the mutex if the interrupt handler is active.

							Jeffrey



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200304282255.h3SMtuPi008021>