[PATCH] scsi: csiostor: remove 'state' parameter from csio_do_hello()

Nikolay Kulikov posted 1 patch 1 month ago
drivers/scsi/csiostor/csio_hw.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
[PATCH] scsi: csiostor: remove 'state' parameter from csio_do_hello()
Posted by Nikolay Kulikov 1 month ago
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@gmail.com>
---
 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@gmail.com>