Re: [PATCH net 4/8] net: bcmgenet: clean up RX NAPI on bcmgenet_init_rx_queues failure
Nicolai Buchwitz <[email protected]>
| Newsgroups | org.kernel.vger.linux-kernel,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
Hi Florian
On 18.9.2026 02:07, Florian Fainelli wrote:
> 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 <[email protected]>
> 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.c
> b/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