linux/drivers/net/wireless
Felix Fietkau 066dae93bd ath9k: rework tx queue selection and fix queue stopping/waking
The current ath9k tx queue handling code showed a few issues that could
lead to locking issues, tx stalls due to stopped queues, and maybe even
DMA issues.

The main source of these issues is that in some places the queue is
selected via skb queue mapping in places where this mapping may no
longer be valid. One such place is when data frames are transmitted via
the CAB queue (for powersave buffered frames). This is made even worse
by a lookup WMM AC values from the assigned tx queue (which is
undefined for the CAB queue).

This messed up the pending frame counting, which in turn caused issues
with queues getting stopped, but not woken again.

To fix these issues, this patch removes an unnecessary abstraction
separating a driver internal queue number from the skb queue number
(not to be confused with the hardware queue number).

It seems that this abstraction may have been necessary because of tx
queue preinitialization from the initvals. This patch avoids breakage
here by pushing the software <-> hardware queue mapping to the function
that assigns the tx queues and redefining the WMM AC definitions to
match the numbers used by mac80211 (also affects ath9k_htc).

To ensure consistency wrt. pending frame count tracking, these counters
are moved to the ath_txq struct, updated with the txq lock held, but
only where the tx queue selected by the skb queue map actually matches
the tx queue used by the driver for the frame.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Reported-by: Björn Smedman <bjorn.smedman@venatech.se>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2010-11-15 13:25:54 -05:00
..
ath ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
b43 b43: remove extraneous code in free_ringmemory 2010-11-15 13:24:38 -05:00
b43legacy b43legacy: rfkill: use status register based on core revision (not PHY's) 2010-11-15 13:25:52 -05:00
hostap Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-10-24 13:41:39 -07:00
ipw2x00 Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem 2010-10-08 15:39:28 -04:00
iwlwifi iwlagn: use 6000g2b uCode for 130 series devices 2010-11-15 13:24:59 -05:00
iwmc3200wifi Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-10-23 11:47:02 -07:00
libertas libertas: Fix sd8686 firmware reload 2010-10-29 14:33:25 -04:00
libertas_tf Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem 2010-08-25 14:51:42 -04:00
orinoco Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-10-23 11:47:02 -07:00
p54 Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-10-24 13:41:39 -07:00
prism54 Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-10-24 13:41:39 -07:00
rt2x00 rt2x00pci: do not use GFP_DMA 2010-11-15 13:24:39 -05:00
rtl818x rtl8187: restore anaparam registers after reset with 8187B 2010-11-15 13:25:48 -05:00
wl12xx wl1271: add recover testmode command 2010-11-15 13:25:25 -05:00
wl1251 wl1251: fix module names 2010-10-25 14:45:55 -04:00
zd1211rw zd1211rw: add 2 missing usb id's 2010-11-15 13:25:50 -05:00
adm8211.c
adm8211.h
airo.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-10-23 11:47:02 -07:00
airo.h
airo_cs.c pcmcia: remove obsolete and wrong comments 2010-09-29 17:20:25 +02:00
at76c50x-usb.c WIRELESS: at76c50x, remove unneeded NULL check 2010-10-11 15:04:25 -04:00
at76c50x-usb.h
atmel.c
atmel.h
atmel_cs.c pcmcia: remove obsolete and wrong comments 2010-09-29 17:20:25 +02:00
atmel_pci.c
Kconfig wl1251: move to it's own directory 2010-10-11 15:04:23 -04:00
mac80211_hwsim.c mac80211_hwsim: Incorporate txpower into rssi 2010-11-15 13:25:28 -05:00
Makefile wl1251: move to it's own directory 2010-10-11 15:04:23 -04:00
mwl8k.c mwl8k: force AP mode to use non-AMPDU frames 2010-11-15 13:25:36 -05:00
ray_cs.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-10-23 11:47:02 -07:00
ray_cs.h pcmcia: do not use win_req_t when calling pcmcia_request_window() 2010-09-29 17:20:21 +02:00
rayctl.h
rndis_wlan.c cfg80211/mac80211: allow per-station GTKs 2010-10-06 16:30:40 -04:00
wl3501.h
wl3501_cs.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6 2010-10-23 11:47:02 -07:00
zd1201.c zd1201: Add missing id 2010-11-15 13:25:51 -05:00
zd1201.h