Grant Grundler wrote:
On Tue, Jun 13, 2006 at 08:33:22PM -0400, Jeff Garzik wrote:
Grant Grundler wrote:
o tulip_stop_rxtx() has to be called _after_ free_irq().
 ie. v2 patch didn't fix the original race condition
 and when under test, dies about as fast as the original code.
You made the race window smaller, but it's still there. The chip's DMA engines should be stopped before you unregister the interrupt handler.

Switching the order to be:
        tulip_stop_rxtx(tp);            /* Stop DMA */
        free_irq (dev->irq, dev);       /* no more races after this */

still leaves us open to IRQs being delivered _after_ we've stopped DMA.

Correct.  And that is the preferred, natural, logical, obvious order:

1) Turn things off.
2) Wait for activity to cease.


That in turn allows the interrupt handler to re-enable DMA again.

Then that would be a problem to solve... Some interrupt handlers will test netif_running() or a driver-specific shutting-down flag, specifically to avoid such behaviors.

        Jeff



-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to