Commit fcfb1224 authored by Jesse Brandeburg's avatar Jesse Brandeburg Committed by Jeff Garzik

e1000: add queue restart counter

Add a netif_wake/start_queue counter to the ethtool statistics to indicated
to the user that their transmit ring could be too small for their workload.
Signed-off-by: default avatarJesse brandeburg <jesse.brandeburg@intel.com>
Cc: Jamal Hadi <hadi@cyberus.ca>
Signed-off-by: default avatarAuke Kok <auke-jan.h.kok@intel.com>
parent fc2307d0
...@@ -265,6 +265,7 @@ struct e1000_adapter { ...@@ -265,6 +265,7 @@ struct e1000_adapter {
/* TX */ /* TX */
struct e1000_tx_ring *tx_ring; /* One per active queue */ struct e1000_tx_ring *tx_ring; /* One per active queue */
unsigned int restart_queue;
unsigned long tx_queue_len; unsigned long tx_queue_len;
uint32_t txd_cmd; uint32_t txd_cmd;
uint32_t tx_int_delay; uint32_t tx_int_delay;
......
...@@ -85,6 +85,7 @@ static const struct e1000_stats e1000_gstrings_stats[] = { ...@@ -85,6 +85,7 @@ static const struct e1000_stats e1000_gstrings_stats[] = {
{ "tx_single_coll_ok", E1000_STAT(stats.scc) }, { "tx_single_coll_ok", E1000_STAT(stats.scc) },
{ "tx_multi_coll_ok", E1000_STAT(stats.mcc) }, { "tx_multi_coll_ok", E1000_STAT(stats.mcc) },
{ "tx_timeout_count", E1000_STAT(tx_timeout_count) }, { "tx_timeout_count", E1000_STAT(tx_timeout_count) },
{ "tx_restart_queue", E1000_STAT(restart_queue) },
{ "rx_long_length_errors", E1000_STAT(stats.roc) }, { "rx_long_length_errors", E1000_STAT(stats.roc) },
{ "rx_short_length_errors", E1000_STAT(stats.ruc) }, { "rx_short_length_errors", E1000_STAT(stats.ruc) },
{ "rx_align_errors", E1000_STAT(stats.algnerrc) }, { "rx_align_errors", E1000_STAT(stats.algnerrc) },
......
...@@ -2974,6 +2974,7 @@ static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) ...@@ -2974,6 +2974,7 @@ static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
/* A reprieve! */ /* A reprieve! */
netif_start_queue(netdev); netif_start_queue(netdev);
++adapter->restart_queue;
return 0; return 0;
} }
...@@ -3654,8 +3655,10 @@ e1000_clean_tx_irq(struct e1000_adapter *adapter, ...@@ -3654,8 +3655,10 @@ e1000_clean_tx_irq(struct e1000_adapter *adapter,
* sees the new next_to_clean. * sees the new next_to_clean.
*/ */
smp_mb(); smp_mb();
if (netif_queue_stopped(netdev)) if (netif_queue_stopped(netdev)) {
netif_wake_queue(netdev); netif_wake_queue(netdev);
++adapter->restart_queue;
}
} }
if (adapter->detect_tx_hung) { if (adapter->detect_tx_hung) {
......
Markdown is supported
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