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