[PATCH] b43: use rx desc underrun interrupt

Piotras piotras at gmail.com
Sun Apr 21 10:27:49 EDT 2013


Michael,

Based on BCM440X Programmer's Reference Guide that may or may not
apply to DMA processor used in WLAN chipsets, B43_DMA32_RXSTATUS may
be updated by hardware to point to the same descriptor as
B43_DMA32_RXINDEX.

For DMA processor this means that no more free descriptors are
available. However b43_dma_rx assumes no data needs to be processed
(see how ring->current_slot is updated and used in loop condition on
next interrupt). This could explain stalls.

I don't expect that changing loop condition is sufficient, as without
dropping some packets we will not prevent FIFO overruns.


Regards,

Piotr

On Sun, Apr 21, 2013 at 7:38 AM, Michael Büsch <m at bues.ch> wrote:
> On Sat, 20 Apr 2013 23:23:54 +0200 (CEST)
> Thommy Jakobsson <thommyj at gmail.com> wrote:
>
>> Isn't that exactly what we do in b43_dma_rx? The initial rx descriptor
>> index is just to make the device to start. Theoretically you could get
>> into a fault situation if the device succeds in using up all descriptors
>> between b43_dma_rx_discard (added by my patch) and the call to b43_dma_rx.
>> Because then you could start reading the same packet as the device is
>> writing to.
>
> Yes this is true.
> And thus I'm currently unsure why we need this patch at all.
> _Why_ does the DMA stall as soon as the ring is filled up?
>
> --
> Michael



More information about the b43-dev mailing list