summaryrefslogtreecommitdiffstats
path: root/sys/dev/smc
diff options
context:
space:
mode:
authorbenno <benno@FreeBSD.org>2008-06-17 05:48:42 +0000
committerbenno <benno@FreeBSD.org>2008-06-17 05:48:42 +0000
commit0b0ecff057d6974579e798f31444aae33a98c1b8 (patch)
treef888879b691756341227b59ad668f6721a89d1d4 /sys/dev/smc
parentffdd95144d91bbe70b7085db0ac76bac74571854 (diff)
downloadFreeBSD-src-0b0ecff057d6974579e798f31444aae33a98c1b8.zip
FreeBSD-src-0b0ecff057d6974579e798f31444aae33a98c1b8.tar.gz
- Move ether_ifdetach earlier.
- Drain callouts after ether_ifdetach. Suggested by: jhb
Diffstat (limited to 'sys/dev/smc')
-rw-r--r--sys/dev/smc/if_smc.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/dev/smc/if_smc.c b/sys/dev/smc/if_smc.c
index 9293b3e..0040f9c 100644
--- a/sys/dev/smc/if_smc.c
+++ b/sys/dev/smc/if_smc.c
@@ -394,6 +394,13 @@ smc_detach(device_t dev)
smc_stop(sc);
SMC_UNLOCK(sc);
+ if (sc->smc_ifp != NULL) {
+ ether_ifdetach(sc->smc_ifp);
+ }
+
+ callout_drain(&sc->smc_watchdog);
+ callout_drain(&sc->smc_mii_tick_ch);
+
#ifdef DEVICE_POLLING
if (sc->smc_ifp->if_capenable & IFCAP_POLLING)
ether_poll_deregister(sc->smc_ifp);
@@ -409,10 +416,8 @@ smc_detach(device_t dev)
taskqueue_free(sc->smc_tq);
sc->smc_tq = NULL;
}
-
if (sc->smc_ifp != NULL) {
- ether_ifdetach(sc->smc_ifp);
if_free(sc->smc_ifp);
}
OpenPOWER on IntegriCloud