]> www.infradead.org Git - users/hch/misc.git/commitdiff
bng_en: make bnge_alloc_ring() self-unwind on failure
authorBhargava Marreddy <bhargava.marreddy@broadcom.com>
Fri, 19 Sep 2025 17:47:32 +0000 (23:17 +0530)
committerJakub Kicinski <kuba@kernel.org>
Tue, 23 Sep 2025 00:51:27 +0000 (17:51 -0700)
Ensure bnge_alloc_ring() frees any intermediate allocations
when it fails. This enables later patches to rely on this
self-unwinding behavior.

Signed-off-by: Bhargava Marreddy <bhargava.marreddy@broadcom.com>
Reviewed-by: Vikas Gupta <vikas.gupta@broadcom.com>
Reviewed-by: Rajashekar Hudumula <rajashekar.hudumula@broadcom.com>
Link: https://patch.msgid.link/20250919174742.24969-2-bhargava.marreddy@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnge/bnge_rmem.c

index 52ada65943a02c2bba3c271708d0d1d36ab1254f..98b4e9f55bcbb0d212d2303bbca855a18cd558b1 100644 (file)
@@ -95,7 +95,7 @@ int bnge_alloc_ring(struct bnge_dev *bd, struct bnge_ring_mem_info *rmem)
                                                     &rmem->dma_arr[i],
                                                     GFP_KERNEL);
                if (!rmem->pg_arr[i])
-                       return -ENOMEM;
+                       goto err_free_ring;
 
                if (rmem->ctx_mem)
                        bnge_init_ctx_mem(rmem->ctx_mem, rmem->pg_arr[i],
@@ -116,10 +116,13 @@ int bnge_alloc_ring(struct bnge_dev *bd, struct bnge_ring_mem_info *rmem)
        if (rmem->vmem_size) {
                *rmem->vmem = vzalloc(rmem->vmem_size);
                if (!(*rmem->vmem))
-                       return -ENOMEM;
+                       goto err_free_ring;
        }
-
        return 0;
+
+err_free_ring:
+       bnge_free_ring(bd, rmem);
+       return -ENOMEM;
 }
 
 static int bnge_alloc_ctx_one_lvl(struct bnge_dev *bd,