Stolen from netconsole: if the NIC is stopped due to full Tx queue we need to poll for completion interrupts. drivers/net/kgdb_eth.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff -puN drivers/net/kgdb_eth.c~kgdb-handle-stopped-NICs drivers/net/kgdb_eth.c --- 25/drivers/net/kgdb_eth.c~kgdb-handle-stopped-NICs 2003-09-04 20:29:10.000000000 -0700 +++ 25-akpm/drivers/net/kgdb_eth.c 2003-09-04 20:29:10.000000000 -0700 @@ -138,16 +138,23 @@ write_buffer(char *buf, int len) memcpy(eth->h_source, kgdb_localmac, kgdb_netdevice->addr_len); memcpy(eth->h_dest, kgdb_remotemac, kgdb_netdevice->addr_len); +repeat: spin_lock(&kgdb_netdevice->xmit_lock); kgdb_netdevice->xmit_lock_owner = smp_processor_id(); + + if (netif_queue_stopped(kgdb_netdevice)) { + kgdb_netdevice->xmit_lock_owner = -1; + spin_unlock(&kgdb_netdevice->xmit_lock); + + kgdb_netdevice->poll_controller(kgdb_netdevice); + goto repeat; + } + kgdb_netdevice->hard_start_xmit(skb, kgdb_netdevice); kgdb_netdevice->xmit_lock_owner = -1; spin_unlock(&kgdb_netdevice->xmit_lock); - - /* kfree_skb(skb); */ } - /* * In the interrupt state the target machine will not respond to any * arp requests, so handle them here. _