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
