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