Hello Praveen Madhavan,
The patch 216ce69c7ff5: "csiostor:T5 Firmware fix and cleanup." from
Jan 27, 2015, leads to the following static checker warning:
drivers/scsi/csiostor/csio_hw.c:2006 csio_hw_use_fwconfig()
warn: was negative '-ENOENT' intended?
drivers/scsi/csiostor/csio_hw.c:2433 csio_hw_configure()
warn: 'rv' is never (-2)
drivers/scsi/csiostor/csio_hw.c
1994 if (csio_mb_issue(hw, mbp)) {
1995 rv = -EINVAL;
1996 goto bye;
1997 }
1998
1999 rv = csio_mb_fw_retval(mbp);
^^^^^^^^^^^^^^^^^^^^^^^^^^^
The first warning is a false positive because for some reason Smatch
thinks that csio_mb_fw_retval() always returns zero. But actually it
returns enum fw_retval.
2000 /* If the CAPS_CONFIG failed with an ENOENT (for a Firmware
^^^^^^
So this should be FW_ENOENT.
2001 * Configuration File in FLASH), our last gasp effort is to
use the
2002 * Firmware Configuration File which is embedded in the
2003 * firmware. A very few early versions of the firmware didn't
2004 * have one embedded but we can ignore those.
2005 */
2006 if (rv == ENOENT) {
^^^^^^^^^^^^
And this as well. It doesn't affect runtime because ENOENT AND FW_ENOENT
are both 2.
2007 CSIO_INIT_MBP(mbp, caps_cmd, CSIO_MB_DEFAULT_TMO, hw,
NULL, 1);
2008 caps_cmd->op_to_write =
htonl(FW_CMD_OP_V(FW_CAPS_CONFIG_CMD) |
2009 FW_CMD_REQUEST_F |
2010 FW_CMD_READ_F);
2011 caps_cmd->cfvalid_to_len16 = htonl(FW_LEN16(*caps_cmd));
2012
2013 if (csio_mb_issue(hw, mbp)) {
2014 rv = -EINVAL;
2015 goto bye;
2016 }
2017
2018 rv = csio_mb_fw_retval(mbp);
^^^^^^^^^^^^^^^^^^^^^^^^^^^
2019 config_name = "Firmware Default";
2020 }
2021 if (rv != FW_SUCCESS)
^^^^^^^^^^^^^^^^
But then this function seems to return a mix of negative kernel error
codes and positive FW_ error codes. There is a static checker warning
in the caller because we're checking for -ENOENT and Smatch thinks that
isn't possible. Perhaps we should be checking for positive FW_ENOENT?
It's not super harmful because it only affects which warning is printed.
2022 goto bye;
2023
regards,
dan carpenter