svn commit: r198300 - in stable/8/sys: . amd64/include/xen
cddl/contrib/opensolaris contrib/dev/acpica contrib/pf
dev/usb/wlan dev/xen/xenpci
Weongyo Jeong
weongyo at FreeBSD.org
Tue Oct 20 17:50:37 UTC 2009
Author: weongyo
Date: Tue Oct 20 17:50:36 2009
New Revision: 198300
URL: http://svn.freebsd.org/changeset/base/198300
Log:
MFC r198098:
fixes a TX hang bug that it could happen when if_start callback didn't
be restarted by full of the output queue.
Tested by: bsduser <bsd at acd.homelinux.org>
MFC r198099:
fixes a TX hang that could be possible to happen when the trasfers are
in the high speed that some drivers don't call if_start callback after
marking ~IFF_DRV_OACTIVE.
Approved by: re (kib)
Modified:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/usb/wlan/if_rum.c
stable/8/sys/dev/usb/wlan/if_uath.c
stable/8/sys/dev/usb/wlan/if_upgt.c
stable/8/sys/dev/usb/wlan/if_ural.c
stable/8/sys/dev/usb/wlan/if_urtw.c
stable/8/sys/dev/usb/wlan/if_zyd.c
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/dev/usb/wlan/if_rum.c
==============================================================================
--- stable/8/sys/dev/usb/wlan/if_rum.c Tue Oct 20 17:50:27 2009 (r198299)
+++ stable/8/sys/dev/usb/wlan/if_rum.c Tue Oct 20 17:50:36 2009 (r198300)
@@ -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 */
Modified: stable/8/sys/dev/usb/wlan/if_uath.c
==============================================================================
--- stable/8/sys/dev/usb/wlan/if_uath.c Tue Oct 20 17:50:27 2009 (r198299)
+++ stable/8/sys/dev/usb/wlan/if_uath.c Tue Oct 20 17:50:36 2009 (r198300)
@@ -2762,6 +2762,9 @@ setup:
m = NULL;
desc = NULL;
}
+ if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0 &&
+ !IFQ_IS_EMPTY(&ifp->if_snd))
+ uath_start(ifp);
UATH_LOCK(sc);
break;
default:
Modified: stable/8/sys/dev/usb/wlan/if_upgt.c
==============================================================================
--- stable/8/sys/dev/usb/wlan/if_upgt.c Tue Oct 20 17:50:27 2009 (r198299)
+++ stable/8/sys/dev/usb/wlan/if_upgt.c Tue Oct 20 17:50:36 2009 (r198300)
@@ -2293,6 +2293,9 @@ setup:
(void) ieee80211_input_all(ic, m, rssi, nf);
m = NULL;
}
+ if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0 &&
+ !IFQ_IS_EMPTY(&ifp->if_snd))
+ upgt_start(ifp);
UPGT_LOCK(sc);
break;
default:
Modified: stable/8/sys/dev/usb/wlan/if_ural.c
==============================================================================
--- stable/8/sys/dev/usb/wlan/if_ural.c Tue Oct 20 17:50:27 2009 (r198299)
+++ stable/8/sys/dev/usb/wlan/if_ural.c Tue Oct 20 17:50:36 2009 (r198300)
@@ -837,6 +837,9 @@ tr_setup:
usbd_transfer_submit(xfer);
}
+ RAL_UNLOCK(sc);
+ ural_start(ifp);
+ RAL_LOCK(sc);
break;
default: /* Error */
@@ -945,8 +948,8 @@ tr_setup:
* the private mutex of a device! That is why we do the
* "ieee80211_input" here, and not some lines up!
*/
+ RAL_UNLOCK(sc);
if (m) {
- RAL_UNLOCK(sc);
ni = ieee80211_find_rxnode(ic,
mtod(m, struct ieee80211_frame_min *));
if (ni != NULL) {
@@ -954,8 +957,11 @@ tr_setup:
ieee80211_free_node(ni);
} else
(void) ieee80211_input_all(ic, m, rssi, nf);
- RAL_LOCK(sc);
}
+ if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0 &&
+ !IFQ_IS_EMPTY(&ifp->if_snd))
+ ural_start(ifp);
+ RAL_LOCK(sc);
return;
default: /* Error */
Modified: stable/8/sys/dev/usb/wlan/if_urtw.c
==============================================================================
--- stable/8/sys/dev/usb/wlan/if_urtw.c Tue Oct 20 17:50:27 2009 (r198299)
+++ stable/8/sys/dev/usb/wlan/if_urtw.c Tue Oct 20 17:50:36 2009 (r198300)
@@ -4071,6 +4071,9 @@ setup:
(void) ieee80211_input_all(ic, m, rssi, nf);
m = NULL;
}
+ if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0 &&
+ !IFQ_IS_EMPTY(&ifp->if_snd))
+ urtw_start(ifp);
URTW_LOCK(sc);
break;
default:
Modified: stable/8/sys/dev/usb/wlan/if_zyd.c
==============================================================================
--- stable/8/sys/dev/usb/wlan/if_zyd.c Tue Oct 20 17:50:27 2009 (r198299)
+++ stable/8/sys/dev/usb/wlan/if_zyd.c Tue Oct 20 17:50:36 2009 (r198300)
@@ -2322,6 +2322,9 @@ tr_setup:
} else
(void)ieee80211_input_all(ic, m, rssi, nf);
}
+ if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0 &&
+ !IFQ_IS_EMPTY(&ifp->if_snd))
+ zyd_start(ifp);
ZYD_LOCK(sc);
break;
@@ -2431,6 +2434,9 @@ tr_setup:
usbd_xfer_set_priv(xfer, data);
usbd_transfer_submit(xfer);
}
+ ZYD_UNLOCK(sc);
+ zyd_start(ifp);
+ ZYD_LOCK(sc);
break;
default: /* Error */
More information about the svn-src-stable
mailing list