Skip to content

Commit 3d2e5d1

Browse files
siva-kallamrleon
authored andcommitted
RDMA/bng_re: Unwind bng_re_dev_init properly
Fix below smatch warning: drivers/infiniband/hw/bng_re/bng_dev.c:270 bng_re_dev_init() warn: missing unwind goto? Current bng_re_dev_init function is not having clear unwinding code. So, added proper unwinding with ladder. Fixes: 4f830cd ("RDMA/bng_re: Add infrastructure for enabling Firmware channel") Reported-by: Simon Horman <horms@kernel.org> Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <error27@gmail.com> Closes: https://lore.kernel.org/r/202601010413.sWadrQel-lkp@intel.com/ Signed-off-by: Siva Reddy Kallam <siva.kallam@broadcom.com> Link: https://patch.msgid.link/20260218091246.1764808-3-siva.kallam@broadcom.com Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
1 parent 7a23af4 commit 3d2e5d1

1 file changed

Lines changed: 15 additions & 14 deletions

File tree

drivers/infiniband/hw/bng_re/bng_dev.c

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ static int bng_re_dev_init(struct bng_re_dev *rdev)
285285
if (rc) {
286286
ibdev_err(&rdev->ibdev,
287287
"Failed to register with netedev: %#x\n", rc);
288-
return -EINVAL;
288+
goto reg_netdev_fail;
289289
}
290290

291291
set_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags);
@@ -294,19 +294,16 @@ static int bng_re_dev_init(struct bng_re_dev *rdev)
294294
ibdev_err(&rdev->ibdev,
295295
"RoCE requires minimum 2 MSI-X vectors, but only %d reserved\n",
296296
rdev->aux_dev->auxr_info->msix_requested);
297-
bnge_unregister_dev(rdev->aux_dev);
298-
clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags);
299-
return -EINVAL;
297+
rc = -EINVAL;
298+
goto msix_ctx_fail;
300299
}
301300
ibdev_dbg(&rdev->ibdev, "Got %d MSI-X vectors\n",
302301
rdev->aux_dev->auxr_info->msix_requested);
303302

304303
rc = bng_re_setup_chip_ctx(rdev);
305304
if (rc) {
306-
bnge_unregister_dev(rdev->aux_dev);
307-
clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags);
308305
ibdev_err(&rdev->ibdev, "Failed to get chip context\n");
309-
return -EINVAL;
306+
goto msix_ctx_fail;
310307
}
311308

312309
bng_re_query_hwrm_version(rdev);
@@ -315,16 +312,14 @@ static int bng_re_dev_init(struct bng_re_dev *rdev)
315312
if (rc) {
316313
ibdev_err(&rdev->ibdev,
317314
"Failed to allocate RCFW Channel: %#x\n", rc);
318-
goto fail;
315+
goto alloc_fw_chl_fail;
319316
}
320317

321318
/* Allocate nq record memory */
322319
rdev->nqr = kzalloc_obj(*rdev->nqr);
323320
if (!rdev->nqr) {
324-
bng_re_destroy_chip_ctx(rdev);
325-
bnge_unregister_dev(rdev->aux_dev);
326-
clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags);
327-
return -ENOMEM;
321+
rc = -ENOMEM;
322+
goto nq_alloc_fail;
328323
}
329324

330325
rdev->nqr->num_msix = rdev->aux_dev->auxr_info->msix_requested;
@@ -393,9 +388,15 @@ static int bng_re_dev_init(struct bng_re_dev *rdev)
393388
free_ring:
394389
bng_re_net_ring_free(rdev, rdev->rcfw.creq.ring_id, type);
395390
free_rcfw:
391+
kfree(rdev->nqr);
392+
nq_alloc_fail:
396393
bng_re_free_rcfw_channel(&rdev->rcfw);
397-
fail:
398-
bng_re_dev_uninit(rdev);
394+
alloc_fw_chl_fail:
395+
bng_re_destroy_chip_ctx(rdev);
396+
msix_ctx_fail:
397+
bnge_unregister_dev(rdev->aux_dev);
398+
clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags);
399+
reg_netdev_fail:
399400
return rc;
400401
}
401402

0 commit comments

Comments
 (0)