diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2010-04-28 05:27:14 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-04-28 15:44:32 -0400 |
commit | 00bbb4a5344a5f81cf5d48e781e5c0df3e588d17 (patch) | |
tree | ff144f1182235a0194d16904f39861cc923944db /drivers/net/sfc/mcdi.c | |
parent | b17424b0b29f94561e73ab9be34037746b378089 (diff) |
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: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/sfc/mcdi.c')
-rw-r--r-- | drivers/net/sfc/mcdi.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/drivers/net/sfc/mcdi.c b/drivers/net/sfc/mcdi.c index c48669c77414..1344afac4673 100644 --- a/drivers/net/sfc/mcdi.c +++ b/drivers/net/sfc/mcdi.c | |||
@@ -613,7 +613,7 @@ int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build) | |||
613 | } | 613 | } |
614 | 614 | ||
615 | if (outlength < MC_CMD_GET_VERSION_V1_OUT_LEN) { | 615 | if (outlength < MC_CMD_GET_VERSION_V1_OUT_LEN) { |
616 | rc = -EMSGSIZE; | 616 | rc = -EIO; |
617 | goto fail; | 617 | goto fail; |
618 | } | 618 | } |
619 | 619 | ||
@@ -647,8 +647,10 @@ int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, | |||
647 | outbuf, sizeof(outbuf), &outlen); | 647 | outbuf, sizeof(outbuf), &outlen); |
648 | if (rc) | 648 | if (rc) |
649 | goto fail; | 649 | goto fail; |
650 | if (outlen < MC_CMD_DRV_ATTACH_OUT_LEN) | 650 | if (outlen < MC_CMD_DRV_ATTACH_OUT_LEN) { |
651 | rc = -EIO; | ||
651 | goto fail; | 652 | goto fail; |
653 | } | ||
652 | 654 | ||
653 | if (was_attached != NULL) | 655 | if (was_attached != NULL) |
654 | *was_attached = MCDI_DWORD(outbuf, DRV_ATTACH_OUT_OLD_STATE); | 656 | *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 | goto fail; | 678 | goto fail; |
677 | 679 | ||
678 | if (outlen < MC_CMD_GET_BOARD_CFG_OUT_LEN) { | 680 | if (outlen < MC_CMD_GET_BOARD_CFG_OUT_LEN) { |
679 | rc = -EMSGSIZE; | 681 | rc = -EIO; |
680 | goto fail; | 682 | goto fail; |
681 | } | 683 | } |
682 | 684 | ||
@@ -738,8 +740,10 @@ int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out) | |||
738 | outbuf, sizeof(outbuf), &outlen); | 740 | outbuf, sizeof(outbuf), &outlen); |
739 | if (rc) | 741 | if (rc) |
740 | goto fail; | 742 | goto fail; |
741 | if (outlen < MC_CMD_NVRAM_TYPES_OUT_LEN) | 743 | if (outlen < MC_CMD_NVRAM_TYPES_OUT_LEN) { |
744 | rc = -EIO; | ||
742 | goto fail; | 745 | goto fail; |
746 | } | ||
743 | 747 | ||
744 | *nvram_types_out = MCDI_DWORD(outbuf, NVRAM_TYPES_OUT_TYPES); | 748 | *nvram_types_out = MCDI_DWORD(outbuf, NVRAM_TYPES_OUT_TYPES); |
745 | return 0; | 749 | return 0; |
@@ -765,8 +769,10 @@ int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type, | |||
765 | outbuf, sizeof(outbuf), &outlen); | 769 | outbuf, sizeof(outbuf), &outlen); |
766 | if (rc) | 770 | if (rc) |
767 | goto fail; | 771 | goto fail; |
768 | if (outlen < MC_CMD_NVRAM_INFO_OUT_LEN) | 772 | if (outlen < MC_CMD_NVRAM_INFO_OUT_LEN) { |
773 | rc = -EIO; | ||
769 | goto fail; | 774 | goto fail; |
775 | } | ||
770 | 776 | ||
771 | *size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_SIZE); | 777 | *size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_SIZE); |
772 | *erase_size_out = MCDI_DWORD(outbuf, NVRAM_INFO_OUT_ERASESIZE); | 778 | *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 | if (rc) | 974 | if (rc) |
969 | return rc; | 975 | return rc; |
970 | if (outlen < MC_CMD_GET_ASSERTS_OUT_LEN) | 976 | if (outlen < MC_CMD_GET_ASSERTS_OUT_LEN) |
971 | return -EINVAL; | 977 | return -EIO; |
972 | 978 | ||
973 | /* Print out any recorded assertion state */ | 979 | /* Print out any recorded assertion state */ |
974 | flags = MCDI_DWORD(outbuf, GET_ASSERTS_OUT_GLOBAL_FLAGS); | 980 | 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 | goto fail; | 1092 | goto fail; |
1087 | 1093 | ||
1088 | if (outlen < MC_CMD_WOL_FILTER_SET_OUT_LEN) { | 1094 | if (outlen < MC_CMD_WOL_FILTER_SET_OUT_LEN) { |
1089 | rc = -EMSGSIZE; | 1095 | rc = -EIO; |
1090 | goto fail; | 1096 | goto fail; |
1091 | } | 1097 | } |
1092 | 1098 | ||
@@ -1121,7 +1127,7 @@ int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out) | |||
1121 | goto fail; | 1127 | goto fail; |
1122 | 1128 | ||
1123 | if (outlen < MC_CMD_WOL_FILTER_GET_OUT_LEN) { | 1129 | if (outlen < MC_CMD_WOL_FILTER_GET_OUT_LEN) { |
1124 | rc = -EMSGSIZE; | 1130 | rc = -EIO; |
1125 | goto fail; | 1131 | goto fail; |
1126 | } | 1132 | } |
1127 | 1133 | ||