Olaf Hering 441585
From: Haiyang Zhang <haiyangz@microsoft.com>
Olaf Hering 441585
Date: Fri, 28 Jan 2022 18:03:37 -0800
Olaf Hering 441585
Patch-mainline: v5.18-rc1
Olaf Hering 441585
Subject: net: mana: Add counter for XDP_TX
Olaf Hering 441585
Git-commit: d356abb95b9883198b1ba0db678659369701e17d
Olaf Hering 441585
References: bsc#1195651
Olaf Hering 441585
Olaf Hering 441585
This counter will show up in ethtool stat. It is the
Olaf Hering 441585
number of packets received and forwarded by XDP program.
Olaf Hering 441585
Olaf Hering 441585
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Olaf Hering 441585
Signed-off-by: David S. Miller <davem@davemloft.net>
Olaf Hering 441585
Acked-by: Olaf Hering <ohering@suse.de>
Olaf Hering 441585
---
Olaf Hering 441585
 drivers/net/ethernet/microsoft/mana/mana.h         |  1 +
Olaf Hering 441585
 drivers/net/ethernet/microsoft/mana/mana_en.c      | 12 ++++++++----
Olaf Hering 441585
 drivers/net/ethernet/microsoft/mana/mana_ethtool.c |  7 ++++++-
Olaf Hering 441585
 3 files changed, 15 insertions(+), 5 deletions(-)
Olaf Hering 441585
Olaf Hering 441585
diff --git a/drivers/net/ethernet/microsoft/mana/mana.h b/drivers/net/ethernet/microsoft/mana/mana.h
Olaf Hering 441585
--- a/drivers/net/ethernet/microsoft/mana/mana.h
Olaf Hering 441585
+++ b/drivers/net/ethernet/microsoft/mana/mana.h
Olaf Hering 441585
@@ -52,6 +52,7 @@ struct mana_stats_rx {
Olaf Hering 441585
 	u64 packets;
Olaf Hering 441585
 	u64 bytes;
Olaf Hering 441585
 	u64 xdp_drop;
Olaf Hering 441585
+	u64 xdp_tx;
Olaf Hering 441585
 	struct u64_stats_sync syncp;
Olaf Hering 441585
 };
Olaf Hering 441585
 
Olaf Hering 441585
diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
Olaf Hering 441585
--- a/drivers/net/ethernet/microsoft/mana/mana_en.c
Olaf Hering 441585
+++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
Olaf Hering 441585
@@ -1035,6 +1035,14 @@ static void mana_rx_skb(void *buf_va, struct mana_rxcomp_oob *cqe,
Olaf Hering 441585
 			skb_set_hash(skb, hash_value, PKT_HASH_TYPE_L3);
Olaf Hering 441585
 	}
Olaf Hering 441585
 
Olaf Hering 441585
+	u64_stats_update_begin(&rx_stats->syncp);
Olaf Hering 441585
+	rx_stats->packets++;
Olaf Hering 441585
+	rx_stats->bytes += pkt_len;
Olaf Hering 441585
+
Olaf Hering 441585
+	if (act == XDP_TX)
Olaf Hering 441585
+		rx_stats->xdp_tx++;
Olaf Hering 441585
+	u64_stats_update_end(&rx_stats->syncp);
Olaf Hering 441585
+
Olaf Hering 441585
 	if (act == XDP_TX) {
Olaf Hering 441585
 		skb_set_queue_mapping(skb, rxq_idx);
Olaf Hering 441585
 		mana_xdp_tx(skb, ndev);
Olaf Hering 441585
@@ -1043,10 +1051,6 @@ static void mana_rx_skb(void *buf_va, struct mana_rxcomp_oob *cqe,
Olaf Hering 441585
 
Olaf Hering 441585
 	napi_gro_receive(napi, skb);
Olaf Hering 441585
 
Olaf Hering 441585
-	u64_stats_update_begin(&rx_stats->syncp);
Olaf Hering 441585
-	rx_stats->packets++;
Olaf Hering 441585
-	rx_stats->bytes += pkt_len;
Olaf Hering 441585
-	u64_stats_update_end(&rx_stats->syncp);
Olaf Hering 441585
 	return;
Olaf Hering 441585
 
Olaf Hering 441585
 drop_xdp:
Olaf Hering 441585
diff --git a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
Olaf Hering 441585
--- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
Olaf Hering 441585
+++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
Olaf Hering 441585
@@ -23,7 +23,7 @@ static int mana_get_sset_count(struct net_device *ndev, int stringset)
Olaf Hering 441585
 	if (stringset != ETH_SS_STATS)
Olaf Hering 441585
 		return -EINVAL;
Olaf Hering 441585
 
Olaf Hering 441585
-	return ARRAY_SIZE(mana_eth_stats) + num_queues * 5;
Olaf Hering 441585
+	return ARRAY_SIZE(mana_eth_stats) + num_queues * 6;
Olaf Hering 441585
 }
Olaf Hering 441585
 
Olaf Hering 441585
 static void mana_get_strings(struct net_device *ndev, u32 stringset, u8 *data)
Olaf Hering 441585
@@ -48,6 +48,8 @@ static void mana_get_strings(struct net_device *ndev, u32 stringset, u8 *data)
Olaf Hering 441585
 		p += ETH_GSTRING_LEN;
Olaf Hering 441585
 		sprintf(p, "rx_%d_xdp_drop", i);
Olaf Hering 441585
 		p += ETH_GSTRING_LEN;
Olaf Hering 441585
+		sprintf(p, "rx_%d_xdp_tx", i);
Olaf Hering 441585
+		p += ETH_GSTRING_LEN;
Olaf Hering 441585
 	}
Olaf Hering 441585
 
Olaf Hering 441585
 	for (i = 0; i < num_queues; i++) {
Olaf Hering 441585
@@ -69,6 +71,7 @@ static void mana_get_ethtool_stats(struct net_device *ndev,
Olaf Hering 441585
 	unsigned int start;
Olaf Hering 441585
 	u64 packets, bytes;
Olaf Hering 441585
 	u64 xdp_drop;
Olaf Hering 441585
+	u64 xdp_tx;
Olaf Hering 441585
 	int q, i = 0;
Olaf Hering 441585
 
Olaf Hering 441585
 	if (!apc->port_is_up)
Olaf Hering 441585
@@ -85,11 +88,13 @@ static void mana_get_ethtool_stats(struct net_device *ndev,
Olaf Hering 441585
 			packets = rx_stats->packets;
Olaf Hering 441585
 			bytes = rx_stats->bytes;
Olaf Hering 441585
 			xdp_drop = rx_stats->xdp_drop;
Olaf Hering 441585
+			xdp_tx = rx_stats->xdp_tx;
Olaf Hering 441585
 		} while (u64_stats_fetch_retry_irq(&rx_stats->syncp, start));
Olaf Hering 441585
 
Olaf Hering 441585
 		data[i++] = packets;
Olaf Hering 441585
 		data[i++] = bytes;
Olaf Hering 441585
 		data[i++] = xdp_drop;
Olaf Hering 441585
+		data[i++] = xdp_tx;
Olaf Hering 441585
 	}
Olaf Hering 441585
 
Olaf Hering 441585
 	for (q = 0; q < num_queues; q++) {