Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Oct 2009 20:09:10 +0000 (UTC)
From:      Weongyo Jeong <weongyo@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r198098 - head/sys/dev/usb/wlan
Message-ID:  <200910142009.n9EK9Ai8047500@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: weongyo
Date: Wed Oct 14 20:09:09 2009
New Revision: 198098
URL: http://svn.freebsd.org/changeset/base/198098

Log:
  fixes a TX hang bug that it could happen when if_start callback didn't
  be restarted by full of the output queue.
  
  MFC after:	3 days
  Tested by:	bsduser <bsd at acd.homelinux.org>

Modified:
  head/sys/dev/usb/wlan/if_rum.c

Modified: head/sys/dev/usb/wlan/if_rum.c
==============================================================================
--- head/sys/dev/usb/wlan/if_rum.c	Wed Oct 14 19:24:01 2009	(r198097)
+++ head/sys/dev/usb/wlan/if_rum.c	Wed Oct 14 20:09:09 2009	(r198098)
@@ -826,6 +826,9 @@ tr_setup:
 
 			usbd_transfer_submit(xfer);
 		}
+		RUM_UNLOCK(sc);
+		rum_start(ifp);
+		RUM_LOCK(sc);
 		break;
 
 	default:			/* Error */
@@ -930,8 +933,8 @@ tr_setup:
 		 * the private mutex of a device! That is why we do the
 		 * "ieee80211_input" here, and not some lines up!
 		 */
+		RUM_UNLOCK(sc);
 		if (m) {
-			RUM_UNLOCK(sc);
 			ni = ieee80211_find_rxnode(ic,
 			    mtod(m, struct ieee80211_frame_min *));
 			if (ni != NULL) {
@@ -941,8 +944,11 @@ tr_setup:
 			} else
 				(void) ieee80211_input_all(ic, m, rssi,
 				    RT2573_NOISE_FLOOR);
-			RUM_LOCK(sc);
 		}
+		if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0 &&
+		    !IFQ_IS_EMPTY(&ifp->if_snd))
+			rum_start(ifp);
+		RUM_LOCK(sc);
 		return;
 
 	default:			/* Error */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200910142009.n9EK9Ai8047500>