From: Adam Nielsen 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 @@ -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) { _