svn commit: r198098 - head/sys/dev/usb/wlan
Weongyo Jeong
weongyo at FreeBSD.org
Wed Oct 14 20:09:10 UTC 2009
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 */
More information about the svn-src-head
mailing list