aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilly Tarreau <w@1wt.eu>2009-07-19 23:09:13 +0200
committerWilly Tarreau <w@1wt.eu>2009-07-19 23:15:10 +0200
commitf59f05521f88820e7198170bb3e95bb1cfaa1dca (patch)
tree6bfc37a142022235d842c821b354fb905d838f35
parent7bfbdfa937b3b07e0980fd4bcd070bc8ff1cf215 (diff)
downloadlinux-2.4-f59f05521f88820e7198170bb3e95bb1cfaa1dca.tar.gz
r8169: rate-limit the messages displayed in interrupt context
Upon receive error, we may report one message per packet, which is not acceptable. Apply net_ratelimit() to those messages. Signed-off-by: Willy Tarreau <w@1wt.eu>
-rw-r--r--drivers/net/r8169.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index 85ffd3a03a8330..409637a3359dd3 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1519,7 +1519,9 @@ rtl8169_rx_interrupt(struct net_device *dev, struct rtl8169_private *tp,
break;
if (status & RxRES) {
- printk(KERN_INFO "%s: Rx ERROR!!!\n", dev->name);
+ if (net_ratelimit())
+ printk(KERN_INFO "%s: Rx ERROR, status=0x%08x !\n",
+ dev->name, status);
tp->stats.rx_errors++;
if (status & (RxRWT | RxRUNT))
tp->stats.rx_length_errors++;
@@ -1574,7 +1576,7 @@ rtl8169_rx_interrupt(struct net_device *dev, struct rtl8169_private *tp,
delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx);
if (delta > 0)
tp->dirty_rx += delta;
- else if (delta < 0)
+ else if (delta < 0 && net_ratelimit())
printk(KERN_INFO "%s: no Rx buffer allocated\n", dev->name);
/*
@@ -1584,7 +1586,7 @@ rtl8169_rx_interrupt(struct net_device *dev, struct rtl8169_private *tp,
* after refill ?
* - how do others driver handle this condition (Uh oh...).
*/
- if (tp->dirty_rx + NUM_RX_DESC == tp->cur_rx)
+ if (tp->dirty_rx + NUM_RX_DESC == tp->cur_rx && net_ratelimit())
printk(KERN_EMERG "%s: Rx buffers exhausted\n", dev->name);
}
@@ -1632,8 +1634,9 @@ rtl8169_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
} while (boguscnt > 0);
if (boguscnt <= 0) {
- printk(KERN_WARNING "%s: Too much work at interrupt!\n",
- dev->name);
+ if (net_ratelimit())
+ printk(KERN_WARNING "%s: Too much work at interrupt!\n",
+ dev->name);
/* Clear all interrupt sources. */
RTL_W16(IntrStatus, 0xffff);
}