summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCatherine Sullivan <catherine.sullivan@intel.com>2014-07-09 11:46:18 +0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-07-24 15:58:53 +0400
commit7d62dac6312efa7824eb59d8161aee8fef1c166c (patch)
treeecb570ae4df58e184b03765dc1ca1df388853899
parent7aa67613172734d5d6be99db019e57e453f76862 (diff)
downloadlinux-7d62dac6312efa7824eb59d8161aee8fef1c166c.tar.xz
i40e: Give link more time after setting flow control
Give link a little more time to come back up after setting flow control before resetting. In the new NVMs it is taking longer for link to come back. This causes the driver to attempt to reset the link, which then errors because the firmware was already in the middle of a reset. Also, initialize err to 0. Change-ID: I1cc987a944e389d8909c262da5796f50722b4d6b Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com> Tested-by: Jim Young <jmyoungx@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_ethtool.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index f1d241ec1fc3..9c93ff28d4aa 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -630,7 +630,7 @@ static int i40e_set_pauseparam(struct net_device *netdev,
bool link_up = hw_link_info->link_info & I40E_AQ_LINK_UP;
i40e_status status;
u8 aq_failures;
- int err;
+ int err = 0;
if (vsi != pf->vsi[pf->lan_vsi])
return -EOPNOTSUPP;
@@ -683,8 +683,12 @@ static int i40e_set_pauseparam(struct net_device *netdev,
err = -EAGAIN;
}
- if (!test_bit(__I40E_DOWN, &pf->state))
- return i40e_nway_reset(netdev);
+ if (!test_bit(__I40E_DOWN, &pf->state)) {
+ /* Give it a little more time to try to come back */
+ msleep(75);
+ if (!test_bit(__I40E_DOWN, &pf->state))
+ return i40e_nway_reset(netdev);
+ }
return err;
}