]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
sfc: Add TX merged completion counter
authorBen Hutchings <bhutchings@solarflare.com>
Sat, 27 Apr 2013 00:55:21 +0000 (01:55 +0100)
committerBen Hutchings <bhutchings@solarflare.com>
Tue, 27 Aug 2013 21:28:47 +0000 (22:28 +0100)
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: Ben Hutchings <bhutchings@solarflare.com>
drivers/net/ethernet/sfc/ethtool.c
drivers/net/ethernet/sfc/net_driver.h
drivers/net/ethernet/sfc/tx.c

index 0b8ffdfba3d85eba84edcc4df4523a2880ea1112..63546930f954367af2fb6563f45de618f1cbae90 100644 (file)
@@ -65,6 +65,7 @@ static u64 efx_get_atomic_stat(void *field)
                         unsigned int, efx_get_uint_stat)
 
 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_long_headers),
        EFX_ETHTOOL_UINT_TXQ_STAT(tso_packets),
index 481e41219869ba60941e07c3e35c607f49bacfb2..f52b38c1ef268f55c6d3dd66bab64ea0ae74ee12 100644 (file)
@@ -186,6 +186,7 @@ struct efx_tx_buffer {
  *     variable indicates that the queue is empty.  This is to
  *     avoid cache-line ping-pong between the xmit path and the
  *     completion path.
+ * @merge_events: Number of TX merged completion events
  * @insert_count: Current insert pointer
  *     This is the number of buffers that have been added to the
  *     software ring.
@@ -222,6 +223,7 @@ struct efx_tx_queue {
        /* Members used mainly on the completion path */
        unsigned int read_count ____cacheline_aligned_in_smp;
        unsigned int old_write_count;
+       unsigned int merge_events;
 
        /* Members used only on the xmit path */
        unsigned int insert_count ____cacheline_aligned_in_smp;
index 4903c4f7f29227bbd878224650ea7c13648876b6..85ee647b28ad7b2e9864a25874d909ce39843f1a 100644 (file)
@@ -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);
        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
         * barrier ensures that we write read_count (inside
         * efx_dequeue_buffers()) before reading the queue status.