svn commit: r250735 - head/sys/dev/ath

Adrian Chadd adrian at FreeBSD.org
Fri May 17 05:16:31 UTC 2013


Author: adrian
Date: Fri May 17 05:16:30 2013
New Revision: 250735
URL: http://svnweb.freebsd.org/changeset/base/250735

Log:
  Add some more debugging printf()s to complain if the ath_buf tx queue
  doesn't match the actual hardware queue this frame is queued to.
  
  I'm trying to ensure that the holding buffers are actually being queued
  to the same TX queue as the holding buffer that they end up on.
  I'm pretty sure this is all correct so if this complains, it'll be due
  to some kind of subtle broken-ness that needs fixing.
  
  This is only done for legacy hardware, not EDMA hardware.
  
  Tested:
  
  * AR5416 STA mode, very lightly

Modified:
  head/sys/dev/ath/if_ath_tx.c

Modified: head/sys/dev/ath/if_ath_tx.c
==============================================================================
--- head/sys/dev/ath/if_ath_tx.c	Fri May 17 04:09:04 2013	(r250734)
+++ head/sys/dev/ath/if_ath_tx.c	Fri May 17 05:16:30 2013	(r250735)
@@ -703,6 +703,19 @@ ath_tx_handoff_mcast(struct ath_softc *s
 	KASSERT((bf->bf_flags & ATH_BUF_BUSY) == 0,
 	     ("%s: busy status 0x%x", __func__, bf->bf_flags));
 
+	/*
+	 * Ensure that the tx queue is the cabq, so things get
+	 * mapped correctly.
+	 */
+	if (bf->bf_state.bfs_tx_queue != sc->sc_cabq->axq_qnum) {
+		device_printf(sc->sc_dev,
+		    "%s: bf=%p, bfs_tx_queue=%d, axq_qnum=%d\n",
+		    __func__,
+		    bf,
+		    bf->bf_state.bfs_tx_queue,
+		    txq->axq_qnum);
+	}
+
 	ATH_TXQ_LOCK(txq);
 	if (ATH_TXQ_LAST(txq, axq_q_s) != NULL) {
 		struct ath_buf *bf_last = ATH_TXQ_LAST(txq, axq_q_s);
@@ -900,6 +913,16 @@ ath_tx_handoff_hw(struct ath_softc *sc, 
 
 		}
 #endif /* IEEE80211_SUPPORT_TDMA */
+
+		if (bf->bf_state.bfs_tx_queue != txq->axq_qnum) {
+			device_printf(sc->sc_dev,
+			    "%s: bf=%p, bfs_tx_queue=%d, axq_qnum=%d\n",
+			    __func__,
+			    bf,
+			    bf->bf_state.bfs_tx_queue,
+			    txq->axq_qnum);
+		}
+
 		if (bf->bf_state.bfs_aggr)
 			txq->axq_aggr_depth++;
 		ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link);


More information about the svn-src-all mailing list