wcn36xx: introduce per-channel ring buffer locks

Kalle Valo kvalo at codeaurora.org
Wed Oct 28 11:58:40 PDT 2015


> 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 at bobcopeland.com>

Thanks, applied to wireless-drivers-next.git.

Kalle Valo



More information about the wcn36xx mailing list