Commit 3d2e5d12 authored by Siva Reddy Kallam's avatar Siva Reddy Kallam Committed by Leon Romanovsky
Browse files

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: 4f830cd8 ("RDMA/bng_re: Add infrastructure for enabling Firmware channel")
Reported-by: default avatarSimon Horman <horms@kernel.org>
Reported-by: default avatarkernel test robot <lkp@intel.com>
Reported-by: default avatarDan Carpenter <error27@gmail.com>
Closes: https://lore.kernel.org/r/202601010413.sWadrQel-lkp@intel.com/


Signed-off-by: default avatarSiva Reddy Kallam <siva.kallam@broadcom.com>
Link: https://patch.msgid.link/20260218091246.1764808-3-siva.kallam@broadcom.com


Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
parent 7a23af41
Loading
Loading
Loading
Loading
+15 −14
Original line number Diff line number Diff line
@@ -285,7 +285,7 @@ static int bng_re_dev_init(struct bng_re_dev *rdev)
	if (rc) {
		ibdev_err(&rdev->ibdev,
				"Failed to register with netedev: %#x\n", rc);
		return -EINVAL;
		goto reg_netdev_fail;
	}

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

	rc = bng_re_setup_chip_ctx(rdev);
	if (rc) {
		bnge_unregister_dev(rdev->aux_dev);
		clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags);
		ibdev_err(&rdev->ibdev, "Failed to get chip context\n");
		return -EINVAL;
		goto msix_ctx_fail;
	}

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

	/* Allocate nq record memory */
	rdev->nqr = kzalloc_obj(*rdev->nqr);
	if (!rdev->nqr) {
		bng_re_destroy_chip_ctx(rdev);
		bnge_unregister_dev(rdev->aux_dev);
		clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags);
		return -ENOMEM;
		rc = -ENOMEM;
		goto nq_alloc_fail;
	}

	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)
free_ring:
	bng_re_net_ring_free(rdev, rdev->rcfw.creq.ring_id, type);
free_rcfw:
	kfree(rdev->nqr);
nq_alloc_fail:
	bng_re_free_rcfw_channel(&rdev->rcfw);
fail:
	bng_re_dev_uninit(rdev);
alloc_fw_chl_fail:
	bng_re_destroy_chip_ctx(rdev);
msix_ctx_fail:
	bnge_unregister_dev(rdev->aux_dev);
	clear_bit(BNG_RE_FLAG_NETDEV_REGISTERED, &rdev->flags);
reg_netdev_fail:
	return rc;
}