opnsense-src/sys
Adrian Chadd 1fdadc0fb6 Fix a corner case in RXEOL handling which was likely introduced by yours
truly.

Before 802.11n, the RX descriptor list would employ the "self-linked tail
descriptor" trick which linked the last descriptor back to itself.
This way, the RX engine would never hit the "end" of the list and stop
processing RX (and assert RXEOL) as it never hit a descriptor whose next
pointer was 0. It would just keep overwriting the last descriptor until
the software freed up some more RX descriptors and chained them onto the
end.

For 802.11n, this needs to stop as a self-linked RX descriptor tickles the
block-ack logic into ACK'ing whatever frames are received into that
self-linked descriptor - so in very busy periods, you could end up with
A-MPDU traffic that is ACKed but never received by the 802.11 stack.
This would cause some confusion as the ADDBA windows would suddenly
be out of sync.

So when that occured here, the last descriptor would be hit and the PCU
logic would stop. It would only start again when the RX descriptor list
was updated and the PCU RX engine was re-tickled. That wasn't being done,
so RXEOL would be continuously asserted and no RX would continue.

This patch introduces a new flag - sc->sc_kickpcu - which when set,
signals the RX task to kick the PCU after its processed whatever packets
it can. This way completed packets aren't discarded.

In case some other task gets called which resets the hardware, don't
update sc->sc_imask - instead, just update the hardware interrupt mask
directly and let either ath_rx_proc() or ath_reset() restore the imask
to its former setting.

Note: this bug was only triggered when doing a whole lot of frame snooping
with serial console IO in the RX task. This would defer interrupt processing
enough to cause an RX descriptor overflow. It doesn't happen in normal
conditions.

Approved by: re (kib, blanket)
2011-08-02 02:46:03 +00:00
..
amd64 Introduce a tunable to disable the time consuming parts of bootup 2011-07-30 13:33:05 +00:00
arm Add the possibility to specify from kernel configs MAXCPU value. 2011-07-19 00:37:24 +00:00
boot Document the tftp.blksize variable added in src/lib/libstand/tftp.c. 2011-07-25 21:52:17 +00:00
bsm Add ECAPMODE, "Not permitted in capability mode", a new kernel errno 2011-03-01 13:14:28 +00:00
cam Higher-priority initialization request can eat request scheduling done from 2011-07-30 21:42:53 +00:00
cddl Fix integer overflow in txg_delay() by initializing 2011-08-01 14:50:31 +00:00
compat Implement the linprocfs swaps file, providing information about the 2011-08-01 19:12:15 +00:00
conf Looks like we're ready for 9.0-BETA1 builds. 2011-07-26 04:00:00 +00:00
contrib Update packet filter (pf) code to OpenBSD 4.5. 2011-06-28 11:57:25 +00:00
crypto Fix a bug in the result of manual assembly. 2011-03-02 14:56:58 +00:00
ddb Fix making kernel dumps from the debugger by creating a command 2011-06-07 01:28:12 +00:00
dev Fix a corner case in RXEOL handling which was likely introduced by yours 2011-08-02 02:46:03 +00:00
fs Fix rename in the new NFS server so that it does not require a 2011-07-31 20:06:11 +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 Add some spare fields to the g_class and g_geom structures needed to implement 2011-07-17 20:35:30 +00:00
gnu Fix typo in unused function name 2011-05-22 09:58:48 +00:00
i386 Introduce a tunable to disable the time consuming parts of bootup 2011-07-30 13:33:05 +00:00
ia64 Bump MAXCPU for amd64, ia64 and XLP mips appropriately. 2011-07-19 13:00:30 +00:00
isa Move VT switching hack for suspend/resume from bus drivers to syscons.c 2011-05-09 18:46:49 +00:00
kern Fix the LK_NOSHARE lockmgr flag interaction with LK_UPGRADE and 2011-08-01 19:07:03 +00:00
kgssapi Add a small comment about unloading the kgsappi module. 2011-07-16 08:05:49 +00:00
libkern Fix typos - remove duplicate "is". 2011-02-23 09:22:33 +00:00
mips Bump MAXCPU for amd64, ia64 and XLP mips appropriately. 2011-07-19 13:00:30 +00:00
modules Add new USB 3G driver. 2011-07-08 10:58:56 +00:00
net Add missing MODULE_VERSION() definition to protect against duplicating 2011-08-01 11:24:55 +00:00
net80211 Fix brokenness introduced by my last commit. 2011-07-20 00:36:47 +00:00
netatalk
netgraph remove RESTARTABLE_PANICS option 2011-07-25 09:12:48 +00:00
netinet Add missing break; in r223593. 2011-08-01 13:41:38 +00:00
netinet6 The socket API only specifies SCTP for SOCK_SEQPACKET and 2011-07-12 19:29:29 +00:00
netipsec Update packet filter (pf) code to OpenBSD 4.5. 2011-06-28 11:57:25 +00:00
netipx
netnatm
netncp
netsmb Change some variables from int to size_t. This is more accurate since 2011-01-08 23:06:54 +00:00
nfs Set proper root device name when legacy NFS client is compiled into kernel. 2011-06-29 15:17:29 +00:00
nfsclient Fix the kgssapi so that it can be loaded as a module. Currently 2011-06-19 22:08:55 +00:00
nfsserver Fix the kgssapi so that it can be loaded as a module. Currently 2011-06-19 22:08:55 +00:00
nlm Add a lock flags argument to the VFS_FHTOVP() file system 2011-05-22 01:07:54 +00:00
ofed MFC 2011-05-27 16:09:10 +00:00
opencrypto After the r219999 is merged to stable/8, rename fallocf(9) to falloc(9) 2011-04-01 13:28:34 +00:00
pc98 Introduce a tunable to disable the time consuming parts of bootup 2011-07-30 13:33:05 +00:00
pci Add new device id of D-Link DGE-530T Rev. C controller. DGE-503T 2011-07-30 01:06:12 +00:00
powerpc Apply r221124 to Book-E: switch to the new NFS client. 2011-07-31 18:34:38 +00:00
rpc Fix the kgssapi so that it can be loaded as a module. Currently 2011-06-19 22:08:55 +00:00
security Provide ability to audit cap_rights_t arguments. 2011-07-18 12:58:18 +00:00
sparc64 Merge from r224217: 2011-07-20 18:51:18 +00:00
sys remove RESTARTABLE_PANICS option 2011-07-25 09:12:48 +00:00
teken Fix various whitespace inconsistencies in sys/teken. 2011-06-26 18:25:10 +00:00
tools GNU awk does not output escaped newlines in multi-line printc statements. This 2011-03-31 21:33:33 +00:00
ufs Update to -r224294 to ensure that only one of MNT_SUJ or MNT_SOFTDEP 2011-07-30 00:43:18 +00:00
vm Implement the linprocfs swaps file, providing information about the 2011-08-01 19:12:15 +00:00
x86 Fix build when NEW_PCIB is not defined. 2011-07-16 14:05:34 +00:00
xdr
xen Monitor and emit events for XenStore changes to XenBus trees 2011-06-11 04:59:01 +00:00
Makefile Include sys/xen in cscope tag file generation. 2011-06-10 20:51:41 +00:00