Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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: 4f830cd8d7fe ("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>

authored by

Siva Reddy Kallam and committed by
Leon Romanovsky
3d2e5d12 7a23af41

+15 -14
+15 -14
drivers/infiniband/hw/bng_re/bng_dev.c
··· 285 285 if (rc) { 286 286 ibdev_err(&rdev->ibdev, 287 287 "Failed to register with netedev: %#x\n", rc); 288 - return -EINVAL; 288 + goto reg_netdev_fail; 289 289 } 290 290 291 291 set_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags); ··· 294 294 ibdev_err(&rdev->ibdev, 295 295 "RoCE requires minimum 2 MSI-X vectors, but only %d reserved\n", 296 296 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; 300 299 } 301 300 ibdev_dbg(&rdev->ibdev, "Got %d MSI-X vectors\n", 302 301 rdev->aux_dev->auxr_info->msix_requested); 303 302 304 303 rc = bng_re_setup_chip_ctx(rdev); 305 304 if (rc) { 306 - bnge_unregister_dev(rdev->aux_dev); 307 - clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags); 308 305 ibdev_err(&rdev->ibdev, "Failed to get chip context\n"); 309 - return -EINVAL; 306 + goto msix_ctx_fail; 310 307 } 311 308 312 309 bng_re_query_hwrm_version(rdev); ··· 312 315 if (rc) { 313 316 ibdev_err(&rdev->ibdev, 314 317 "Failed to allocate RCFW Channel: %#x\n", rc); 315 - goto fail; 318 + goto alloc_fw_chl_fail; 316 319 } 317 320 318 321 /* Allocate nq record memory */ 319 322 rdev->nqr = kzalloc_obj(*rdev->nqr); 320 323 if (!rdev->nqr) { 321 - bng_re_destroy_chip_ctx(rdev); 322 - bnge_unregister_dev(rdev->aux_dev); 323 - clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags); 324 - return -ENOMEM; 324 + rc = -ENOMEM; 325 + goto nq_alloc_fail; 325 326 } 326 327 327 328 rdev->nqr->num_msix = rdev->aux_dev->auxr_info->msix_requested; ··· 388 393 free_ring: 389 394 bng_re_net_ring_free(rdev, rdev->rcfw.creq.ring_id, type); 390 395 free_rcfw: 396 + kfree(rdev->nqr); 397 + nq_alloc_fail: 391 398 bng_re_free_rcfw_channel(&rdev->rcfw); 392 - fail: 393 - bng_re_dev_uninit(rdev); 399 + alloc_fw_chl_fail: 400 + bng_re_destroy_chip_ctx(rdev); 401 + msix_ctx_fail: 402 + bnge_unregister_dev(rdev->aux_dev); 403 + clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags); 404 + reg_netdev_fail: 394 405 return rc; 395 406 } 396 407