On Tue, Jun 13, 2006 at 10:44:12PM -0600, 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 */ >
I think the correct sequence would be: reset tulip interrupt mask flush posted write synchronize irq /* make sure we got 'em all */ tulip_stop_rxtx /* turn off dma */ free irq /* bye bye */ The synchronize irq guarantees we shouldn't see another irq generated by the card because it was held up somewhere. Cheers, Kyle M. - 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