[PATCH] scsi: csiostor: remove 'state' parameter from csio_do_hello()
From: Nikolay Kulikov
Date: Mon Aug 24 2026 - 23:30:27 EST
At the single call site, the 'state' parameter holds the address of the
'hw->fw_state' field. However, the csio_do_hello() also receives a
pointer to 'hw', so use that field directly to avoid unnecessary pointer
check.
Detected by Smatch:
drivers/scsi/csiostor/csio_hw.c:1007 csio_do_hello()
warn: variable dereferenced before check 'state' (see line 954)
Signed-off-by: Nikolay Kulikov <nikolayof23@xxxxxxxxx>
---
drivers/scsi/csiostor/csio_hw.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/drivers/scsi/csiostor/csio_hw.c b/drivers/scsi/csiostor/csio_hw.c
index df9f81f29950..ea3775161d7b 100644
--- a/drivers/scsi/csiostor/csio_hw.c
+++ b/drivers/scsi/csiostor/csio_hw.c
@@ -908,12 +908,11 @@ csio_hw_dev_ready(struct csio_hw *hw)
/*
* csio_do_hello - Perform the HELLO FW Mailbox command and process response.
* @hw: HW module
- * @state: Device state
*
* FW_HELLO_CMD has to be polled for completion.
*/
static int
-csio_do_hello(struct csio_hw *hw, enum csio_dev_state *state)
+csio_do_hello(struct csio_hw *hw)
{
struct csio_mb *mbp;
int rv = 0;
@@ -941,7 +940,7 @@ csio_do_hello(struct csio_hw *hw, enum csio_dev_state *state)
goto out_free_mb;
}
- csio_mb_process_hello_rsp(hw, mbp, &retval, state, &mpfn);
+ csio_mb_process_hello_rsp(hw, mbp, &retval, &hw->fw_state, &mpfn);
if (retval != FW_SUCCESS) {
csio_err(hw, "HELLO cmd failed with ret: %d\n", retval);
rv = -EINVAL;
@@ -951,7 +950,7 @@ csio_do_hello(struct csio_hw *hw, enum csio_dev_state *state)
/* Firmware has designated us to be master */
if (hw->pfn == mpfn) {
hw->flags |= CSIO_HWF_MASTER;
- } else if (*state == CSIO_DEV_STATE_UNINIT) {
+ } else if (hw->fw_state == CSIO_DEV_STATE_UNINIT) {
/*
* If we're not the Master PF then we need to wait around for
* the Master PF Driver to finish setting up the adapter.
@@ -1004,12 +1003,11 @@ csio_do_hello(struct csio_hw *hw, enum csio_dev_state *state)
* We either have an Error or Initialized condition
* report errors preferentially.
*/
- if (state) {
- if (pcie_fw & PCIE_FW_ERR_F) {
- *state = CSIO_DEV_STATE_ERR;
- rv = -ETIMEDOUT;
- } else if (pcie_fw & PCIE_FW_INIT_F)
- *state = CSIO_DEV_STATE_INIT;
+ if (pcie_fw & PCIE_FW_ERR_F) {
+ hw->fw_state = CSIO_DEV_STATE_ERR;
+ rv = -ETIMEDOUT;
+ } else if (pcie_fw & PCIE_FW_INIT_F) {
+ hw->fw_state = CSIO_DEV_STATE_INIT;
}
/*
@@ -1025,7 +1023,7 @@ csio_do_hello(struct csio_hw *hw, enum csio_dev_state *state)
hw->flags &= ~CSIO_HWF_MASTER;
}
- switch (*state) {
+ switch (hw->fw_state) {
case CSIO_DEV_STATE_UNINIT:
strcpy(state_str, "Initializing");
break;
@@ -2511,7 +2509,7 @@ csio_hw_configure(struct csio_hw *hw)
csio_hw_print_fw_version(hw, "Firmware revision");
- rv = csio_do_hello(hw, &hw->fw_state);
+ rv = csio_do_hello(hw);
if (rv != 0) {
CSIO_INC_STATS(hw, n_err_fatal);
csio_post_event(&hw->sm, CSIO_HWE_FATAL);
---
base-commit: 12e67eb89eb2b9516685c744d3f7de0a2d1bd701
change-id: 20260824-scsi_csio_state-8cc1d80fcf89
Best regards,
--
Nikolay Kulikov <nikolayof23@xxxxxxxxx>