diff options
author | Claudiu Manoil <claudiu.manoil@freescale.com> | 2015-10-23 04:42:00 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-25 21:28:15 -0400 |
commit | 1de65a5ea32de7b335ab505366d45cefadbbdf71 (patch) | |
tree | a0a5dcfe21acfb75abfe3b3d1c2ceb6fdd142bf3 | |
parent | 15bf176db1fb00333af7050c0c699fc7b4e4a960 (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.c | 4 |
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(®s->rstat)); | 3469 | gfar_read(®s->rstat)); |
3472 | } | 3470 | } |