Skip to content

Commit

Permalink
igb: do not modify tx_queue_len on link speed change
Browse files Browse the repository at this point in the history
Previously the driver tweaked txqueuelen to avoid false Tx hang reports seen at half duplex.
This had the effect of overriding user set values on link change/reset. Testing shows that
adjusting only the timeout factor is sufficient to prevent Tx hang reports at half duplex.

Based on e1000e patch by Franco Fichtner <franco@lastsummer.de>

Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Emil Tantilov authored and David S. Miller committed Mar 24, 2010
1 parent fa3d9a6 commit d07f3e3
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 10 deletions.
1 change: 0 additions & 1 deletion drivers/net/igb/igb.h
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,6 @@ struct igb_adapter {

/* TX */
struct igb_ring *tx_ring[16];
unsigned long tx_queue_len;
u32 tx_timeout_count;

/* RX */
Expand Down
10 changes: 1 addition & 9 deletions drivers/net/igb/igb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1105,9 +1105,6 @@ static void igb_configure(struct igb_adapter *adapter)
struct igb_ring *ring = adapter->rx_ring[i];
igb_alloc_rx_buffers_adv(ring, igb_desc_unused(ring));
}


adapter->tx_queue_len = netdev->tx_queue_len;
}

/**
Expand Down Expand Up @@ -1213,7 +1210,6 @@ void igb_down(struct igb_adapter *adapter)
del_timer_sync(&adapter->watchdog_timer);
del_timer_sync(&adapter->phy_info_timer);

netdev->tx_queue_len = adapter->tx_queue_len;
netif_carrier_off(netdev);

/* record the stats before reset*/
Expand Down Expand Up @@ -3106,17 +3102,13 @@ static void igb_watchdog_task(struct work_struct *work)
((ctrl & E1000_CTRL_RFCE) ? "RX" :
((ctrl & E1000_CTRL_TFCE) ? "TX" : "None")));

/* tweak tx_queue_len according to speed/duplex and
* adjust the timeout factor */
netdev->tx_queue_len = adapter->tx_queue_len;
/* adjust timeout factor according to speed/duplex */
adapter->tx_timeout_factor = 1;
switch (adapter->link_speed) {
case SPEED_10:
netdev->tx_queue_len = 10;
adapter->tx_timeout_factor = 14;
break;
case SPEED_100:
netdev->tx_queue_len = 100;
/* maybe add some timeout factor ? */
break;
}
Expand Down

0 comments on commit d07f3e3

Please sign in to comment.