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>