On Thu, Aug 03, 2006 at 05:09:57PM -0700, Michael Chan wrote:
> 
> tg3_start_xmit()
> 
>       if (tx_ring_empty)
>                               <-  tg3_tx()
>               netif_stop_queue()

Good point.  I missed that.  However, this only goes to show that
even the current code (e1000 that is, I haven't checked tg3) is
also unsafe.

Why? Because the tx_lock is only taken in e1000_clean_tx_irq if
the queue is stopped.  As you can see in your diagram above, the
queue could well be awake at the point where e1000_clean_tx_irq
runs.

So we need to fix e1000 anyway.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[EMAIL PROTECTED]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
-
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