From aec9f8e993baa6914ba55cee23f7125e6c75ce3a Mon Sep 17 00:00:00 2001 From: Benno Rice Date: Tue, 17 Jun 2008 05:48:42 +0000 Subject: [PATCH] - Move ether_ifdetach earlier. - Drain callouts after ether_ifdetach. Suggested by: jhb --- sys/dev/smc/if_smc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sys/dev/smc/if_smc.c b/sys/dev/smc/if_smc.c index 9293b3e72bd..0040f9ccea1 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); }