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>
This commit is contained in:
Weongyo Jeong 2009-10-14 20:09:09 +00:00
parent e80d42dda2
commit db63fc93cc

View file

@ -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 */