svn commit: r224934 - user/adrian/if_ath_tx/sys/dev/ath
Adrian Chadd
adrian at FreeBSD.org
Wed Aug 17 09:52:35 UTC 2011
Author: adrian
Date: Wed Aug 17 09:52:34 2011
New Revision: 224934
URL: http://svn.freebsd.org/changeset/base/224934
Log:
Flesh out the aggregate cleanup function. Again, untested.
Fix the aggregate single-packet cleanup function - call the
completion handler before potentially kicking the queue.
Modified:
user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c
Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Wed Aug 17 09:44:15 2011 (r224933)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Wed Aug 17 09:52:34 2011 (r224934)
@@ -2023,6 +2023,8 @@ ath_tx_comp_cleanup_unaggr(struct ath_so
DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL, "%s: TID %d: incomp=%d\n",
__func__, tid, atid->incomp);
+ ath_tx_default_comp(sc, bf, 0);
+
atid->incomp--;
if (atid->incomp == 0) {
DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
@@ -2032,7 +2034,6 @@ ath_tx_comp_cleanup_unaggr(struct ath_so
ath_tx_tid_resume(sc, atid);
}
- ath_tx_default_comp(sc, bf, 0);
}
/*
@@ -2330,9 +2331,31 @@ ath_tx_comp_aggr_error(struct ath_softc
* Handle clean-up of packets from an aggregate list.
*/
static void
-ath_tx_comp_cleanup_aggr(struct ath_softc *sc, struct ath_buf *bf)
+ath_tx_comp_cleanup_aggr(struct ath_softc *sc, struct ath_buf *bf_first)
{
- /* XXX TODO */
+ struct ath_buf *bf, *bf_next;
+ struct ieee80211_node *ni = bf_first->bf_node;
+ struct ath_node *an = ATH_NODE(ni);
+ int tid = bf_first->bf_state.bfs_tid;
+ struct ath_tid *atid = &an->an_tid[tid];
+
+ bf = bf_first;
+
+ while (bf) {
+ atid->incomp--;
+ bf_next = bf->bf_next;
+ ath_tx_default_comp(sc, bf, -1);
+ bf = bf_next;
+ }
+
+ if (atid->incomp == 0) {
+ DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
+ "%s: TID %d: cleaned up! resume!\n",
+ __func__, tid);
+ atid->cleanup_inprogress = 0;
+ ath_tx_tid_resume(sc, atid);
+ }
+
}
/*
More information about the svn-src-user
mailing list