From 77dac783f113dcc4576efca6f4391d7324c0b1fc Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sun, 18 Oct 2026 16:16:29 -0700 Subject: [PATCH] net: bgmac: rate limit RX error messages When the RX ring is full the RX FIFO overflows. With RX overflow continue enabled, the DMA engine then writes one frame with a bogus length (always 0x45c2 on a BCM4716), which the driver drops with "Found oversized packet at slot %d, DMA issue!". Under sustained overload this happens on every NAPI poll. On an Asus RT-N16 a 950 Mbit/s UDP stream to the router printed about 1450 such lines in 20 seconds. The messages are printed from NAPI context, so with a serial console the router spends most of its time printing. The frames are already accounted in rx_length_errors and rx_errors. Rate limit both RX error messages. With this change the same flood printed 60 lines while rx_length_errors counted 14297 dropped frames. Signed-off-by: Rosen Penev Reviewed-by: Daniel Machon Link: https://patch.msgid.link/20261018231629.39734-1-rosenp@gmail.com Signed-off-by: Jakub Kicinski --- drivers/net/ethernet/broadcom/bgmac.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c index 1835266fdd09..b3a92ae95de3 100644 --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c @@ -447,16 +447,18 @@ static int bgmac_dma_rx_read(struct bgmac *bgmac, struct bgmac_dma_ring *ring, /* Check for poison and drop or pass the packet */ if (len == 0xdead && flags == 0xbeef) { - netdev_err(bgmac->net_dev, "Found poisoned packet at slot %d, DMA issue!\n", - ring->start); + if (net_ratelimit()) + netdev_err(bgmac->net_dev, "Found poisoned packet at slot %d, DMA issue!\n", + ring->start); put_page(virt_to_head_page(buf)); bgmac->net_dev->stats.rx_errors++; break; } if (len > BGMAC_RX_ALLOC_SIZE) { - netdev_err(bgmac->net_dev, "Found oversized packet at slot %d, DMA issue!\n", - ring->start); + if (net_ratelimit()) + netdev_err(bgmac->net_dev, "Found oversized packet at slot %d, DMA issue!\n", + ring->start); put_page(virt_to_head_page(buf)); bgmac->net_dev->stats.rx_length_errors++; bgmac->net_dev->stats.rx_errors++;