Index: if_re.c =================================================================== RCS file: /usr/cvs/src/sys/dev/re/if_re.c,v retrieving revision 1.87 diff -u -r1.87 if_re.c --- if_re.c 4 Mar 2007 03:38:07 -0000 1.87 +++ if_re.c 27 Mar 2007 16:16:44 -0000 @@ -1957,6 +1957,7 @@ sc = arg; ifp = sc->rl_ifp; + NET_LOCK_GIANT(); RL_LOCK(sc); status = CSR_READ_2(sc, RL_ISR); @@ -1964,12 +1965,14 @@ if (sc->suspended || !(ifp->if_flags & IFF_UP)) { RL_UNLOCK(sc); + NET_UNLOCK_GIANT(); return; } #ifdef DEVICE_POLLING if (ifp->if_capenable & IFCAP_POLLING) { RL_UNLOCK(sc); + NET_UNLOCK_GIANT(); return; } #endif @@ -1999,6 +2002,7 @@ taskqueue_enqueue_fast(taskqueue_fast, &sc->rl_txtask); RL_UNLOCK(sc); + NET_UNLOCK_GIANT(); if ((CSR_READ_2(sc, RL_ISR) & RL_INTRS_CPLUS) || rval) { taskqueue_enqueue_fast(taskqueue_fast, &sc->rl_inttask); @@ -2170,7 +2174,9 @@ struct ifnet *ifp; ifp = arg; + NET_LOCK_GIANT(); re_start(ifp); + NET_UNLOCK_GIANT(); return; }