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
