From 9eda9d7ac5846102baa1e41ef6d16e402eadb24e Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Wed, 17 Aug 2005 17:44:32 +0000 Subject: [PATCH] Add callout_drain()'s to foo_detach() after calling foo_stop() to make sure that if softclock is running on another CPU and is blocked on our driver lock, we will wait until it has acquired the lock, seen that it was cancelled, dropped the lock, and awakened us so that we can safely destroy the mutex. MFC after: 3 days --- sys/dev/fxp/if_fxp.c | 1 + sys/dev/hme/if_hme.c | 1 + 2 files changed, 2 insertions(+) diff --git a/sys/dev/fxp/if_fxp.c b/sys/dev/fxp/if_fxp.c index f87325b0482f..a51509e6d115 100644 --- a/sys/dev/fxp/if_fxp.c +++ b/sys/dev/fxp/if_fxp.c @@ -901,6 +901,7 @@ fxp_detach(device_t dev) CSR_WRITE_1(sc, FXP_CSR_SCB_INTRCNTL, FXP_SCB_INTR_DISABLE); fxp_stop(sc); FXP_UNLOCK(sc); + callout_drain(&sc->stat_ch); /* * Close down routes etc. diff --git a/sys/dev/hme/if_hme.c b/sys/dev/hme/if_hme.c index 703369172e12..8ed71b164008 100644 --- a/sys/dev/hme/if_hme.c +++ b/sys/dev/hme/if_hme.c @@ -388,6 +388,7 @@ hme_detach(struct hme_softc *sc) HME_LOCK(sc); hme_stop(sc); HME_UNLOCK(sc); + callout_drain(&sc->sc_tick_ch); device_delete_child(sc->sc_dev, sc->sc_miibus); for (i = 0; i < HME_NTXQ; i++) {