#
de720122 |
| 15-Jul-2012 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Merge head r236710 through r238467.
|
#
6cf87ec8 |
| 13-Jul-2012 |
Xin LI <delphij@FreeBSD.org> |
IFC @238412.
|
#
b652778e |
| 11-Jul-2012 |
Peter Grehan <grehan@FreeBSD.org> |
IFC @ r238370
|
#
0f078d63 |
| 10-Jul-2012 |
John Baldwin <jhb@FreeBSD.org> |
Fix build when ATH_DEBUG is not defined.
|
#
6abbbae5 |
| 10-Jul-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Print the TX buffer if this error condition is asserted.
I need to figure out why this is occuring. Hopefully I can get enough descriptor dumps to figure it out.
|
#
8405fe86 |
| 26-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Make sure the BAR TX session pause is correctly unpaused when a node is reassociating.
PR: kern/169432
|
#
447fd44a |
| 14-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Disable this warning debug for now, as I'm now aware of the particular situation where it's occuring.
Whilst I'm here, flesh out a more descriptive description.
|
#
af33d486 |
| 13-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Implement a separate, smaller pool of ath_buf entries for use by management traffic.
* Create sc_mgmt_txbuf and sc_mgmt_txdesc, initialise/free them appropriately. * Create an enum to represent buff
Implement a separate, smaller pool of ath_buf entries for use by management traffic.
* Create sc_mgmt_txbuf and sc_mgmt_txdesc, initialise/free them appropriately. * Create an enum to represent buffer types in the API. * Extend ath_getbuf() and _ath_getbuf_locked() to take the above enum. * Right now anything sent via ic_raw_xmit() allocates via ATH_BUFTYPE_MGMT. This may not be very useful. * Add ATH_BUF_MGMT flag (ath_buf.bf_flags) which indicates the current buffer is a mgmt buffer and should go back onto the mgmt free list. * Extend 'txagg' to include debugging output for both normal and mgmt txbufs. * When checking/clearing ATH_BUF_BUSY, do it on both TX pools.
Tested:
* STA mode, with heavy UDP injection via iperf. This filled the TX queue however BARs were still going out successfully.
TODO:
* Initialise the mgmt buffers with ATH_BUF_MGMT and then ensure the right type is being allocated and freed on the appropriate list. That'd save a write operation (to bf->bf_flags) on each buffer alloc/free.
* Test on AP mode, ensure that BAR TX and probe responses go out nicely when the main TX queue is filled (eg with paused traffic to a TID, awaiting a BAR to complete.)
PR: kern/168170
show more ...
|
#
32c387f7 |
| 13-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Oops, return the newly allocated buffer to the queue, not the completed buffer.
PR: kern/168170
|
#
e1a50456 |
| 13-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Replace the direct sc_txbuf manipulation with a pair of functions.
This is preparation work for having a separate ath_buf queue for management traffic.
PR: kern/168170
|
#
c7c07341 |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Fix uninitialised reference.
Noticed by: John Hay <jhay@meraka.org.za>
|
#
7561cb5c |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
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) t
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
show more ...
|
#
4b6db404 |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Add another TID lock.
|
#
ba0e58f4 |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Make sure the frames are queued to the head of the list, not the tail. See previous commit.
PR: kern/166190
|
#
39f24578 |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
When scheduling frames in an aggregate session, the frames should be scheduled from the head of the software queue rather than trying to queue the newly given frame.
This leads to some rather unfort
When scheduling frames in an aggregate session, the frames should be scheduled from the head of the software queue rather than trying to queue the newly given frame.
This leads to some rather unfortunate out of order (but still valid as it's inside the BAW) frame TX.
This now:
* Always queues the frame at the end of the software queue; * Tries to direct dispatch the frame at the head of the software queue, to try and fill up the hardware queue.
TODO:
* I should likely try to queue as many frames to the hardware as I can at this point, rather than doing one at a time; * ath_tx_xmit_aggr() may fail and this code assumes that it'll schedule the TID. Otherwise TX may stall.
PR: kern/166190
show more ...
|
#
4547f047 |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
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
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
show more ...
|
#
42f4d061 |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Finish undoing the previous commit - this part of the code is no longer required.
PR: kern/166190
|
#
c2ac9655 |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Introduce a new lock debug which is specifically for making sure the _TID_ lock is held.
For now the TID lock is also the TXQ lock. This is just to make sure that the right TXQ lock is held for the
Introduce a new lock debug which is specifically for making sure the _TID_ lock is held.
For now the TID lock is also the TXQ lock. This is just to make sure that the right TXQ lock is held for the given TID.
show more ...
|
#
a108d2d6 |
| 11-Jun-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Revert r233227 and followup commits as it breaks CCMP PN replay detection.
This showed up when doing heavy UDP throughput on SMP machines.
The problem with this is because the 802.11 sequence numbe
Revert r233227 and followup commits as it breaks CCMP PN replay detection.
This showed up when doing heavy UDP throughput on SMP machines.
The problem with this is because the 802.11 sequence number is being allocated separately to the CCMP PN replay number (which is assigned during ieee80211_crypto_encap()).
Under significant throughput (200+ MBps) the TX path would be stressed enough that frame TX/retry would force sequence number and PN allocation to be out of order. So once the frames were reordered via 802.11 seqnos, the CCMP PN would be far out of order, causing most frames to be discarded by the receiver.
I've fixed this in some local work by being forced to:
(a) deal with the issues that lead to the parallel TX causing out of order sequence numbers in the first place; (b) fix all the packet queuing issues which lead to strange (but mostly valid) TX.
I'll begin fixing these in a subsequent commit or five.
PR: kern/166190
show more ...
|
#
2d5e7d2e |
| 30-May-2012 |
Will Andrews <will@FreeBSD.org> |
IFC @ r236291. Diff reductions to the enclosure driver made in r235911.
|
#
31ccd489 |
| 28-May-2012 |
Gleb Smirnoff <glebius@FreeBSD.org> |
Merge head r233826 through r236168.
|
#
b815538d |
| 26-May-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Avoid using hard-coded numbers here.
|
#
d3a6425b |
| 22-May-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Fix up some corner cases with aggregation handling.
I've come across a weird scenario in net80211 where two TX streams will happily attempt to setup an aggregation session together. If we're very lu
Fix up some corner cases with aggregation handling.
I've come across a weird scenario in net80211 where two TX streams will happily attempt to setup an aggregation session together. If we're very lucky, it happens concurrently on separate CPUs and the total lack of locking in the net80211 aggregation code causes this stuff to race. Badly.
So >1 call would occur to the ath(4) addba start, but only one call would complete to addba complete or timeout. The TID would thus stay paused.
The real fix is to implement some proper per-node (or maybe per-TID) locking in net80211, which then could be leveraged by the ath(4) TX aggregation code.
Whilst I'm at it, shuffle around the debugging messages a bit. I like to keep people on their toes.
show more ...
|
#
6deb7f32 |
| 22-May-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
For now, add a quick debugging patch to log when the hw TXQ != the TID/AC.
|
#
4dfd4507 |
| 22-May-2012 |
Adrian Chadd <adrian@FreeBSD.org> |
Rename ath_tx_cleanup() -> ath_tx_tid_cleanup() in order to not clash with a symbol in if_ath.c
|