mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
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: 745065770c ("RDMA/bng_re: Register and get the resources from bnge driver")
Signed-off-by: Kamal Heib <kheib@redhat.com>
Link: https://patch.msgid.link/20260303043645.425724-1-kheib@redhat.com
Reviewed-by: Siva Reddy Kallam <siva.kallam@broadcom.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
committed by
Leon Romanovsky
parent
a08aaf3968
commit
c242e92c9d
@@ -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 @@ free_rcfw:
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user