summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/an/if_an.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/dev/an/if_an.c b/sys/dev/an/if_an.c
index 1722471..eade4e1 100644
--- a/sys/dev/an/if_an.c
+++ b/sys/dev/an/if_an.c
@@ -826,18 +826,19 @@ an_detach(device_t dev)
struct an_softc *sc = device_get_softc(dev);
struct ifnet *ifp = sc->an_ifp;
+ AN_LOCK(sc);
if (sc->an_gone) {
+ AN_UNLOCK(sc);
device_printf(dev,"already unloaded\n");
return(0);
}
- AN_LOCK(sc);
an_stop(sc);
+ sc->an_gone = 1;
ifmedia_removeall(&sc->an_ifmedia);
ifp->if_flags &= ~IFF_RUNNING;
+ AN_UNLOCK(sc);
ether_ifdetach(ifp);
if_free(ifp);
- sc->an_gone = 1;
- AN_UNLOCK(sc);
bus_teardown_intr(dev, sc->irq_res, sc->irq_handle);
an_release_resources(dev);
mtx_destroy(&sc->an_mtx);
OpenPOWER on IntegriCloud