diff options
author | adrian <adrian@FreeBSD.org> | 2012-06-11 07:44:16 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2012-06-11 07:44:16 +0000 |
commit | 2cecdd81d885af2868172221b5068c523eade78c (patch) | |
tree | 15ac00e3db1416efeb3ffcb7bb12e063586ed40d /usr.sbin/wake | |
parent | a067a20110d7a491061788fe77f1254270e354f3 (diff) | |
download | FreeBSD-src-2cecdd81d885af2868172221b5068c523eade78c.zip FreeBSD-src-2cecdd81d885af2868172221b5068c523eade78c.tar.gz |
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
Diffstat (limited to 'usr.sbin/wake')
0 files changed, 0 insertions, 0 deletions