From e3dc37fa9d68507d841e4004508307acacfebd55 Mon Sep 17 00:00:00 2001 From: Aggelos Economopoulos Date: Thu, 9 Jul 2009 17:00:06 +0300 Subject: [PATCH] get mxge to build, stage 28/many - use callout_stop() instead of callout_drain() for now - mark our callout mpsafe --- sys/dev/netif/mxge/if_mxge.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sys/dev/netif/mxge/if_mxge.c b/sys/dev/netif/mxge/if_mxge.c index 9cf5204250..740c5fcc1c 100644 --- a/sys/dev/netif/mxge/if_mxge.c +++ b/sys/dev/netif/mxge/if_mxge.c @@ -4486,7 +4486,7 @@ mxge_attach(device_t dev) sc->ifp = ifp; if_initname(ifp, device_get_name(dev), device_get_unit(dev)); - callout_init(&sc->co_hdl); + callout_init_mp(&sc->co_hdl); mxge_setup_cfg_space(sc); @@ -4637,9 +4637,14 @@ mxge_detach(device_t dev) sc->dying = 1; if (sc->ifp->if_flags & IFF_RUNNING) mxge_close(sc); + /* + * XXX: race: the callout callback could be spinning on + * the serializer and run anyway + */ + callout_stop(&sc->co_hdl); lwkt_serialize_exit(sc->ifp->if_serializer); + ether_ifdetach(sc->ifp); - callout_drain(&sc->co_hdl); ifmedia_removeall(&sc->media); mxge_dummy_rdma(sc, 0); mxge_rem_sysctls(sc); -- 2.41.0