Commit f728fa01 authored by Joe Damato's avatar Joe Damato Committed by Tony Nguyen

i40e: Add tx_stopped stat

Track TX queue stop events and export the new stat with ethtool.
Signed-off-by: default avatarJoe Damato <jdamato@fastly.com>
Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 69e66c04
...@@ -852,6 +852,7 @@ struct i40e_vsi { ...@@ -852,6 +852,7 @@ struct i40e_vsi {
u64 tx_busy; u64 tx_busy;
u64 tx_linearize; u64 tx_linearize;
u64 tx_force_wb; u64 tx_force_wb;
u64 tx_stopped;
u64 rx_buf_failed; u64 rx_buf_failed;
u64 rx_page_failed; u64 rx_page_failed;
u64 rx_page_reuse; u64 rx_page_reuse;
......
...@@ -309,10 +309,11 @@ static void i40e_dbg_dump_vsi_seid(struct i40e_pf *pf, int seid) ...@@ -309,10 +309,11 @@ static void i40e_dbg_dump_vsi_seid(struct i40e_pf *pf, int seid)
tx_ring->stats.bytes, tx_ring->stats.bytes,
tx_ring->tx_stats.restart_queue); tx_ring->tx_stats.restart_queue);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
" tx_rings[%i]: tx_stats: tx_busy = %lld, tx_done_old = %lld\n", " tx_rings[%i]: tx_stats: tx_busy = %lld, tx_done_old = %lld, tx_stopped = %lld\n",
i, i,
tx_ring->tx_stats.tx_busy, tx_ring->tx_stats.tx_busy,
tx_ring->tx_stats.tx_done_old); tx_ring->tx_stats.tx_done_old,
tx_ring->tx_stats.tx_stopped);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
" tx_rings[%i]: size = %i\n", " tx_rings[%i]: size = %i\n",
i, tx_ring->size); i, tx_ring->size);
......
...@@ -293,6 +293,7 @@ static const struct i40e_stats i40e_gstrings_misc_stats[] = { ...@@ -293,6 +293,7 @@ static const struct i40e_stats i40e_gstrings_misc_stats[] = {
I40E_VSI_STAT("tx_linearize", tx_linearize), I40E_VSI_STAT("tx_linearize", tx_linearize),
I40E_VSI_STAT("tx_force_wb", tx_force_wb), I40E_VSI_STAT("tx_force_wb", tx_force_wb),
I40E_VSI_STAT("tx_busy", tx_busy), I40E_VSI_STAT("tx_busy", tx_busy),
I40E_VSI_STAT("tx_stopped", tx_stopped),
I40E_VSI_STAT("rx_alloc_fail", rx_buf_failed), I40E_VSI_STAT("rx_alloc_fail", rx_buf_failed),
I40E_VSI_STAT("rx_pg_alloc_fail", rx_page_failed), I40E_VSI_STAT("rx_pg_alloc_fail", rx_page_failed),
I40E_VSI_STAT("rx_cache_reuse", rx_page_reuse), I40E_VSI_STAT("rx_cache_reuse", rx_page_reuse),
......
...@@ -785,6 +785,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -785,6 +785,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
unsigned int start; unsigned int start;
u64 tx_linearize; u64 tx_linearize;
u64 tx_force_wb; u64 tx_force_wb;
u64 tx_stopped;
u64 rx_p, rx_b; u64 rx_p, rx_b;
u64 tx_p, tx_b; u64 tx_p, tx_b;
u16 q; u16 q;
...@@ -804,6 +805,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -804,6 +805,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
rx_b = rx_p = 0; rx_b = rx_p = 0;
tx_b = tx_p = 0; tx_b = tx_p = 0;
tx_restart = tx_busy = tx_linearize = tx_force_wb = 0; tx_restart = tx_busy = tx_linearize = tx_force_wb = 0;
tx_stopped = 0;
rx_page = 0; rx_page = 0;
rx_buf = 0; rx_buf = 0;
rx_reuse = 0; rx_reuse = 0;
...@@ -828,6 +830,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -828,6 +830,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
tx_busy += p->tx_stats.tx_busy; tx_busy += p->tx_stats.tx_busy;
tx_linearize += p->tx_stats.tx_linearize; tx_linearize += p->tx_stats.tx_linearize;
tx_force_wb += p->tx_stats.tx_force_wb; tx_force_wb += p->tx_stats.tx_force_wb;
tx_stopped += p->tx_stats.tx_stopped;
/* locate Rx ring */ /* locate Rx ring */
p = READ_ONCE(vsi->rx_rings[q]); p = READ_ONCE(vsi->rx_rings[q]);
...@@ -872,6 +875,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) ...@@ -872,6 +875,7 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
vsi->tx_busy = tx_busy; vsi->tx_busy = tx_busy;
vsi->tx_linearize = tx_linearize; vsi->tx_linearize = tx_linearize;
vsi->tx_force_wb = tx_force_wb; vsi->tx_force_wb = tx_force_wb;
vsi->tx_stopped = tx_stopped;
vsi->rx_page_failed = rx_page; vsi->rx_page_failed = rx_page;
vsi->rx_buf_failed = rx_buf; vsi->rx_buf_failed = rx_buf;
vsi->rx_page_reuse = rx_reuse; vsi->rx_page_reuse = rx_reuse;
......
...@@ -3396,6 +3396,8 @@ int __i40e_maybe_stop_tx(struct i40e_ring *tx_ring, int size) ...@@ -3396,6 +3396,8 @@ int __i40e_maybe_stop_tx(struct i40e_ring *tx_ring, int size)
/* Memory barrier before checking head and tail */ /* Memory barrier before checking head and tail */
smp_mb(); smp_mb();
++tx_ring->tx_stats.tx_stopped;
/* Check again in a case another CPU has just made room available. */ /* Check again in a case another CPU has just made room available. */
if (likely(I40E_DESC_UNUSED(tx_ring) < size)) if (likely(I40E_DESC_UNUSED(tx_ring) < size))
return -EBUSY; return -EBUSY;
......
...@@ -290,6 +290,7 @@ struct i40e_tx_queue_stats { ...@@ -290,6 +290,7 @@ struct i40e_tx_queue_stats {
u64 tx_done_old; u64 tx_done_old;
u64 tx_linearize; u64 tx_linearize;
u64 tx_force_wb; u64 tx_force_wb;
u64 tx_stopped;
int prev_pkt_ctr; int prev_pkt_ctr;
}; };
......
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