svn commit: r188248 - user/thompsa/usb/sys/dev/usb2/wlan

Andrew Thompson thompsa at FreeBSD.org
Fri Feb 6 13:22:36 PST 2009


Author: thompsa
Date: Fri Feb  6 21:22:35 2009
New Revision: 188248
URL: http://svn.freebsd.org/changeset/base/188248

Log:
  Avoid freeing the tx data if its already been reaped.

Modified:
  user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c

Modified: user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c	Fri Feb  6 20:57:10 2009	(r188247)
+++ user/thompsa/usb/sys/dev/usb2/wlan/if_zyd2.c	Fri Feb  6 21:22:35 2009	(r188248)
@@ -124,7 +124,7 @@ static void	zyd_update_mcast(struct ifne
 static int	zyd_set_rxfilter(struct zyd_softc *);
 static void	zyd_set_chan(struct zyd_softc *, struct ieee80211_channel *);
 static int	zyd_set_beacon_interval(struct zyd_softc *, int);
-static void	zyd_rx_data(struct usb2_xfer *, int, int, uint16_t);
+static void	zyd_rx_data(struct usb2_xfer *, int, uint16_t);
 static int	zyd_tx_mgt(struct zyd_softc *, struct mbuf *,
 		    struct ieee80211_node *);
 static int	zyd_tx_data(struct zyd_softc *, struct mbuf *,
@@ -2219,7 +2219,7 @@ fail:
 }
 
 static void
-zyd_rx_data(struct usb2_xfer *xfer, int idx, int offset, uint16_t len)
+zyd_rx_data(struct usb2_xfer *xfer, int offset, uint16_t len)
 {
 	struct zyd_softc *sc = xfer->priv_sc;
 	struct ifnet *ifp = sc->sc_ifp;
@@ -2290,8 +2290,8 @@ zyd_rx_data(struct usb2_xfer *xfer, int 
 	}
 	rssi = (stat.rssi > 63) ? 127 : 2 * stat.rssi;
 
-	sc->sc_rx_data[idx].rssi = rssi;
-	sc->sc_rx_data[idx].m = m;
+	sc->sc_rx_data[sc->sc_rx_count].rssi = rssi;
+	sc->sc_rx_data[sc->sc_rx_count].m = m;
 	sc->sc_rx_count++;
 }
 
@@ -2326,7 +2326,7 @@ zyd_bulk_read_callback(struct usb2_xfer 
 				if (len16 == 0 || len16 > xfer->actlen)
 					break;
 
-				zyd_rx_data(xfer, i, offset, len16);
+				zyd_rx_data(xfer, offset, len16);
 
 				/* next frame is aligned on a 32-bit boundary */
 				len16 = (len16 + 3) & ~3;
@@ -2339,7 +2339,7 @@ zyd_bulk_read_callback(struct usb2_xfer 
 			DPRINTF(sc, ZYD_DEBUG_RECV,
 			    "%s: received single-frame transfer\n", __func__);
 
-			zyd_rx_data(xfer, 0, 0, xfer->actlen);
+			zyd_rx_data(xfer, 0, xfer->actlen);
 		}
 		/* FALLTHROUGH */
 	case USB_ST_SETUP:
@@ -2623,10 +2623,9 @@ zyd_bulk_write_callback(struct usb2_xfer
 
 		ifp->if_oerrors++;
 		data = xfer->priv_fifo;
-		if (data != NULL) {
+		xfer->priv_fifo = NULL;
+		if (data != NULL && ifp->if_drv_flags & IFF_DRV_RUNNING)
 			zyd_tx_free(data, xfer->error);
-			xfer->priv_fifo = NULL;
-		}
 		break;
 	}
 }


More information about the svn-src-user mailing list