On Wednesday 06 September 2006 09:36, Johannes Berg wrote:
> Michael,
> 
> > When a preemptible work happens, we completely shutdown IRQ
> > handling and we suspend the MAC. We do this, because we must
> > not take the IRQ spinlock if we want to be preemptible.
> > By not taking the IRQ spinlock, we race against the DMA engine
> > (and other parts). So we must shutdown any data flow during
> > the periodic work to ensure the IRQ handler does not trigger.
> > The sad thing is: We don't know much about how the card and
> > the firmware works (yet). So the big question is:
> > How to suspend the card in an easy and _inexpensive_ way?
> > We currently mask all IRQs and suspend the MAC. I guess MAC
> > suspending is part of the problem. I _guess_ the card is
> > confused by suspending the MAC in the middle of possible
> > transmissions. It's all just a guess. That's why I want to
> > have a good way to reproduce the bug to do experiments.
> > We could suspend the DMA TX channel before we suspend the MAC,
> > for example. We could try other things as well. For example
> > don't suspend the MAC at all. Just mask IRQs.
> 
> I notice that later drivers say something like:
>  * the MAC suspend is independent of DMA suspend
>  * MAC suspend means that the MAC is suspended and won't tx/rx any
>    frames
>  * due to the device having FIFO buffers, DMA may continue after a MAC
>    suspend until the buffers are full
>  * the correct way to completely idle the card is to suspend the MAC
>    and then wait for DMA/PIO to suspend as well
> 
> Will put that into the spec at some point too :)

Nice, thanks for the explaination.

-- 
Greetings Michael.
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to