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-10-12 23:50:15.000000000 -0700
+++ 25-akpm/drivers/net/kgdb_eth.c	2003-10-12 23:51:07.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.

_