i40e: fix clearing link masks in i40e_get_link_ksettings
authorAlan Brady <alan.brady@intel.com>
Thu, 5 Oct 2017 21:53:34 +0000 (14:53 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 17 Oct 2017 17:48:51 +0000 (10:48 -0700)
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>
drivers/net/ethernet/intel/i40e/i40e_ethtool.c

index f4a70ef3f2e02e3989dfbc744dea720ef3b6ed38..fe0b2327de5b52ebc70c78996ca9c2315434206c 100644 (file)
@@ -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;
        }