Re: [PATCH net 4/8] net: bcmgenet: clean up RX NAPI on bcmgenet_init_rx_queues failure
From: Nicolai Buchwitz <hidden>
Date: 2026-09-18 10:43:49
Also in:
lkml
Hi Florian On 18.9.2026 02:07, Florian Fainelli wrote:
quoted hunk ↗ jump to hunk
bcmgenet_init_rx_ring() registers a NAPI instance for each RX ring via netif_napi_add(). If bcmgenet_init_rx_queues() fails while initializing subsequent rings, bcmgenet_init_dma() frees the RX buffers and page pools but fails to clean up already registered NAPI instances with bcmgenet_fini_rx_napi(). This leaves stale NAPI structs on the net_device napi_list. Call bcmgenet_fini_rx_napi() in the error handling path of bcmgenet_init_dma() when bcmgenet_init_rx_queues() fails. Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file") Assisted-by: LLM Co-authored-by: Cursor [off-list ref] Change-Id: I45982e0e198a44f3f56b1300f462870462b81108 --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 1 + 1 file changed, 1 insertion(+)diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.cb/drivers/net/ethernet/broadcom/genet/bcmgenet.c index bfb74dca55d6..ef155a170fa6 100644--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c@@ -3167,6 +3167,7 @@ static int bcmgenet_init_dma(struct bcmgenet_priv*priv, bool flush_rx) ret = bcmgenet_init_rx_queues(priv->dev); if (ret) { netdev_err(priv->dev, "failed to initialize Rx queues\n"); + bcmgenet_fini_rx_napi(priv);
napi->dev is still NULL here, bcmgenet_init_rx_ring() only fails before netif_napi_add(). netif_napi_del() does netdev_lock(napi->dev), so this oopses on -ENOMEM at first open. rx_queues is 0 in all hw_params anyway, so there is nothing to clean up. Drop this one?
bcmgenet_free_rx_buffers(priv); bcmgenet_destroy_rx_page_pools(priv); kfree(priv->rx_cbs);
Thanks, Nicolai