From: Adam Nielsen <a.nielsen@optushome.com.au>

This fixes a particularly annoying bug in the Realtek 8169 gigabit ethernet
driver.  Due to a logic error, there is a loop in an interrupt handler that
often goes infinite, thus locking up the entire computer.


---

 25-akpm/drivers/net/r8169.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletion(-)

diff -puN drivers/net/r8169.c~rtl8169_tx_interrupt-fix drivers/net/r8169.c
--- 25/drivers/net/r8169.c~rtl8169_tx_interrupt-fix	2004-04-02 21:28:44.550759112 -0800
+++ 25-akpm/drivers/net/r8169.c	2004-04-02 21:28:44.555758352 -0800
@@ -33,6 +33,12 @@ VERSION 1.2	<2002/11/30>
 	- Copy mc_filter setup code from 8139cp
 	  (includes an optimization, and avoids set_bit use)
 
+VERSION 1.2a <2004/03/31> Adam Nielsen (a.nielsen@optushome.com.au)
+
+	"else break;" added to the if-statement in rtl8169_tx_interrupt() to prevent
+	an infinite loop and the resulting kernel lockup when the interrupt is called
+	with a dirty buffer (perhaps when there's nothing to transmit?)
+
 */
 
 #include <linux/module.h>
@@ -1366,7 +1372,7 @@ rtl8169_tx_interrupt(struct net_device *
 			tp->Tx_skbuff[entry] = NULL;
 			dirty_tx++;
 			tx_left--;
-		}
+		} else break;
 	}
 
 	if (tp->dirty_tx != dirty_tx) {

_