On Tue, 17 Aug 2004 10:33:50 -0400 "Tony Battersby" <tonyb@cybernetics.com> wrote: > Sorry, neither patch made a difference for my test case. The problem > does seem to be interrupt-related though. Yep, thanks for testing Tony. My patch is bogus because tg3_reset_hw() enables interrupts properly. I think what might be happening instead is that the timer handling is getting in there and touching the device right after we reset it, which is bad news. Tony, please try this patch instead. ===== drivers/net/tg3.c 1.196 vs edited ===== --- 1.196/drivers/net/tg3.c 2004-08-18 15:50:41 -07:00 +++ edited/drivers/net/tg3.c 2004-08-18 16:02:27 -07:00 @@ -2863,11 +2863,11 @@ tg3_halt(tp); tg3_init_hw(tp); + tg3_netif_start(tp); + spin_unlock(&tp->tx_lock); spin_unlock_irq(&tp->lock); - tg3_netif_start(tp); - if (restart_timer) mod_timer(&tp->timer, jiffies + 1); } @@ -3227,9 +3227,10 @@ tg3_init_hw(tp); + tg3_netif_start(tp); + spin_unlock(&tp->tx_lock); spin_unlock_irq(&tp->lock); - tg3_netif_start(tp); return 0; } @@ -6604,10 +6605,9 @@ tg3_halt(tp); tg3_init_hw(tp); - netif_wake_queue(tp->dev); + tg3_netif_start(tp); spin_unlock(&tp->tx_lock); spin_unlock_irq(&tp->lock); - tg3_netif_start(tp); return 0; } @@ -6642,9 +6642,9 @@ tp->tg3_flags &= ~TG3_FLAG_PAUSE_TX; tg3_halt(tp); tg3_init_hw(tp); + tg3_netif_start(tp); spin_unlock(&tp->tx_lock); spin_unlock_irq(&tp->lock); - tg3_netif_start(tp); return 0; } @@ -8491,11 +8491,11 @@ tp->timer.expires = jiffies + tp->timer_offset; add_timer(&tp->timer); - spin_unlock(&tp->tx_lock); - spin_unlock_irq(&tp->lock); - netif_device_attach(dev); tg3_netif_start(tp); + + spin_unlock(&tp->tx_lock); + spin_unlock_irq(&tp->lock); } return err; @@ -8528,10 +8528,10 @@ tg3_enable_ints(tp); + tg3_netif_start(tp); + spin_unlock(&tp->tx_lock); spin_unlock_irq(&tp->lock); - - tg3_netif_start(tp); return 0; } - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html