mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 06:52:34 -04:00
ixgbe: Fix 82599 multispeed fiber link issues due to Tx laser flapping
Fix 82599 link issues during driver load and unload test using multi-speed 10G & 1G fiber modules. When connected back to back sometime 82599 multispeed fiber modules would link at 1G speed instead of 10G highest speed, due to a race condition in autotry process involving Tx laser flapping. Move autotry autoneg-37 tx laser flapping process from multispeed module init setup to driver unload. This will alert the link partner to restart its autotry process when it tries to establish the link with the link partner Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
4227f62db3
commit
1097cd1770
@@ -5018,6 +5018,7 @@ static void ixgbe_multispeed_fiber_task(struct work_struct *work)
|
||||
autoneg = hw->phy.autoneg_advertised;
|
||||
if ((!autoneg) && (hw->mac.ops.get_link_capabilities))
|
||||
hw->mac.ops.get_link_capabilities(hw, &autoneg, &negotiation);
|
||||
hw->mac.autotry_restart = false;
|
||||
if (hw->mac.ops.setup_link)
|
||||
hw->mac.ops.setup_link(hw, autoneg, negotiation, true);
|
||||
adapter->flags |= IXGBE_FLAG_NEED_LINK_UPDATE;
|
||||
@@ -6380,6 +6381,16 @@ static void __devexit ixgbe_remove(struct pci_dev *pdev)
|
||||
del_timer_sync(&adapter->sfp_timer);
|
||||
cancel_work_sync(&adapter->watchdog_task);
|
||||
cancel_work_sync(&adapter->sfp_task);
|
||||
if (adapter->hw.phy.multispeed_fiber) {
|
||||
struct ixgbe_hw *hw = &adapter->hw;
|
||||
/*
|
||||
* Restart clause 37 autoneg, disable and re-enable
|
||||
* the tx laser, to clear & alert the link partner
|
||||
* that it needs to restart autotry
|
||||
*/
|
||||
hw->mac.autotry_restart = true;
|
||||
hw->mac.ops.flap_tx_laser(hw);
|
||||
}
|
||||
cancel_work_sync(&adapter->multispeed_fiber_task);
|
||||
cancel_work_sync(&adapter->sfp_config_module_task);
|
||||
if (adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE ||
|
||||
|
||||
Reference in New Issue
Block a user