Commit 0e4d422f authored by Emil Tantilov's avatar Emil Tantilov Committed by Jeff Kirsher
Browse files

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 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: default avatarEmil Tantilov <>
Tested-by: default avatarPhil Schmitt <>
Signed-off-by: default avatarJeff Kirsher <>
parent cb78cf12
......@@ -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,
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) {
ethtool_cmd_speed_set(ecmd, SPEED_10000);
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment