get mxge to build, stage 28/many
authorAggelos Economopoulos <aoiko@cc.ece.ntua.gr>
Thu, 9 Jul 2009 14:00:06 +0000 (17:00 +0300)
committerAggelos Economopoulos <aoiko@cc.ece.ntua.gr>
Thu, 9 Jul 2009 14:00:06 +0000 (17:00 +0300)
- use callout_stop() instead of callout_drain() for now
- mark our callout mpsafe

sys/dev/netif/mxge/if_mxge.c

index 9cf5204..740c5fc 100644 (file)
@@ -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);