freebsd-dev/sys
Adrian Chadd 0d4e4e5ea4 Fix a WME corner case found by the FreeBSD 802.11n testing crew.
The symptom: sometimes 11n (and non-11n) throughput is great.
Sometimes it isn't. Much teeth gnashing occured, and much kernel
bisecting happened, until someone figured out it was the order
of which things were rebooted, not the kernel versions.
(Which was great news to me, it meant that I hadn't broken if_ath.)

What we found was that sometimes the WME parameters for the best-effort
queue had a burst window ("txop") in which the station would be allowed
to TX as many packets as it could fit inside that particular burst
window. This improved throughput.

After initially thinking it was a bug - the WME parameters for the
best-effort queue -should- have a txop of 0, Bernard and I discovered
"aggressive mode" in net80211 - where the WME BE queue parameters
are changed if there's not a lot of high priority traffic going on.
The WME parameters announced in the association response and beacon
frames just "change" based on what the current traffic levels are.
So in fact yes, the STA was acutally supposed to be doing this higher
throughput stuff as it's just meant to be configuring things based on
the WME parameters - but it wasn't.

What was eventually happening was this:

* at startup, the wme qosinfo count field would be 0;
* it'd be parsed in ieee80211_parse_wmeparams();
* and it would be bumped (to say 10);
* .. and the WME queue parameters would be correctly parsed and set.

But then, when you restarted the assocation (eg hostap goes away and
comes back with the same qosinfo count field of 10, or if you
destroy the sta VIF and re-create it), the WME qosinfo count field -
which is associated not to the VIF, but to the main interface -
wouldn't be cleared, so the queue default parameters would be used
(which include no burst setting for the BE queue) and would remain
that way until the hostap qosinfo count field changed, or the STA
was actually rebooted.

This fix simply cleares the wme capability field (which has the count
field) to 0, forcing it to be reset by the next received beacon.

Thanks go to Milu for finding it and helping me track down what was
going on, and Bernard Schmidt for working through the net80211 and
WME specific magic.
2011-03-24 15:27:15 +00:00
..
amd64 - Merge changes to the base system to support OFED. These include 2011-03-21 09:40:01 +00:00
arm Fix mv_gpio_in() for pin numbers that occupy bits 8-31 in GPIO registers. 2011-03-16 00:42:15 +00:00
boot MFi386: the part of 219452 2011-03-24 15:09:36 +00:00
bsm Add ECAPMODE, "Not permitted in capability mode", a new kernel errno 2011-03-01 13:14:28 +00:00
cam Don't automatically send a START UNIT to sequential access devices- 2011-03-03 18:28:21 +00:00
cddl Fix potential panic in dbuf_sync_list() relate to spill blocks handling. 2011-03-14 11:07:12 +00:00
compat Staticize functions which are not used somewhere else, move the 2011-03-15 13:40:47 +00:00
conf Flip this over to be a configurable option for people who wish to play with it. 2011-03-22 13:35:56 +00:00
contrib Merge ACPICA 20110316. 2011-03-17 00:29:53 +00:00
crypto Fix a bug in the result of manual assembly. 2011-03-02 14:56:58 +00:00
ddb Modify kdb_trap() so that it re-calls the dbbe_trap function as long as 2011-02-18 22:25:11 +00:00
dev MFgraid/head r218174: 2011-03-24 08:56:12 +00:00
fs Add some FEATURE macros for various features (AUDIT/CAM/IPC/KTR/MAC/NFS/NTP/ 2011-02-25 10:11:01 +00:00
gdb Modify kdb_trap() so that it re-calls the dbbe_trap function as long as 2011-02-18 22:25:11 +00:00
geom MFgraid/head r217827: 2011-03-24 08:37:48 +00:00
gnu Fix typos - remove duplicate "the". 2011-02-21 09:01:34 +00:00
i386 Modestly increase the maximum allowed size of the kmem map on i386. 2011-03-23 16:38:29 +00:00
ia64 Fix switching to physical mode as part of calling into EFI runtime 2011-03-21 18:20:53 +00:00
isa bus_add_child: change type of order parameter to u_int 2010-09-10 11:19:03 +00:00
kern Recognize "ro", "rdonly", "norw", "rw" and "noro" as equal options in 2011-03-23 17:56:38 +00:00
kgssapi
libkern Fix typos - remove duplicate "is". 2011-02-23 09:22:33 +00:00
mips For now remove options FLOWTABLE from the remaining GENERIC kernel 2011-03-19 15:50:34 +00:00
modules - Move ofed modules into the i386 and amd64 specific sections to fix 2011-03-23 08:27:57 +00:00
net - Merge changes to the base system to support OFED. These include 2011-03-21 09:40:01 +00:00
net80211 Fix a WME corner case found by the FreeBSD 802.11n testing crew. 2011-03-24 15:27:15 +00:00
netatalk
netgraph Improve locking of creating and dropping links in the graph, acquiring 2011-03-21 14:18:40 +00:00
netinet Reference ifaddr object before unlocking as it can be freed 2011-03-21 14:19:40 +00:00
netinet6 - Merge changes to the base system to support OFED. These include 2011-03-21 09:40:01 +00:00
netipsec Fixed IPsec's HMAC_SHA256-512 support to be RFC4868 compliant. 2011-02-18 09:40:13 +00:00
netipx
netnatm Reimplement the netisr framework in order to support parallel netisr 2009-06-01 10:41:38 +00:00
netncp
netsmb
nfs
nfsclient Add some FEATURE macros for various features (AUDIT/CAM/IPC/KTR/MAC/NFS/NTP/ 2011-02-25 10:11:01 +00:00
nfsserver Add some FEATURE macros for various features (AUDIT/CAM/IPC/KTR/MAC/NFS/NTP/ 2011-02-25 10:11:01 +00:00
nlm sysctl(9) cleanup checkpoint: amd64 GENERIC builds cleanly. 2011-01-12 19:54:19 +00:00
ofed Do a sweep of the tree replacing calls to pci_find_extcap() with calls to 2011-03-23 13:10:15 +00:00
opencrypto fixed size of AH_ALEN_MAX, which is 64 bytes for SHA-512. 2011-02-25 09:29:32 +00:00
pc98 Deprecate tsc_present as the last of its real consumers finally disappeared. 2011-03-15 17:19:52 +00:00
pci Do a sweep of the tree replacing calls to pci_find_extcap() with calls to 2011-03-23 13:10:15 +00:00
powerpc Remove duplicate definition of FIRSTARG. 2011-03-17 19:44:00 +00:00
rpc Mfp4 CH=177274,177280,177284-177285,177297,177324-177325 2011-02-16 21:29:13 +00:00
security - Add a FEATURE for capsicum (security_capabilities). 2011-03-04 09:03:54 +00:00
sparc64 - Make a panic message better reflect the actual problem. 2011-03-19 20:36:05 +00:00
sun4v Remove the advertising clause from the UCB license according to the 2011-03-13 13:42:43 +00:00
sys Modestly increase the maximum allowed size of the kmem map on i386. 2011-03-23 16:38:29 +00:00
teken Use proper bounds checking on VPA. 2010-12-05 10:15:23 +00:00
tools
ufs Add retry code analogous to the block allocation retry code 2011-03-23 05:13:54 +00:00
vm - Merge changes to the base system to support OFED. These include 2011-03-21 09:40:01 +00:00
x86 Revert r219676. 2011-03-16 16:44:08 +00:00
xdr Add a check for a NULL mbuf ptr at the beginning of xdrmbuf_inline() 2009-08-12 16:27:51 +00:00
xen Fix a few more SYSCTL_PROC() that were missing a CTLFLAG type specifier. 2011-01-19 00:57:58 +00:00
Makefile Add lex and yacc sources to things cscope'd. 2010-11-21 03:58:11 +00:00