aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaudiu Manoil <claudiu.manoil@freescale.com>2015-10-23 04:42:00 -0400
committerDavid S. Miller <davem@davemloft.net>2015-10-25 21:28:15 -0400
commit1de65a5ea32de7b335ab505366d45cefadbbdf71 (patch)
treea0a5dcfe21acfb75abfe3b3d1c2ceb6fdd142bf3
parent15bf176db1fb00333af7050c0c699fc7b4e4a960 (diff)
gianfar: Fix Rx BSY error handling
The Rx BSY error interrupt indicates that a frame was received and discarded due to lack of buffers, so it's a rx ring overflow condition and has nothing to do with with bad rx packets. Use the right counter. BSY conditions happen when the SoC is under performance stress. Doing *more* work in stress situations by trying to schedule NAPI is not a good idea as the stressed system becomes still more stressed. The Rx interrupt is already at work making sure the NAPI is scheduled. So calling gfar_receive() here does not help. This issue was present since day 1. Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/freescale/gianfar.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 939ed8fe6318..ce38d266f931 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -3462,11 +3462,9 @@ static irqreturn_t gfar_error(int irq, void *grp_id)
3462 netif_dbg(priv, tx_err, dev, "Transmit Error\n"); 3462 netif_dbg(priv, tx_err, dev, "Transmit Error\n");
3463 } 3463 }
3464 if (events & IEVENT_BSY) { 3464 if (events & IEVENT_BSY) {
3465 dev->stats.rx_errors++; 3465 dev->stats.rx_over_errors++;
3466 atomic64_inc(&priv->extra_stats.rx_bsy); 3466 atomic64_inc(&priv->extra_stats.rx_bsy);
3467 3467
3468 gfar_receive(irq, grp_id);
3469
3470 netif_dbg(priv, rx_err, dev, "busy error (rstat: %x)\n", 3468 netif_dbg(priv, rx_err, dev, "busy error (rstat: %x)\n",
3471 gfar_read(&regs->rstat)); 3469 gfar_read(&regs->rstat));
3472 } 3470 }