]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Wrap the whole (software) TX path from ifnet dequeue to software queue
authorAdrian Chadd <adrian@FreeBSD.org>
Mon, 11 Jun 2012 07:44:16 +0000 (07:44 +0000)
committerAdrian Chadd <adrian@FreeBSD.org>
Mon, 11 Jun 2012 07:44:16 +0000 (07:44 +0000)
commit7561cb5c8b386140f01f0d6b0560fee7f5127dd6
tree15ac00e3db1416efeb3ffcb7bb12e063586ed40d
parent4b6db4043f4f9be7eb7bfe9cd9b806214ab9d212
Wrap the whole (software) TX path from ifnet dequeue to software queue
(or direct dispatch) behind the TXQ lock (which, remember, is doubling
as the TID lock too for now.)

This ensures that:

 (a) the sequence number and the CCMP PN allocation is done together;
 (b) overlapping transmit paths don't interleave frames, so we don't
     end up with the original issue that triggered kern/166190.

     Ie, that we don't end up with seqno A, B in thread 1, C, D in
     thread 2, and they being queued to the software queue as "A C D B"
     or similar, leading to the BAW stalls.

This has been tested:

* both STA and AP modes with INVARIANTS and WITNESS;
* TCP and UDP TX;
* both STA->AP and AP->STA.

STA is a Routerstation Pro (single CPU MIPS) and the AP is a dual-core
Centrino.

PR: kern/166190
sys/dev/ath/if_ath_tx.c