diff options
author | Alan Brady <alan.brady@intel.com> | 2017-10-05 14:53:34 -0700 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2017-10-17 10:48:51 -0700 |
commit | 5f434994ba94f7f02c1f47a9dd13204d1fbc9686 (patch) | |
tree | 5b38e06c6c35e07089ce0e95695fb75d372eeedd /drivers/net/ethernet | |
parent | 21675bdc214b34d2ce4e30396e9ff36f0e61ae93 (diff) | |
download | linux-5f434994ba94f7f02c1f47a9dd13204d1fbc9686.tar.bz2 |
i40e: fix clearing link masks in i40e_get_link_ksettings
This fixes two issues in i40e_get_link_ksettings. It adds calls to
ethtool_link_ksettings_zero_link_mode to make sure advertising and
supported link masks are cleared before we start setting bits in them.
This also replaces some funky bit manipulations with a much nicer call
to ethtool_link_ksettings_del_link_mode when removing link modes.
Signed-off-by: Alan Brady <alan.brady@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c index f4a70ef3f2e0..fe0b2327de5b 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c @@ -600,7 +600,9 @@ static int i40e_get_link_ksettings(struct net_device *netdev, struct i40e_hw *hw = &pf->hw; struct i40e_link_status *hw_link_info = &hw->phy.link_info; bool link_up = hw_link_info->link_info & I40E_AQ_LINK_UP; - u32 advertising; + + ethtool_link_ksettings_zero_link_mode(ks, supported); + ethtool_link_ksettings_zero_link_mode(ks, advertising); if (link_up) i40e_get_settings_link_up(hw, ks, netdev, pf); @@ -664,13 +666,9 @@ static int i40e_get_link_ksettings(struct net_device *netdev, Asym_Pause); break; default: - ethtool_convert_link_mode_to_legacy_u32( - &advertising, ks->link_modes.advertising); - - advertising &= ~(ADVERTISED_Pause | ADVERTISED_Asym_Pause); - - ethtool_convert_legacy_u32_to_link_mode( - ks->link_modes.advertising, advertising); + ethtool_link_ksettings_del_link_mode(ks, advertising, Pause); + ethtool_link_ksettings_del_link_mode(ks, advertising, + Asym_Pause); break; } |