diff options
author | Kalesh AP <kalesh.purayil@emulex.com> | 2014-07-17 06:50:23 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-07-17 19:38:14 -0400 |
commit | 0532d4e36678d626b41528c00fefe3d6e04130b3 (patch) | |
tree | a534555f9528798342a7889883d64b625eb35149 | |
parent | 6b5686891c9858aea914c1d1c965d6bbc8a0521d (diff) |
be2net: fix return status of some ethtool methods
ethtool expects a -ve status value to be returned when a driver method
encounters an error. The driver was directly passing the
error status returned by FW (a positive value) to ethtool.
This patch fixes this by returning -EIO status in cases where FW returns
an error.
Signed-off-by: Kalesh AP <kalesh.purayil@emulex.com>
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_ethtool.c | 12 |
2 files changed, 9 insertions, 5 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h index d3d871b28cad..3e639e86e111 100644 --- a/drivers/net/ethernet/emulex/benet/be.h +++ b/drivers/net/ethernet/emulex/benet/be.h | |||
@@ -672,6 +672,8 @@ static inline void swap_dws(void *wrb, int len) | |||
672 | #endif /* __BIG_ENDIAN */ | 672 | #endif /* __BIG_ENDIAN */ |
673 | } | 673 | } |
674 | 674 | ||
675 | #define be_cmd_status(status) (status > 0 ? -EIO : status) | ||
676 | |||
675 | static inline u8 is_tcp_pkt(struct sk_buff *skb) | 677 | static inline u8 is_tcp_pkt(struct sk_buff *skb) |
676 | { | 678 | { |
677 | u8 val = 0; | 679 | u8 val = 0; |
diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c index e2da4d20dd3d..25f516d6eb9e 100644 --- a/drivers/net/ethernet/emulex/benet/be_ethtool.c +++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c | |||
@@ -643,7 +643,7 @@ be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd) | |||
643 | if (status) | 643 | if (status) |
644 | dev_warn(&adapter->pdev->dev, "Pause param set failed.\n"); | 644 | dev_warn(&adapter->pdev->dev, "Pause param set failed.\n"); |
645 | 645 | ||
646 | return status; | 646 | return be_cmd_status(status); |
647 | } | 647 | } |
648 | 648 | ||
649 | static int be_set_phys_id(struct net_device *netdev, | 649 | static int be_set_phys_id(struct net_device *netdev, |
@@ -762,7 +762,7 @@ static int be_test_ddr_dma(struct be_adapter *adapter) | |||
762 | err: | 762 | err: |
763 | dma_free_coherent(&adapter->pdev->dev, ddrdma_cmd.size, ddrdma_cmd.va, | 763 | dma_free_coherent(&adapter->pdev->dev, ddrdma_cmd.size, ddrdma_cmd.va, |
764 | ddrdma_cmd.dma); | 764 | ddrdma_cmd.dma); |
765 | return ret; | 765 | return be_cmd_status(ret); |
766 | } | 766 | } |
767 | 767 | ||
768 | static u64 be_loopback_test(struct be_adapter *adapter, u8 loopback_type, | 768 | static u64 be_loopback_test(struct be_adapter *adapter, u8 loopback_type, |
@@ -885,7 +885,7 @@ static int be_read_eeprom(struct net_device *netdev, | |||
885 | dma_free_coherent(&adapter->pdev->dev, eeprom_cmd.size, eeprom_cmd.va, | 885 | dma_free_coherent(&adapter->pdev->dev, eeprom_cmd.size, eeprom_cmd.va, |
886 | eeprom_cmd.dma); | 886 | eeprom_cmd.dma); |
887 | 887 | ||
888 | return status; | 888 | return be_cmd_status(status); |
889 | } | 889 | } |
890 | 890 | ||
891 | static u32 be_get_msg_level(struct net_device *netdev) | 891 | static u32 be_get_msg_level(struct net_device *netdev) |
@@ -1042,7 +1042,7 @@ static int be_set_rss_hash_opts(struct be_adapter *adapter, | |||
1042 | if (!status) | 1042 | if (!status) |
1043 | adapter->rss_info.rss_flags = rss_flags; | 1043 | adapter->rss_info.rss_flags = rss_flags; |
1044 | 1044 | ||
1045 | return status; | 1045 | return be_cmd_status(status); |
1046 | } | 1046 | } |
1047 | 1047 | ||
1048 | static int be_set_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd) | 1048 | static int be_set_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd) |
@@ -1080,6 +1080,7 @@ static int be_set_channels(struct net_device *netdev, | |||
1080 | struct ethtool_channels *ch) | 1080 | struct ethtool_channels *ch) |
1081 | { | 1081 | { |
1082 | struct be_adapter *adapter = netdev_priv(netdev); | 1082 | struct be_adapter *adapter = netdev_priv(netdev); |
1083 | int status; | ||
1083 | 1084 | ||
1084 | if (ch->rx_count || ch->tx_count || ch->other_count || | 1085 | if (ch->rx_count || ch->tx_count || ch->other_count || |
1085 | !ch->combined_count || ch->combined_count > be_max_qs(adapter)) | 1086 | !ch->combined_count || ch->combined_count > be_max_qs(adapter)) |
@@ -1087,7 +1088,8 @@ static int be_set_channels(struct net_device *netdev, | |||
1087 | 1088 | ||
1088 | adapter->cfg_num_qs = ch->combined_count; | 1089 | adapter->cfg_num_qs = ch->combined_count; |
1089 | 1090 | ||
1090 | return be_update_queues(adapter); | 1091 | status = be_update_queues(adapter); |
1092 | return be_cmd_status(status); | ||
1091 | } | 1093 | } |
1092 | 1094 | ||
1093 | static u32 be_get_rxfh_indir_size(struct net_device *netdev) | 1095 | static u32 be_get_rxfh_indir_size(struct net_device *netdev) |