mirror of https://gitee.com/openkylin/linux.git
ixgbe: do not call check_link for ethtool in ixgbe_get_settings()
In ixgbe_get_settings() the link status and speed of the interface are determined based on a read from the LINKS register via the call to mac.ops.check.link(). This can cause issues where external drivers may end up with unknown speed when calling ethtool_get_setings(). Instead of calling the mac.ops.check_link() we can report the speed from the adapter structure which is populated by the driver. 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
cb78cf12d6
commit
0e4d422f5f
|
@ -185,9 +185,7 @@ static int ixgbe_get_settings(struct net_device *netdev,
|
|||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||
struct ixgbe_hw *hw = &adapter->hw;
|
||||
ixgbe_link_speed supported_link;
|
||||
u32 link_speed = 0;
|
||||
bool autoneg = false;
|
||||
bool link_up;
|
||||
|
||||
hw->mac.ops.get_link_capabilities(hw, &supported_link, &autoneg);
|
||||
|
||||
|
@ -313,9 +311,8 @@ static int ixgbe_get_settings(struct net_device *netdev,
|
|||
break;
|
||||
}
|
||||
|
||||
hw->mac.ops.check_link(hw, &link_speed, &link_up, false);
|
||||
if (link_up) {
|
||||
switch (link_speed) {
|
||||
if (netif_carrier_ok(netdev)) {
|
||||
switch (adapter->link_speed) {
|
||||
case IXGBE_LINK_SPEED_10GB_FULL:
|
||||
ethtool_cmd_speed_set(ecmd, SPEED_10000);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue