linux/drivers/net/wireless
David Gnedt e7332a4144 wl1251: fix queue stopping/waking for TX path
The queue stopping/waking functionality was broken in a way that could
cause the TX to stall if the right circumstances are met.

The problem was caused by tx_work, which is scheduled on each TX operation.
If the firmware buffer is full, tx_work does nothing. In combinition with
stopped queues or non-continues transfers, tx_work is never scheduled again.
Moreover the low watermark introduced by
9df86e2e70 never takes effect because of some
old code.

Solve this by scheduling tx_work every time tx_queue is non-empty and
firmware buffer is freed on tx_complete.

This also solves a possible but unlikely case: If less frames than the high
watermark are queued, but more than firmware buffer can hold. This results
in queues staying awake but the only scheduled tx_work doesn't transfer all
frames, so the remaining frames are stuck in the queue until more frames
get queued and tx_work is scheduled again.

Signed-off-by: David Gnedt <david.gnedt@davizone.at>
Acked-by: Kalle Valo <kvalo@adurom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
2011-02-03 16:42:44 -05:00
..
ath Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 2011-01-31 15:24:31 -05:00
b43 Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-01-13 10:05:56 -08:00
b43legacy Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-01-13 10:05:56 -08:00
hostap hostap_cs: fix sleeping function called from invalid context 2011-01-10 15:40:53 -05:00
ipw2x00 ipw2200: Check for -1 INTA in tasklet too. 2011-01-10 15:40:53 -05:00
iwlwifi iiwlagn: remove unused parameter 2011-01-31 13:22:35 -08:00
iwmc3200wifi Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 2011-01-28 16:23:14 -05:00
libertas libertas: Prepare stuff for if_spi.c pm support 2011-02-03 16:38:26 -05:00
libertas_tf
orinoco Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-12-26 22:37:05 -08:00
p54 p54: fix sequence no. accounting off-by-one error 2011-01-10 15:40:53 -05:00
prism54
rt2x00 rt2x00: Move TX/RX work into dedicated workqueue 2011-01-31 15:06:25 -05:00
rtl818x rtl818x: move rtl8180 and rtl8187 to separate subdirectories 2010-12-22 13:45:32 -05:00
rtlwifi Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 2011-01-28 16:23:14 -05:00
wl12xx wl12xx: fix warning due to missing arg in ampdu_action 2011-01-31 15:11:38 -05:00
wl1251 wl1251: fix queue stopping/waking for TX path 2011-02-03 16:42:44 -05:00
zd1211rw Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2011-01-07 16:58:04 -08:00
adm8211.c
adm8211.h
airo_cs.c
airo.c airo: use simple_write_to_buffer 2011-01-04 14:35:12 -05:00
airo.h
at76c50x-usb.c
at76c50x-usb.h
atmel_cs.c
atmel_pci.c
atmel.c
atmel.h
Kconfig rtl8192ce: Add new driver 2010-12-15 16:17:49 -05:00
mac80211_hwsim.c mac80211: track receiver's aggregation reorder buffer size 2011-01-19 11:36:11 -05:00
Makefile rtl8192ce: Add new driver 2010-12-15 16:17:49 -05:00
mwl8k.c cfg80211: Extend channel to frequency mapping for 802.11j 2011-01-21 15:34:17 -05:00
ray_cs.c wireless: ray_cs: use '%pm' format option to print MAC 2010-12-02 15:17:00 -05:00
ray_cs.h
rayctl.h
rndis_wlan.c rndis_wlan: add support for set_power_mgmt 2010-12-22 15:43:31 -05:00
wl3501_cs.c
wl3501.h
zd1201.c wireless: Remove unnecessary casts of usb_get_intfdata 2010-12-02 15:16:47 -05:00
zd1201.h