diff options
author | benno <benno@FreeBSD.org> | 2008-06-17 05:48:42 +0000 |
---|---|---|
committer | benno <benno@FreeBSD.org> | 2008-06-17 05:48:42 +0000 |
commit | 0b0ecff057d6974579e798f31444aae33a98c1b8 (patch) | |
tree | f888879b691756341227b59ad668f6721a89d1d4 /sys/dev/smc | |
parent | ffdd95144d91bbe70b7085db0ac76bac74571854 (diff) | |
download | FreeBSD-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.c | 9 |
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); } |