Commit 0201bda1 authored by Sameeh Jubran's avatar Sameeh Jubran Committed by David S. Miller
Browse files

net: ena: ethtool: add stats printing to XDP queues



Added statistics for TX queues that are used for XDP TX. The statistics
are the same as the ones printed for regular non-XDP TX queues.

The XDP queue statistics can be queried using
`ethtool -S <ifname>`

Signed-off-by: default avatarShay Agroskin <shayagr@amazon.com>
Signed-off-by: default avatarSameeh Jubran <sameehj@amazon.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 713865da
Loading
Loading
Loading
Loading
+28 −17
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ static void ena_queue_stats(struct ena_adapter *adapter, u64 **data)
	u64 *ptr;
	int i, j;

	for (i = 0; i < adapter->num_io_queues; i++) {
	for (i = 0; i < adapter->num_io_queues + adapter->xdp_num_queues; i++) {
		/* Tx stats */
		ring = &adapter->tx_ring[i];

@@ -163,7 +163,8 @@ static void ena_queue_stats(struct ena_adapter *adapter, u64 **data)

			ena_safe_update_stat(ptr, (*data)++, &ring->syncp);
		}

		/* XDP TX queues don't have a RX queue counterpart */
		if (!ENA_IS_XDP_INDEX(adapter, i)) {
			/* Rx stats */
			ring = &adapter->rx_ring[i];

@@ -177,6 +178,7 @@ static void ena_queue_stats(struct ena_adapter *adapter, u64 **data)
			}
		}
	}
}

static void ena_dev_admin_queue_stats(struct ena_adapter *adapter, u64 **data)
{
@@ -238,6 +240,7 @@ static void ena_get_ethtool_stats(struct net_device *netdev,
static int ena_get_sw_stats_count(struct ena_adapter *adapter)
{
	return adapter->num_io_queues * (ENA_STATS_ARRAY_TX + ENA_STATS_ARRAY_RX)
		+ adapter->xdp_num_queues * ENA_STATS_ARRAY_TX
		+ ENA_STATS_ARRAY_GLOBAL + ENA_STATS_ARRAY_ENA_COM;
}

@@ -259,18 +262,25 @@ int ena_get_sset_count(struct net_device *netdev, int sset)
static void ena_queue_strings(struct ena_adapter *adapter, u8 **data)
{
	const struct ena_stats *ena_stats;
	bool is_xdp;
	int i, j;

	for (i = 0; i < adapter->num_io_queues; i++) {
	for (i = 0; i < adapter->num_io_queues + adapter->xdp_num_queues; i++) {
		is_xdp = ENA_IS_XDP_INDEX(adapter, i);
		/* Tx stats */
		for (j = 0; j < ENA_STATS_ARRAY_TX; j++) {
			ena_stats = &ena_stats_tx_strings[j];

			snprintf(*data, ETH_GSTRING_LEN,
				 "queue_%u_tx_%s", i, ena_stats->name);
				 "queue_%u_%s_%s", i,
				 is_xdp ? "xdp_tx" : "tx", ena_stats->name);
			(*data) += ETH_GSTRING_LEN;
		}
		/* Rx stats */

		if (!is_xdp) {
			/* RX stats, in XDP there isn't a RX queue
			 * counterpart
			 */
			for (j = 0; j < ENA_STATS_ARRAY_RX; j++) {
				ena_stats = &ena_stats_rx_strings[j];

@@ -280,6 +290,7 @@ static void ena_queue_strings(struct ena_adapter *adapter, u8 **data)
			}
		}
	}
}

static void ena_com_dev_strings(u8 **data)
{