Commit c242e92c authored by Kamal Heib's avatar Kamal Heib Committed by Leon Romanovsky
Browse files

RDMA/bng_re: Fix silent failure in HWRM version query



If the firmware version query fails, the driver currently ignores the
error and continues initializing. This leaves the device in a bad state.

Fix this by making bng_re_query_hwrm_version() return the error code and
update the driver to check for this error and stop the setup process
safely if it happens.

Fixes: 74506577 ("RDMA/bng_re: Register and get the resources from bnge driver")
Signed-off-by: default avatarKamal Heib <kheib@redhat.com>
Link: https://patch.msgid.link/20260303043645.425724-1-kheib@redhat.com


Reviewed-by: default avatarSiva Reddy Kallam <siva.kallam@broadcom.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent a08aaf39
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@ static int bng_re_stats_ctx_alloc(struct bng_re_dev *rdev)
	return rc;
}

static void bng_re_query_hwrm_version(struct bng_re_dev *rdev)
static int bng_re_query_hwrm_version(struct bng_re_dev *rdev)
{
	struct bnge_auxr_dev *aux_dev = rdev->aux_dev;
	struct hwrm_ver_get_output ver_get_resp = {};
@@ -230,7 +230,7 @@ static void bng_re_query_hwrm_version(struct bng_re_dev *rdev)
	if (rc) {
		ibdev_err(&rdev->ibdev, "Failed to query HW version, rc = 0x%x",
			  rc);
		return;
		return rc;
	}

	cctx = rdev->chip_ctx;
@@ -244,6 +244,8 @@ static void bng_re_query_hwrm_version(struct bng_re_dev *rdev)

	if (!cctx->hwrm_cmd_max_timeout)
		cctx->hwrm_cmd_max_timeout = BNG_ROCE_FW_MAX_TIMEOUT;

	return 0;
}

static void bng_re_dev_uninit(struct bng_re_dev *rdev)
@@ -306,13 +308,15 @@ static int bng_re_dev_init(struct bng_re_dev *rdev)
		goto msix_ctx_fail;
	}

	bng_re_query_hwrm_version(rdev);
	rc = bng_re_query_hwrm_version(rdev);
	if (rc)
		goto destroy_chip_ctx;

	rc = bng_re_alloc_fw_channel(&rdev->bng_res, &rdev->rcfw);
	if (rc) {
		ibdev_err(&rdev->ibdev,
			  "Failed to allocate RCFW Channel: %#x\n", rc);
		goto alloc_fw_chl_fail;
		goto destroy_chip_ctx;
	}

	/* Allocate nq record memory */
@@ -391,7 +395,7 @@ static int bng_re_dev_init(struct bng_re_dev *rdev)
	kfree(rdev->nqr);
nq_alloc_fail:
	bng_re_free_rcfw_channel(&rdev->rcfw);
alloc_fw_chl_fail:
destroy_chip_ctx:
	bng_re_destroy_chip_ctx(rdev);
msix_ctx_fail:
	bnge_unregister_dev(rdev->aux_dev);