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 :)

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

Reply via email to