aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Brandeburg <jesse.brandeburg@intel.com>2006-11-01 11:47:59 -0500
committerJeff Garzik <jeff@garzik.org>2006-12-02 00:12:00 -0500
commitfcfb1224250d7877b6a6c6a947986e08b2160fb6 (patch)
treeb87742a5b484dcbba418b055337a7f14b2e272dc
parentfc2307d00c15385fbdbb5928a8517e5f63c3d068 (diff)
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: Jesse brandeburg <jesse.brandeburg@intel.com> Cc: Jamal Hadi <hadi@cyberus.ca> Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
-rw-r--r--drivers/net/e1000/e1000.h1
-rw-r--r--drivers/net/e1000/e1000_ethtool.c1
-rw-r--r--drivers/net/e1000/e1000_main.c5
3 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/e1000/e1000.h b/drivers/net/e1000/e1000.h
index 3f0be02e85e2..896ea8a72386 100644
--- a/drivers/net/e1000/e1000.h
+++ b/drivers/net/e1000/e1000.h
@@ -265,6 +265,7 @@ struct e1000_adapter {
265 265
266 /* TX */ 266 /* TX */
267 struct e1000_tx_ring *tx_ring; /* One per active queue */ 267 struct e1000_tx_ring *tx_ring; /* One per active queue */
268 unsigned int restart_queue;
268 unsigned long tx_queue_len; 269 unsigned long tx_queue_len;
269 uint32_t txd_cmd; 270 uint32_t txd_cmd;
270 uint32_t tx_int_delay; 271 uint32_t tx_int_delay;
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c
index dbac71ba71b1..da459f7177c6 100644
--- a/drivers/net/e1000/e1000_ethtool.c
+++ b/drivers/net/e1000/e1000_ethtool.c
@@ -85,6 +85,7 @@ static const struct e1000_stats e1000_gstrings_stats[] = {
85 { "tx_single_coll_ok", E1000_STAT(stats.scc) }, 85 { "tx_single_coll_ok", E1000_STAT(stats.scc) },
86 { "tx_multi_coll_ok", E1000_STAT(stats.mcc) }, 86 { "tx_multi_coll_ok", E1000_STAT(stats.mcc) },
87 { "tx_timeout_count", E1000_STAT(tx_timeout_count) }, 87 { "tx_timeout_count", E1000_STAT(tx_timeout_count) },
88 { "tx_restart_queue", E1000_STAT(restart_queue) },
88 { "rx_long_length_errors", E1000_STAT(stats.roc) }, 89 { "rx_long_length_errors", E1000_STAT(stats.roc) },
89 { "rx_short_length_errors", E1000_STAT(stats.ruc) }, 90 { "rx_short_length_errors", E1000_STAT(stats.ruc) },
90 { "rx_align_errors", E1000_STAT(stats.algnerrc) }, 91 { "rx_align_errors", E1000_STAT(stats.algnerrc) },
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 96e44a825443..705e654c368a 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -2974,6 +2974,7 @@ static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
2974 2974
2975 /* A reprieve! */ 2975 /* A reprieve! */
2976 netif_start_queue(netdev); 2976 netif_start_queue(netdev);
2977 ++adapter->restart_queue;
2977 return 0; 2978 return 0;
2978} 2979}
2979 2980
@@ -3654,8 +3655,10 @@ e1000_clean_tx_irq(struct e1000_adapter *adapter,
3654 * sees the new next_to_clean. 3655 * sees the new next_to_clean.
3655 */ 3656 */
3656 smp_mb(); 3657 smp_mb();
3657 if (netif_queue_stopped(netdev)) 3658 if (netif_queue_stopped(netdev)) {
3658 netif_wake_queue(netdev); 3659 netif_wake_queue(netdev);
3660 ++adapter->restart_queue;
3661 }
3659 } 3662 }
3660 3663
3661 if (adapter->detect_tx_hung) { 3664 if (adapter->detect_tx_hung) {