You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
6.1 KiB
192 lines
6.1 KiB
5 years ago
|
From f6434f257c096205df4d2333e219e66229433072 Mon Sep 17 00:00:00 2001
|
||
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
||
|
Date: Wed, 2 Oct 2019 18:23:05 -0400
|
||
|
Subject: [PATCH 50/96] [netdrv] bnxt_en: Refactor ethtool ring statistics
|
||
|
logic
|
||
|
|
||
|
Message-id: <5774e6c89e7d2c4808b6fd71337d9e03acce8bcd.1570027456.git.jtoppins@redhat.com>
|
||
|
Patchwork-id: 276474
|
||
|
O-Subject: [RHEL-8.2 PATCH 43/78] bnxt_en: Refactor ethtool ring statistics logic.
|
||
|
Bugzilla: 1724766
|
||
|
RH-Acked-by: John Linville <linville@redhat.com>
|
||
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||
|
|
||
|
The current code assumes that the per ring statistics counters are
|
||
|
fixed. In newer chips that support a newer version of TPA, the
|
||
|
TPA counters are also changed. Refactor the code by defining these
|
||
|
counter names in arrays so that it is easy to add a new array for
|
||
|
a new set of counters supported by the newer chips.
|
||
|
|
||
|
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|
(cherry picked from commit ee79566e65945dcf557bcfb9335e46fac67fb002)
|
||
|
Bugzilla: 1724766
|
||
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||
|
Tested: build, boot, basic ping
|
||
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||
|
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||
|
---
|
||
|
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 120 +++++++++++++---------
|
||
|
1 file changed, 70 insertions(+), 50 deletions(-)
|
||
|
|
||
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||
|
===================================================================
|
||
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:15.727512996 +0100
|
||
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:17.017501155 +0100
|
||
|
@@ -137,7 +137,36 @@
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
-#define BNXT_NUM_STATS 22
|
||
|
+static const char * const bnxt_ring_stats_str[] = {
|
||
|
+ "rx_ucast_packets",
|
||
|
+ "rx_mcast_packets",
|
||
|
+ "rx_bcast_packets",
|
||
|
+ "rx_discards",
|
||
|
+ "rx_drops",
|
||
|
+ "rx_ucast_bytes",
|
||
|
+ "rx_mcast_bytes",
|
||
|
+ "rx_bcast_bytes",
|
||
|
+ "tx_ucast_packets",
|
||
|
+ "tx_mcast_packets",
|
||
|
+ "tx_bcast_packets",
|
||
|
+ "tx_discards",
|
||
|
+ "tx_drops",
|
||
|
+ "tx_ucast_bytes",
|
||
|
+ "tx_mcast_bytes",
|
||
|
+ "tx_bcast_bytes",
|
||
|
+};
|
||
|
+
|
||
|
+static const char * const bnxt_ring_tpa_stats_str[] = {
|
||
|
+ "tpa_packets",
|
||
|
+ "tpa_bytes",
|
||
|
+ "tpa_events",
|
||
|
+ "tpa_aborts",
|
||
|
+};
|
||
|
+
|
||
|
+static const char * const bnxt_ring_sw_stats_str[] = {
|
||
|
+ "rx_l4_csum_errors",
|
||
|
+ "missed_irqs",
|
||
|
+};
|
||
|
|
||
|
#define BNXT_RX_STATS_ENTRY(counter) \
|
||
|
{ BNXT_RX_STATS_OFFSET(counter), __stringify(counter) }
|
||
|
@@ -432,9 +461,20 @@
|
||
|
ARRAY_SIZE(bnxt_tx_pkts_pri_arr))
|
||
|
#define BNXT_NUM_PCIE_STATS ARRAY_SIZE(bnxt_pcie_stats_arr)
|
||
|
|
||
|
+static int bnxt_get_num_ring_stats(struct bnxt *bp)
|
||
|
+{
|
||
|
+ int num_stats;
|
||
|
+
|
||
|
+ num_stats = ARRAY_SIZE(bnxt_ring_stats_str) +
|
||
|
+ ARRAY_SIZE(bnxt_ring_sw_stats_str);
|
||
|
+ if (BNXT_SUPPORTS_TPA(bp))
|
||
|
+ num_stats += ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||
|
+ return num_stats * bp->cp_nr_rings;
|
||
|
+}
|
||
|
+
|
||
|
static int bnxt_get_num_stats(struct bnxt *bp)
|
||
|
{
|
||
|
- int num_stats = BNXT_NUM_STATS * bp->cp_nr_rings;
|
||
|
+ int num_stats = bnxt_get_num_ring_stats(bp);
|
||
|
|
||
|
num_stats += BNXT_NUM_SW_FUNC_STATS;
|
||
|
|
||
|
@@ -475,10 +515,13 @@
|
||
|
{
|
||
|
u32 i, j = 0;
|
||
|
struct bnxt *bp = netdev_priv(dev);
|
||
|
- u32 stat_fields = sizeof(struct ctx_hw_stats) / 8;
|
||
|
+ u32 stat_fields = ARRAY_SIZE(bnxt_ring_stats_str);
|
||
|
+
|
||
|
+ if (BNXT_SUPPORTS_TPA(bp))
|
||
|
+ stat_fields += ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||
|
|
||
|
if (!bp->bnapi) {
|
||
|
- j += BNXT_NUM_STATS * bp->cp_nr_rings + BNXT_NUM_SW_FUNC_STATS;
|
||
|
+ j += bnxt_get_num_ring_stats(bp) + BNXT_NUM_SW_FUNC_STATS;
|
||
|
goto skip_ring_stats;
|
||
|
}
|
||
|
|
||
|
@@ -566,56 +609,33 @@
|
||
|
static void bnxt_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
|
||
|
{
|
||
|
struct bnxt *bp = netdev_priv(dev);
|
||
|
- u32 i;
|
||
|
+ u32 i, j, num_str;
|
||
|
|
||
|
switch (stringset) {
|
||
|
- /* The number of strings must match BNXT_NUM_STATS defined above. */
|
||
|
case ETH_SS_STATS:
|
||
|
for (i = 0; i < bp->cp_nr_rings; i++) {
|
||
|
- sprintf(buf, "[%d]: rx_ucast_packets", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: rx_mcast_packets", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: rx_bcast_packets", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: rx_discards", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: rx_drops", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: rx_ucast_bytes", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: rx_mcast_bytes", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: rx_bcast_bytes", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tx_ucast_packets", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tx_mcast_packets", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tx_bcast_packets", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tx_discards", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tx_drops", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tx_ucast_bytes", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tx_mcast_bytes", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tx_bcast_bytes", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tpa_packets", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tpa_bytes", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tpa_events", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: tpa_aborts", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: rx_l4_csum_errors", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
- sprintf(buf, "[%d]: missed_irqs", i);
|
||
|
- buf += ETH_GSTRING_LEN;
|
||
|
+ num_str = ARRAY_SIZE(bnxt_ring_stats_str);
|
||
|
+ for (j = 0; j < num_str; j++) {
|
||
|
+ sprintf(buf, "[%d]: %s", i,
|
||
|
+ bnxt_ring_stats_str[j]);
|
||
|
+ buf += ETH_GSTRING_LEN;
|
||
|
+ }
|
||
|
+ if (!BNXT_SUPPORTS_TPA(bp))
|
||
|
+ goto skip_tpa_stats;
|
||
|
+
|
||
|
+ num_str = ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||
|
+ for (j = 0; j < num_str; j++) {
|
||
|
+ sprintf(buf, "[%d]: %s", i,
|
||
|
+ bnxt_ring_tpa_stats_str[j]);
|
||
|
+ buf += ETH_GSTRING_LEN;
|
||
|
+ }
|
||
|
+skip_tpa_stats:
|
||
|
+ num_str = ARRAY_SIZE(bnxt_ring_sw_stats_str);
|
||
|
+ for (j = 0; j < num_str; j++) {
|
||
|
+ sprintf(buf, "[%d]: %s", i,
|
||
|
+ bnxt_ring_sw_stats_str[j]);
|
||
|
+ buf += ETH_GSTRING_LEN;
|
||
|
+ }
|
||
|
}
|
||
|
for (i = 0; i < BNXT_NUM_SW_FUNC_STATS; i++) {
|
||
|
strcpy(buf, bnxt_sw_func_stats[i].string);
|