Date: Fri, 5 Mar 2010 21:48:40 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 175386 for review Message-ID: <201003052148.o25Lme0K052186@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/chv.cgi?CH=175386 Change 175386 by hselasky@hselasky_laptop001 on 2010/03/05 21:47:41 USB WLAN: - patch for if_run.c from Akinori to resolve some panics. - moved draintask functions to vap_delete like in other drivers. Some are still in run_stop() with NULL ptr check. Affected files ... .. //depot/projects/usb/src/sys/dev/usb/wlan/if_run.c#8 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/wlan/if_run.c#8 (text+ko) ==== @@ -785,11 +785,15 @@ sc = ifp->if_softc; - if (ifp && ifp->if_flags & IFF_UP){ - RUN_LOCK(sc); - run_stop(sc); - RUN_UNLOCK(sc); - } + RUN_LOCK(sc); + sc->sc_rvp->amrr_run = RUN_AMRR_OFF; + RUN_UNLOCK(sc); + + /* drain them all */ + usb_callout_drain(&sc->sc_rvp->amrr_ch); + ieee80211_draintask(ic, &sc->sc_rvp->amrr_task); + ieee80211_draintask(ic, &sc->wme_task); + ieee80211_draintask(ic, &sc->usb_timeout_task); ieee80211_amrr_cleanup(&rvp->amrr); ieee80211_vap_detach(vap); @@ -4234,7 +4238,6 @@ { struct ifnet *ifp = sc->sc_ifp; struct ieee80211com *ic = ifp->if_l2com; - struct ieee80211vap *vap = &sc->sc_rvp->vap; uint32_t tmp; uint8_t bbp1, bbp3; int i; @@ -4391,7 +4394,6 @@ run_rt3070_rf_setup(sc); /* select default channel */ - vap->iv_bss->ni_chan = ic->ic_curchan; /* ic_bsschan?? */ run_set_chan(sc, ic->ic_curchan); /* setup initial protection mode */ @@ -4444,25 +4446,21 @@ RUN_LOCK_ASSERT(sc, MA_OWNED); - if (ic->ic_flags & IEEE80211_F_SCAN) - ieee80211_cancel_scan(&sc->sc_rvp->vap); + if(sc->sc_rvp != NULL){ + sc->sc_rvp->amrr_run = RUN_AMRR_OFF; + if (ic->ic_flags & IEEE80211_F_SCAN) + ieee80211_cancel_scan(&sc->sc_rvp->vap); + } if (ifp->if_drv_flags & IFF_DRV_RUNNING) run_set_leds(sc, 0); /* turn all LEDs off */ ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); - sc->sc_rvp->amrr_run = RUN_AMRR_OFF; - RUN_UNLOCK(sc); - /* drain them all */ - usb_callout_drain(&sc->sc_rvp->amrr_ch); - ieee80211_draintask(ic, &sc->sc_rvp->amrr_task); - ieee80211_draintask(ic, &sc->wme_task); for(i = 0; i < RUN_N_XFER; i++) usbd_transfer_drain(sc->sc_xfer[i]); - ieee80211_draintask(ic, &sc->usb_timeout_task); RUN_LOCK(sc);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003052148.o25Lme0K052186>