linux/drivers/net/wireless/ath/wcn36xx
Bob Copeland 8e8e54c490 wcn36xx: introduce per-channel ring buffer locks
wcn36xx implements a ring buffer for transmitted frames for each
(high and low priority) DMA channel.  The ring buffers are lockless:
new frames are inserted at the head of the queue, while finished
packets are reaped from the tail.

Unfortunately, the list manipulations are missing any kind of barriers
so are susceptible to various races: for example, a TX completion
handler might read an updated desc->ctrl before the head has actually
advanced, and then null out the ctl->skb pointer while it is still
being used in the TX path.

Simplify things here by adding a spin lock when traversing the ring.
This change increased stability for me without adding any noticeable
overhead on my platform (xperia z).

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2015-10-28 20:58:06 +02:00
..
debug.c wcn36xx: harmless memory corruption bug in debugfs 2013-11-11 14:42:46 -05:00
debug.h
dxe.c wcn36xx: introduce per-channel ring buffer locks 2015-10-28 20:58:06 +02:00
dxe.h wcn36xx: introduce per-channel ring buffer locks 2015-10-28 20:58:06 +02:00
hal.h wcn36xx: Improve feature caps exchange 2014-02-13 15:20:17 -05:00
Kconfig
main.c mac80211: allow to transmit A-MSDU within A-MPDU 2015-09-22 15:21:23 +02:00
Makefile
pmc.c
pmc.h
smd.c mac80211: remove short slot/short preamble incapable flags 2015-06-02 20:28:58 +02:00
smd.h wcn36xx: Print FW capabilities 2014-02-13 15:20:17 -05:00
txrx.c wcn36xx: initiate TX BA sessions 2015-01-23 19:12:12 +02:00
txrx.h wcn36xx: let device generate qos seq numbers 2015-01-23 19:11:58 +02:00
wcn36xx.h wcn36xx: initiate TX BA sessions 2015-01-23 19:12:12 +02:00