]> git.baikalelectronics.ru Git - kernel.git/commit
rt2x00: Improve TX status handling for BlockAckReq frames
authorHelmut Schaa <helmut.schaa@googlemail.com>
Thu, 17 Jan 2013 16:34:32 +0000 (17:34 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 22 Jan 2013 21:01:29 +0000 (16:01 -0500)
commit6eb15663ba0e542509450dd64115f426eb105594
tree7523f89f2477138e11cadeb330521a35804af969
parentf391a3f033eb5ae30f20369c5a722ba3bd1df5bb
rt2x00: Improve TX status handling for BlockAckReq frames

Since rt2800 hardware isn't capable of reporting the TX status of
BlockAckReq frames implement the TX status handling of BARs in
rt2x00lib. We keep track of all BARs that are send out and try to
match incoming BAs to the appropriate BARs. This allows us to report a
more or less accurate TX status for BAR frames which in turn improves
BA session stability.

This is loosley based on Christian Lamparter's patch for carl9170
"carl9170: fix HT peer BA session corruption".

We have to walk the list of pending BARs for every rx'red BA even
though most BAs don't belong to any of these BARs as they are just
acknowledging an AMPDU. To keep that overhead low use RCU which allows
us to walk the list of pending BARs without the need to acquire a lock.
This however requires us to _copy_ relevant information from the BAR
(RA, TA, control field, start sequence number) into our BAR list entry.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Tested-by: Andreas Hartmann <andihartmann@01019freenet.de>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rt2x00/rt2800lib.c
drivers/net/wireless/rt2x00/rt2x00.h
drivers/net/wireless/rt2x00/rt2x00dev.c
drivers/net/wireless/rt2x00/rt2x00queue.c