PERFORCE change 149633 for review
Sam Leffler
sam at FreeBSD.org
Thu Sep 11 23:27:31 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=149633
Change 149633 by sam at sam_ebb on 2008/09/11 23:27:03
o deal with a pending bar tx when a node is cleaned up
o pull tx ampdu setup/cleanup work into functions; more
stuff will be added later
Affected files ...
.. //depot/projects/vap/sys/net80211/ieee80211_ht.c#51 edit
Differences ...
==== //depot/projects/vap/sys/net80211/ieee80211_ht.c#51 (text+ko) ====
@@ -118,6 +118,8 @@
const uint8_t *frm, const uint8_t *efrm);
static void ieee80211_bar_response(struct ieee80211_node *ni,
struct ieee80211_tx_ampdu *tap, int status);
+static void ampdu_tx_stop(struct ieee80211_tx_ampdu *tap);
+static void bar_stop_timer(struct ieee80211_tx_ampdu *tap);
void
ieee80211_ht_attach(struct ieee80211com *ic)
@@ -821,7 +823,6 @@
void
ieee80211_ht_node_cleanup(struct ieee80211_node *ni)
{
- struct ieee80211com *ic = ni->ni_ic;
int i;
KASSERT(ni->ni_flags & IEEE80211_NODE_HT, ("not an HT node"));
@@ -829,18 +830,8 @@
/* XXX optimize this */
for (i = 0; i < WME_NUM_AC; i++) {
struct ieee80211_tx_ampdu *tap = &ni->ni_tx_ampdu[i];
- if (tap->txa_flags & IEEE80211_AGGR_SETUP) {
- /*
- * Stop BA stream if setup so driver has a chance
- * to reclaim any resources it might have allocated.
- */
- ic->ic_addba_stop(ni, tap);
- tap->txa_lastsample = 0;
- tap->txa_avgpps = 0;
- /* NB: clearing NAK means we may re-send ADDBA */
- tap->txa_flags &=
- ~(IEEE80211_AGGR_SETUP | IEEE80211_AGGR_NAK);
- }
+ if (tap->txa_flags & IEEE80211_AGGR_SETUP)
+ ampdu_tx_stop(tap);
}
for (i = 0; i < WME_NUM_TID; i++)
ampdu_rx_stop(&ni->ni_rx_ampdu[i]);
@@ -1429,6 +1420,38 @@
}
static void
+ampdu_tx_setup(struct ieee80211_tx_ampdu *tap)
+{
+ callout_init(&tap->txa_timer, CALLOUT_MPSAFE);
+ tap->txa_flags |= IEEE80211_AGGR_SETUP;
+}
+
+static void
+ampdu_tx_stop(struct ieee80211_tx_ampdu *tap)
+{
+ struct ieee80211_node *ni = tap->txa_ni;
+ struct ieee80211com *ic = ni->ni_ic;
+
+ KASSERT(tap->txa_flags & IEEE80211_AGGR_SETUP,
+ ("txa_flags 0x%x ac %d", tap->txa_flags, tap->txa_ac));
+
+ /*
+ * Stop BA stream if setup so driver has a chance
+ * to reclaim any resources it might have allocated.
+ */
+ ic->ic_addba_stop(ni, tap);
+ /*
+ * Stop any pending BAR transmit.
+ */
+ bar_stop_timer(tap);
+
+ tap->txa_lastsample = 0;
+ tap->txa_avgpps = 0;
+ /* NB: clearing NAK means we may re-send ADDBA */
+ tap->txa_flags &= ~(IEEE80211_AGGR_SETUP | IEEE80211_AGGR_NAK);
+}
+
+static void
addba_timeout(void *arg)
{
struct ieee80211_tx_ampdu *tap = arg;
@@ -1828,8 +1851,7 @@
/* XXX locking */
if ((tap->txa_flags & IEEE80211_AGGR_SETUP) == 0) {
/* do deferred setup of state */
- callout_init(&tap->txa_timer, CALLOUT_MPSAFE);
- tap->txa_flags |= IEEE80211_AGGR_SETUP;
+ ampdu_tx_setup(tap);
}
/* XXX hack for not doing proper locking */
tap->txa_flags &= ~IEEE80211_AGGR_NAK;
@@ -1952,7 +1974,6 @@
if (status) /* ACK'd */
bar_stop_timer(tap);
ic->ic_bar_response(ni, tap, status);
- } else {
/* NB: just let timer expire so we pace requests */
}
}
More information about the p4-projects
mailing list