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 f87325b0482..a51509e6d11 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 703369172e1..8ed71b16400 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++) {