Messages in this thread Patch in this message | | | Subject | Re: [bug?] r8169: hangs under heavy load | From | Eric Dumazet <> | Date | Fri, 25 Nov 2011 22:05:03 +0100 |
| |
Le vendredi 25 novembre 2011 à 14:54 -0600, Jonathan Nieder a écrit : > Eric Dumazet wrote: > > > rtl8169_rx_interrupt(..., budget) can return budget + 1 sometimes > > because of : > > > > /* Work around for AMD plateform. */ > > if ((desc->opts2 & cpu_to_le32(0xfffe000)) && > > (tp->mac_version == RTL_GIGA_MAC_VER_05)) { > > desc->opts2 = 0; > > cur_rx++; > > } > > > > Sorry, I wont patch this today, its black Friday, and David said to > > patch submitters : > > > > "stick to turkey and wine you're better at it" > > :) Sensible enough. Thanks for the quick response!
;)
You could try this non official patch, if you are in a hurry ;)
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 6f06aa1..b8a537f 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -5710,6 +5710,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev, { unsigned int cur_rx, rx_left; unsigned int count; + unsigned int workaround = 0; cur_rx = tp->cur_rx; rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx; @@ -5780,6 +5781,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev, (tp->mac_version == RTL_GIGA_MAC_VER_05)) { desc->opts2 = 0; cur_rx++; + workaround++; } } @@ -5788,7 +5790,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev, tp->dirty_rx += count; - return count; + return count - workaround; } static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |