forked from Minki/linux
ixgbe: fix race when setting advertised speed
Following commands: modprobe ixgbe ifconfig ethX up ethtool -s ethX advertise 0x020 can lead to "setup link failed with code -14" error due to the setup_link call racing with the SFP detection routine in the watchdog. This patch resolves this issue by protecting the setup_link call with check for __IXGBE_IN_SFP_INIT. Reported-by: Scott Harrison <scoharr2@cisco.com> Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
4d2fcfbcf8
commit
e3215f0ac7
@ -342,12 +342,16 @@ static int ixgbe_set_settings(struct net_device *netdev,
|
||||
if (old == advertised)
|
||||
return err;
|
||||
/* this sets the link speed and restarts auto-neg */
|
||||
while (test_and_set_bit(__IXGBE_IN_SFP_INIT, &adapter->state))
|
||||
usleep_range(1000, 2000);
|
||||
|
||||
hw->mac.autotry_restart = true;
|
||||
err = hw->mac.ops.setup_link(hw, advertised, true);
|
||||
if (err) {
|
||||
e_info(probe, "setup link failed with code %d\n", err);
|
||||
hw->mac.ops.setup_link(hw, old, true);
|
||||
}
|
||||
clear_bit(__IXGBE_IN_SFP_INIT, &adapter->state);
|
||||
} else {
|
||||
/* in this case we currently only support 10Gb/FULL */
|
||||
u32 speed = ethtool_cmd_speed(ecmd);
|
||||
|
Loading…
Reference in New Issue
Block a user