Commit 02e12165 authored by Ben Hutchings's avatar Ben Hutchings

sfc: Add TX merged completion counter

Add a counter for TX merged completion events.

This is implemented in the common TX path, because the NIC event
handlers only know how many descriptors were completed, not how many
packets.
Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
parent 43a3739d
...@@ -65,6 +65,7 @@ static u64 efx_get_atomic_stat(void *field) ...@@ -65,6 +65,7 @@ static u64 efx_get_atomic_stat(void *field)
unsigned int, efx_get_uint_stat) unsigned int, efx_get_uint_stat)
static const struct efx_sw_stat_desc efx_sw_stat_desc[] = { static const struct efx_sw_stat_desc efx_sw_stat_desc[] = {
EFX_ETHTOOL_UINT_TXQ_STAT(merge_events),
EFX_ETHTOOL_UINT_TXQ_STAT(tso_bursts), EFX_ETHTOOL_UINT_TXQ_STAT(tso_bursts),
EFX_ETHTOOL_UINT_TXQ_STAT(tso_long_headers), EFX_ETHTOOL_UINT_TXQ_STAT(tso_long_headers),
EFX_ETHTOOL_UINT_TXQ_STAT(tso_packets), EFX_ETHTOOL_UINT_TXQ_STAT(tso_packets),
......
...@@ -186,6 +186,7 @@ struct efx_tx_buffer { ...@@ -186,6 +186,7 @@ struct efx_tx_buffer {
* variable indicates that the queue is empty. This is to * variable indicates that the queue is empty. This is to
* avoid cache-line ping-pong between the xmit path and the * avoid cache-line ping-pong between the xmit path and the
* completion path. * completion path.
* @merge_events: Number of TX merged completion events
* @insert_count: Current insert pointer * @insert_count: Current insert pointer
* This is the number of buffers that have been added to the * This is the number of buffers that have been added to the
* software ring. * software ring.
...@@ -222,6 +223,7 @@ struct efx_tx_queue { ...@@ -222,6 +223,7 @@ struct efx_tx_queue {
/* Members used mainly on the completion path */ /* Members used mainly on the completion path */
unsigned int read_count ____cacheline_aligned_in_smp; unsigned int read_count ____cacheline_aligned_in_smp;
unsigned int old_write_count; unsigned int old_write_count;
unsigned int merge_events;
/* Members used only on the xmit path */ /* Members used only on the xmit path */
unsigned int insert_count ____cacheline_aligned_in_smp; unsigned int insert_count ____cacheline_aligned_in_smp;
......
...@@ -437,6 +437,9 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) ...@@ -437,6 +437,9 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index)
efx_dequeue_buffers(tx_queue, index, &pkts_compl, &bytes_compl); efx_dequeue_buffers(tx_queue, index, &pkts_compl, &bytes_compl);
netdev_tx_completed_queue(tx_queue->core_txq, pkts_compl, bytes_compl); netdev_tx_completed_queue(tx_queue->core_txq, pkts_compl, bytes_compl);
if (pkts_compl > 1)
++tx_queue->merge_events;
/* See if we need to restart the netif queue. This memory /* See if we need to restart the netif queue. This memory
* barrier ensures that we write read_count (inside * barrier ensures that we write read_count (inside
* efx_dequeue_buffers()) before reading the queue status. * efx_dequeue_buffers()) before reading the queue status.
......
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