> 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. JeffreyReceived on Mon Apr 28 2003 - 13:56:05 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:05 UTC