Commit 00bbb4a5 authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller

sfc: Consistently report short MCDI responses as EIO

In some cases failing functions were returning 0 which is obviously wrong.
In other cases they were returning inappropriate error codes.
Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b17424b0
...@@ -613,7 +613,7 @@ int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build) ...@@ -613,7 +613,7 @@ int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build)
} }
if (outlength < MC_CMD_GET_VERSION_V1_OUT_LEN) { if (outlength < MC_CMD_GET_VERSION_V1_OUT_LEN) {
rc = -EMSGSIZE; rc = -EIO;
goto fail; goto fail;
} }
...@@ -647,8 +647,10 @@ int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, ...@@ -647,8 +647,10 @@ int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
outbuf, sizeof(outbuf), &outlen); outbuf, sizeof(outbuf), &outlen);
if (rc) if (rc)
goto fail; goto fail;
if (outlen < MC_CMD_DRV_ATTACH_OUT_LEN) if (outlen < MC_CMD_DRV_ATTACH_OUT_LEN) {
rc = -EIO;
goto fail; goto fail;
}
if (was_attached != NULL) if (was_attached != NULL)
*was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE); *was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE);
...@@ -676,7 +678,7 @@ int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, ...@@ -676,7 +678,7 @@ int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address,
goto fail; goto fail;
if (outlen < MC_CMD_GET_BOARD_CFG_OUT_LEN) { if (outlen < MC_CMD_GET_BOARD_CFG_OUT_LEN) {
rc = -EMSGSIZE; rc = -EIO;
goto fail; goto fail;
} }
...@@ -738,8 +740,10 @@ int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out) ...@@ -738,8 +740,10 @@ int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out)
outbuf, sizeof(outbuf), &outlen); outbuf, sizeof(outbuf), &outlen);
if (rc) if (rc)
goto fail; goto fail;
if (outlen < MC_CMD_NVRAM_TYPES_OUT_LEN) if (outlen < MC_CMD_NVRAM_TYPES_OUT_LEN) {
rc = -EIO;
goto fail; goto fail;
}
*nvram_types_out = MCDI_DWORD(outbuf, NVRAM_TYPES_OUT_TYPES); *nvram_types_out = MCDI_DWORD(outbuf, NVRAM_TYPES_OUT_TYPES);
return 0; return 0;
...@@ -765,8 +769,10 @@ int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type, ...@@ -765,8 +769,10 @@ int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type,
outbuf, sizeof(outbuf), &outlen); outbuf, sizeof(outbuf), &outlen);
if (rc) if (rc)
goto fail; goto fail;
if (outlen < MC_CMD_NVRAM_INFO_OUT_LEN) if (outlen < MC_CMD_NVRAM_INFO_OUT_LEN) {
rc = -EIO;
goto fail; goto fail;
}
*size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_SIZE); *size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_SIZE);
*erase_size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_ERASESIZE); *erase_size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_ERASESIZE);
...@@ -968,7 +974,7 @@ static int efx_mcdi_read_assertion(struct efx_nic *efx) ...@@ -968,7 +974,7 @@ static int efx_mcdi_read_assertion(struct efx_nic *efx)
if (rc) if (rc)
return rc; return rc;
if (outlen < MC_CMD_GET_ASSERTS_OUT_LEN) if (outlen < MC_CMD_GET_ASSERTS_OUT_LEN)
return -EINVAL; return -EIO;
/* Print out any recorded assertion state */ /* Print out any recorded assertion state */
flags = MCDI_DWORD(outbuf, GET_ASSERTS_OUT_GLOBAL_FLAGS); flags = MCDI_DWORD(outbuf, GET_ASSERTS_OUT_GLOBAL_FLAGS);
...@@ -1086,7 +1092,7 @@ int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type, ...@@ -1086,7 +1092,7 @@ int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type,
goto fail; goto fail;
if (outlen < MC_CMD_WOL_FILTER_SET_OUT_LEN) { if (outlen < MC_CMD_WOL_FILTER_SET_OUT_LEN) {
rc = -EMSGSIZE; rc = -EIO;
goto fail; goto fail;
} }
...@@ -1121,7 +1127,7 @@ int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out) ...@@ -1121,7 +1127,7 @@ int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out)
goto fail; goto fail;
if (outlen < MC_CMD_WOL_FILTER_GET_OUT_LEN) { if (outlen < MC_CMD_WOL_FILTER_GET_OUT_LEN) {
rc = -EMSGSIZE; rc = -EIO;
goto fail; goto fail;
} }
......
...@@ -48,7 +48,7 @@ efx_mcdi_get_phy_cfg(struct efx_nic *efx, struct efx_mcdi_phy_cfg *cfg) ...@@ -48,7 +48,7 @@ efx_mcdi_get_phy_cfg(struct efx_nic *efx, struct efx_mcdi_phy_cfg *cfg)
goto fail; goto fail;
if (outlen < MC_CMD_GET_PHY_CFG_OUT_LEN) { if (outlen < MC_CMD_GET_PHY_CFG_OUT_LEN) {
rc = -EMSGSIZE; rc = -EIO;
goto fail; goto fail;
} }
...@@ -111,7 +111,7 @@ static int efx_mcdi_loopback_modes(struct efx_nic *efx, u64 *loopback_modes) ...@@ -111,7 +111,7 @@ static int efx_mcdi_loopback_modes(struct efx_nic *efx, u64 *loopback_modes)
goto fail; goto fail;
if (outlen < MC_CMD_GET_LOOPBACK_MODES_OUT_LEN) { if (outlen < MC_CMD_GET_LOOPBACK_MODES_OUT_LEN) {
rc = -EMSGSIZE; rc = -EIO;
goto fail; goto fail;
} }
...@@ -587,7 +587,7 @@ static int efx_mcdi_phy_test_alive(struct efx_nic *efx) ...@@ -587,7 +587,7 @@ static int efx_mcdi_phy_test_alive(struct efx_nic *efx)
return rc; return rc;
if (outlen < MC_CMD_GET_PHY_STATE_OUT_LEN) if (outlen < MC_CMD_GET_PHY_STATE_OUT_LEN)
return -EMSGSIZE; return -EIO;
if (MCDI_DWORD(outbuf, GET_PHY_STATE_STATE) != MC_CMD_PHY_STATE_OK) if (MCDI_DWORD(outbuf, GET_PHY_STATE_STATE) != MC_CMD_PHY_STATE_OK)
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment