]> xenbits.xensource.com Git - people/aperard/linux.git/commitdiff
net: stmmac: avoid rx queue overrun
authorBaruch Siach <baruch@tkos.co.il>
Mon, 13 Nov 2023 17:42:50 +0000 (19:42 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 15 Nov 2023 03:48:03 +0000 (19:48 -0800)
dma_rx_size can be set as low as 64. Rx budget might be higher than
that. Make sure to not overrun allocated rx buffers when budget is
larger.

Leave one descriptor unused to avoid wrap around of 'dirty_rx' vs
'cur_rx'.

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
Fixes: 47dd7a540b8a ("net: add support for STMicroelectronics Ethernet controllers.")
Link: https://lore.kernel.org/r/d95413e44c97d4692e72cec13a75f894abeb6998.1699897370.git.baruch@tkos.co.il
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index f28838c8cdb332555a5308feb359f081e5d1c7ec..2afb2bd25977a2265d998fb2203bbe3a70a9d3f5 100644 (file)
@@ -5293,6 +5293,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
 
        dma_dir = page_pool_get_dma_dir(rx_q->page_pool);
        buf_sz = DIV_ROUND_UP(priv->dma_conf.dma_buf_sz, PAGE_SIZE) * PAGE_SIZE;
+       limit = min(priv->dma_conf.dma_rx_size - 1, (unsigned int)limit);
 
        if (netif_msg_rx_status(priv)) {
                void *rx_head;