summaryrefslogtreecommitdiffstats
path: root/games
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-11-15 03:00:49 +0000
committeradrian <adrian@FreeBSD.org>2012-11-15 03:00:49 +0000
commit29059de59373b42e17ea18d4793ef7e3135c26b9 (patch)
treeeb59cf74ec35d1889a2c2fc9f130ced1c5035b22 /games
parentf40f3c3255364f472ec06d9ba5ad0b66f16a6572 (diff)
downloadFreeBSD-src-29059de59373b42e17ea18d4793ef7e3135c26b9.zip
FreeBSD-src-29059de59373b42e17ea18d4793ef7e3135c26b9.tar.gz
Make sure the final descriptor in an aggregate has rate control information.
This was broken by me when merging the 802.11n aggregate descriptor chain setup with the default descriptor chain setup, in preparation for supporting AR9380 NICs. The corner case here is quite specific - if you queue an aggregate frame with >1 frames in it, and the last subframe has only one descriptor making it up, then that descriptor won't have the rate control information copied into it. Look at what happens inside ar5416FillTxDesc() if both firstSeg and lastSeg are set to 1. Then when ar5416ProcTxDesc() goes to fill out ts_rate based on the transmit index, it looks at the rate control fields in that descriptor and dutifully sets it to be 0. It doesn't happen for non-aggregate frames - if they have one descriptor, the first descriptor already has rate control info. I removed the call to ath_hal_setuplasttxdesc() when I migrated the code to use the "new" style aggregate chain routines from the HAL. But I missed this particular corner case. This is a bit inefficient with MIPS boards as it involves a few redundant writes into non-cachable memory. I'll chase that up when it matters. Tested: * AR9280 STA mode, TCP iperf traffic * Rui Paulo <rpaulo@> first reported this and has verified it on his AR9160 based AP. PR: kern/173636
Diffstat (limited to 'games')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud