Skip to content

Commit

Permalink
ixgbe: fix slow load times on 82598 nics
Browse files Browse the repository at this point in the history
Load times for NICs that use i2c to communicate with the phy were taking
~4.5 sec per port.  This fix first checks to see if the link is already
up before calling get_link_capabilities, since if it is we don't need
query the phy for link state.

Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Don Skidmore authored and David S. Miller committed Jan 27, 2009
1 parent afcf124 commit 5b9c3cd
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions drivers/net/ixgbe/ixgbe_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3901,16 +3901,27 @@ static void ixgbe_netpoll(struct net_device *netdev)
**/
static int ixgbe_link_config(struct ixgbe_hw *hw)
{
u32 autoneg = IXGBE_LINK_SPEED_10GB_FULL;
u32 autoneg;
bool link_up = false;
u32 ret = IXGBE_ERR_LINK_SETUP;

/* must always autoneg for both 1G and 10G link */
hw->mac.autoneg = true;
if (hw->mac.ops.check_link)
ret = hw->mac.ops.check_link(hw, &autoneg, &link_up, false);

if ((hw->mac.type == ixgbe_mac_82598EB) &&
(hw->phy.media_type == ixgbe_media_type_copper))
autoneg = IXGBE_LINK_SPEED_82598_AUTONEG;
if (ret || !link_up)
goto link_cfg_out;

return hw->mac.ops.setup_link_speed(hw, autoneg, true, true);
if (hw->mac.ops.get_link_capabilities)
ret = hw->mac.ops.get_link_capabilities(hw, &autoneg,
&hw->mac.autoneg);
if (ret)
goto link_cfg_out;

if (hw->mac.ops.setup_link_speed)
ret = hw->mac.ops.setup_link_speed(hw, autoneg, true, true);

link_cfg_out:
return ret;
}

static const struct net_device_ops ixgbe_netdev_ops = {
Expand Down

0 comments on commit 5b9c3cd

Please sign in to comment.