PERFORCE change 175386 for review

Hans Petter Selasky hselasky at FreeBSD.org
Fri Mar 5 21:48:41 UTC 2010


http://p4web.freebsd.org/chv.cgi?CH=175386

Change 175386 by hselasky at 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);
 


More information about the p4-projects mailing list