Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Jun 2012 07:15:49 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r236876 - head/sys/dev/ath
Message-ID:  <201206110715.q5B7Fn8h049682@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Mon Jun 11 07:15:48 2012
New Revision: 236876
URL: http://svn.freebsd.org/changeset/base/236876

Log:
  Retried frames need to be inserted in the head of the list, not the tail.
  
  This is an unfortunate byproduct of how the routine is used - it's called
  with the head frame on the queue, but if the frame is failed, it's inserted
  into the tail of the queue.
  
  Because of this, the sequence numbers would get all shuffled around and
  the BAW would be bumped past this sequence number, that's now at the
  end of the software queue.  Then, whenever it's time for that frame
  to be transmitted, it'll be immediately outside of the BAW and TX will
  stall until the BAW catches up.
  
  It can also result in all kinds of weird duplicate BAW frames, leading
  to hilarious panics.
  
  PR:		kern/166190

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	Mon Jun 11 07:11:34 2012	(r236875)
+++ head/sys/dev/ath/if_ath_tx.c	Mon Jun 11 07:15:48 2012	(r236876)
@@ -2309,7 +2309,7 @@ ath_tx_xmit_aggr(struct ath_softc *sc, s
 
 	/* paused? queue */
 	if (tid->paused) {
-		ATH_TXQ_INSERT_TAIL(tid, bf, bf_list);
+		ATH_TXQ_INSERT_HEAD(tid, bf, bf_list);
 		/* XXX don't sched - we're paused! */
 		return;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206110715.q5B7Fn8h049682>