From: Yan Markman <ymark...@marvell.com>

Prevent flood of RX error prints during heavy traffic with weak signal
in link by checking net_ratelimit() before using netdev_err().

Signed-off-by: Yan Markman <ymark...@marvell.com>
[Antoine: small rework, commit message]
Signed-off-by: Antoine Tenart <antoine.ten...@bootlin.com>
---
 drivers/net/ethernet/marvell/mvpp2.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvpp2.c 
b/drivers/net/ethernet/marvell/mvpp2.c
index a9483da18e00..f8ed983bc767 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -6382,21 +6382,23 @@ static void mvpp2_rx_error(struct mvpp2_port *port,
 {
        u32 status = mvpp2_rxdesc_status_get(port, rx_desc);
        size_t sz = mvpp2_rxdesc_size_get(port, rx_desc);
+       char *err_str = NULL;
 
        switch (status & MVPP2_RXD_ERR_CODE_MASK) {
        case MVPP2_RXD_ERR_CRC:
-               netdev_err(port->dev, "bad rx status %08x (crc error), 
size=%zu\n",
-                          status, sz);
+               err_str = "crc";
                break;
        case MVPP2_RXD_ERR_OVERRUN:
-               netdev_err(port->dev, "bad rx status %08x (overrun error), 
size=%zu\n",
-                          status, sz);
+               err_str = "overrun";
                break;
        case MVPP2_RXD_ERR_RESOURCE:
-               netdev_err(port->dev, "bad rx status %08x (resource error), 
size=%zu\n",
-                          status, sz);
+               err_str = "resource";
                break;
        }
+       if (err_str && net_ratelimit())
+               netdev_err(port->dev,
+                          "bad rx status %08x (%s error), size=%zu\n",
+                          status, err_str, sz);
 }
 
 /* Handle RX checksum offload */
-- 
2.17.0

Reply via email to