linux_dsm_epyc7002/drivers/net/wireless/ath/ath9k
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
..
ahb.c
ani.c ath9k_hw: fix PHY counter overflow handling in ANI v1 2010-10-15 15:48:44 -04:00
ani.h ath9k_hw: move the cycle counter tracking to ath 2010-10-11 15:04:20 -04:00
ar5008_initvals.h
ar5008_phy.c ath9k_hw: extend ath9k_hw_set_txpowerlimit to test channel txpower 2010-11-15 13:23:14 -05:00
ar9001_initvals.h
ar9002_calib.c ath9k_hw: clean up register write buffering 2010-10-06 16:30:38 -04:00
ar9002_hw.c ath9k_hw: merge ath9k_hw_ani_monitor_old and ath9k_hw_ani_monitor_new 2010-10-06 16:30:39 -04:00
ar9002_initvals.h
ar9002_mac.c ath9k_hw: fix potential spurious tx error bit interpretation 2010-11-15 13:24:19 -05:00
ar9002_phy.c ath9k_hw: clean up register write buffering 2010-10-06 16:30:38 -04:00
ar9002_phy.h
ar9003_2p2_initvals.h ath9k_hw: Fix TX carrier leakage for IEEE compliance on AR9003 2.2 2010-10-25 14:43:14 -04:00
ar9003_calib.c ath9k_hw: clean up calibration flags 2010-10-06 16:26:01 -04:00
ar9003_eeprom.c ath9k_hw: extend ath9k_hw_set_txpowerlimit to test channel txpower 2010-11-15 13:23:14 -05:00
ar9003_eeprom.h
ar9003_hw.c ath9k_hw: remove AR9003 2.0 support 2010-10-15 15:57:39 -04:00
ar9003_mac.c ath9k_hw: optimize tx status descriptor processing 2010-11-09 16:13:24 -05:00
ar9003_mac.h ath9k_hw: optimize all descriptor access functions 2010-11-09 16:13:25 -05:00
ar9003_paprd.c ath9k_hw: Fix divide by zero cases in paprd. 2010-10-25 14:43:14 -04:00
ar9003_phy.c ath9k_hw: extend ath9k_hw_set_txpowerlimit to test channel txpower 2010-11-15 13:23:14 -05:00
ar9003_phy.h
ath9k.h ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
beacon.c ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
btcoex.c
btcoex.h
calib.c ath9k_hw: clean up register write buffering 2010-10-06 16:30:38 -04:00
calib.h ath9k_hw: clean up calibration flags 2010-10-06 16:26:01 -04:00
common.c ath9k: initialize per-channel tx power limits instead of hardcoding them 2010-11-15 13:23:15 -05:00
common.h ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
debug.c ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
debug.h ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
eeprom_4k.c ath9k_hw: extend ath9k_hw_set_txpowerlimit to test channel txpower 2010-11-15 13:23:14 -05:00
eeprom_9287.c ath9k_hw: extend ath9k_hw_set_txpowerlimit to test channel txpower 2010-11-15 13:23:14 -05:00
eeprom_def.c ath9k_hw: extend ath9k_hw_set_txpowerlimit to test channel txpower 2010-11-15 13:23:14 -05:00
eeprom.c
eeprom.h ath9k_hw: extend ath9k_hw_set_txpowerlimit to test channel txpower 2010-11-15 13:23:14 -05:00
gpio.c ath9k: remove a redundant call to ath9k_hw_gettsf32 2010-11-09 16:13:25 -05:00
hif_usb.c ath9k_htc: Set proper firmware offset for Netgear WNDA3200 2010-10-27 15:46:50 -04:00
hif_usb.h
htc_drv_beacon.c ath9k_htc: Fix beacon distribution in IBSS mode 2010-09-24 15:54:32 -04:00
htc_drv_gpio.c
htc_drv_init.c ath9k_hw: remove enum wireless_mode and its users 2010-10-15 15:48:45 -04:00
htc_drv_main.c ath9k_htc: Handle monitor mode properly for HTC devices 2010-11-15 13:24:42 -05:00
htc_drv_txrx.c ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
htc_hst.c
htc_hst.h
htc.h
hw-ops.h ath9k_hw: merge ath9k_hw_ani_monitor_old and ath9k_hw_ani_monitor_new 2010-10-06 16:30:39 -04:00
hw.c ath9k_hw: extend ath9k_hw_set_txpowerlimit to test channel txpower 2010-11-15 13:23:14 -05:00
hw.h ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
init.c ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
Kconfig
mac.c ath9k_hw: optimize interrupt mask changes 2010-11-09 16:13:24 -05:00
mac.h ath9k_hw: optimize all descriptor access functions 2010-11-09 16:13:25 -05:00
main.c ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
Makefile
pci.c ath9k: Convert to new PCI PM framework 2010-11-09 16:13:25 -05:00
phy.h
rc.c ath9k: Properly assign boolean types 2010-11-15 13:24:43 -05:00
rc.h ath9k: make rate control debugfs stats per station 2010-10-15 15:48:44 -04:00
recv.c ath9k: move the PCU lock to the sc structure 2010-11-15 13:24:46 -05:00
reg.h ath9k_hw: remove AR9003 2.0 support 2010-10-15 15:57:39 -04:00
virtual.c ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00
wmi.c
wmi.h
xmit.c ath9k: rework tx queue selection and fix queue stopping/waking 2010-11-15 13:25:54 -05:00