net: bnxt: use ethtool string helpers
authorRosen Penev <rosenp@gmail.com>
Tue, 29 Oct 2024 23:32:29 +0000 (16:32 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sun, 3 Nov 2024 19:09:25 +0000 (11:09 -0800)
Avoids having to use manual pointer manipulation.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Michael Chan <michael.chan@broadcom.com>
Link: https://patch.msgid.link/20241029233229.9385-1-rosenp@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

index e0ebe69110bf71bf180af15e271c327554871c73..6ef06579df53d9c37b68ce60cdbb31884693671b 100644 (file)
@@ -705,112 +705,105 @@ skip_ring_stats:
 static void bnxt_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
 {
        struct bnxt *bp = netdev_priv(dev);
-       static const char * const *str;
        u32 i, j, num_str;
+       const char *str;
 
        switch (stringset) {
        case ETH_SS_STATS:
                for (i = 0; i < bp->cp_nr_rings; i++) {
-                       if (is_rx_ring(bp, i)) {
-                               num_str = NUM_RING_RX_HW_STATS;
-                               for (j = 0; j < num_str; j++) {
-                                       sprintf(buf, "[%d]: %s", i,
-                                               bnxt_ring_rx_stats_str[j]);
-                                       buf += ETH_GSTRING_LEN;
+                       if (is_rx_ring(bp, i))
+                               for (j = 0; j < NUM_RING_RX_HW_STATS; j++) {
+                                       str = bnxt_ring_rx_stats_str[j];
+                                       ethtool_sprintf(&buf, "[%d]: %s", i,
+                                                       str);
                                }
-                       }
-                       if (is_tx_ring(bp, i)) {
-                               num_str = NUM_RING_TX_HW_STATS;
-                               for (j = 0; j < num_str; j++) {
-                                       sprintf(buf, "[%d]: %s", i,
-                                               bnxt_ring_tx_stats_str[j]);
-                                       buf += ETH_GSTRING_LEN;
+                       if (is_tx_ring(bp, i))
+                               for (j = 0; j < NUM_RING_TX_HW_STATS; j++) {
+                                       str = bnxt_ring_tx_stats_str[j];
+                                       ethtool_sprintf(&buf, "[%d]: %s", i,
+                                                       str);
                                }
-                       }
                        num_str = bnxt_get_num_tpa_ring_stats(bp);
                        if (!num_str || !is_rx_ring(bp, i))
                                goto skip_tpa_stats;
 
                        if (bp->max_tpa_v2)
-                               str = bnxt_ring_tpa2_stats_str;
+                               for (j = 0; j < num_str; j++) {
+                                       str = bnxt_ring_tpa2_stats_str[j];
+                                       ethtool_sprintf(&buf, "[%d]: %s", i,
+                                                       str);
+                               }
                        else
-                               str = bnxt_ring_tpa_stats_str;
-
-                       for (j = 0; j < num_str; j++) {
-                               sprintf(buf, "[%d]: %s", i, str[j]);
-                               buf += ETH_GSTRING_LEN;
-                       }
-skip_tpa_stats:
-                       if (is_rx_ring(bp, i)) {
-                               num_str = NUM_RING_RX_SW_STATS;
                                for (j = 0; j < num_str; j++) {
-                                       sprintf(buf, "[%d]: %s", i,
-                                               bnxt_rx_sw_stats_str[j]);
-                                       buf += ETH_GSTRING_LEN;
+                                       str = bnxt_ring_tpa_stats_str[j];
+                                       ethtool_sprintf(&buf, "[%d]: %s", i,
+                                                       str);
                                }
+skip_tpa_stats:
+                       if (is_rx_ring(bp, i))
+                               for (j = 0; j < NUM_RING_RX_SW_STATS; j++) {
+                                       str = bnxt_rx_sw_stats_str[j];
+                                       ethtool_sprintf(&buf, "[%d]: %s", i,
+                                                       str);
+                               }
+                       for (j = 0; j < NUM_RING_CMN_SW_STATS; j++) {
+                               str = bnxt_cmn_sw_stats_str[j];
+                               ethtool_sprintf(&buf, "[%d]: %s", i, str);
                        }
-                       num_str = NUM_RING_CMN_SW_STATS;
-                       for (j = 0; j < num_str; j++) {
-                               sprintf(buf, "[%d]: %s", i,
-                                       bnxt_cmn_sw_stats_str[j]);
-                               buf += ETH_GSTRING_LEN;
-                       }
-               }
-               for (i = 0; i < BNXT_NUM_RING_ERR_STATS; i++) {
-                       strscpy(buf, bnxt_ring_err_stats_arr[i], ETH_GSTRING_LEN);
-                       buf += ETH_GSTRING_LEN;
                }
+               for (i = 0; i < BNXT_NUM_RING_ERR_STATS; i++)
+                       ethtool_puts(&buf, bnxt_ring_err_stats_arr[i]);
 
-               if (bp->flags & BNXT_FLAG_PORT_STATS) {
+               if (bp->flags & BNXT_FLAG_PORT_STATS)
                        for (i = 0; i < BNXT_NUM_PORT_STATS; i++) {
-                               strcpy(buf, bnxt_port_stats_arr[i].string);
-                               buf += ETH_GSTRING_LEN;
+                               str = bnxt_port_stats_arr[i].string;
+                               ethtool_puts(&buf, str);
                        }
-               }
+
                if (bp->flags & BNXT_FLAG_PORT_STATS_EXT) {
                        u32 len;
 
                        len = min_t(u32, bp->fw_rx_stats_ext_size,
                                    ARRAY_SIZE(bnxt_port_stats_ext_arr));
                        for (i = 0; i < len; i++) {
-                               strcpy(buf, bnxt_port_stats_ext_arr[i].string);
-                               buf += ETH_GSTRING_LEN;
+                               str = bnxt_port_stats_ext_arr[i].string;
+                               ethtool_puts(&buf, str);
                        }
+
                        len = min_t(u32, bp->fw_tx_stats_ext_size,
                                    ARRAY_SIZE(bnxt_tx_port_stats_ext_arr));
                        for (i = 0; i < len; i++) {
-                               strcpy(buf,
-                                      bnxt_tx_port_stats_ext_arr[i].string);
-                               buf += ETH_GSTRING_LEN;
+                               str = bnxt_tx_port_stats_ext_arr[i].string;
+                               ethtool_puts(&buf, str);
                        }
+
                        if (bp->pri2cos_valid) {
                                for (i = 0; i < 8; i++) {
-                                       strcpy(buf,
-                                              bnxt_rx_bytes_pri_arr[i].string);
-                                       buf += ETH_GSTRING_LEN;
+                                       str = bnxt_rx_bytes_pri_arr[i].string;
+                                       ethtool_puts(&buf, str);
                                }
+
                                for (i = 0; i < 8; i++) {
-                                       strcpy(buf,
-                                              bnxt_rx_pkts_pri_arr[i].string);
-                                       buf += ETH_GSTRING_LEN;
+                                       str = bnxt_rx_pkts_pri_arr[i].string;
+                                       ethtool_puts(&buf, str);
                                }
+
                                for (i = 0; i < 8; i++) {
-                                       strcpy(buf,
-                                              bnxt_tx_bytes_pri_arr[i].string);
-                                       buf += ETH_GSTRING_LEN;
+                                       str = bnxt_tx_bytes_pri_arr[i].string;
+                                       ethtool_puts(&buf, str);
                                }
+
                                for (i = 0; i < 8; i++) {
-                                       strcpy(buf,
-                                              bnxt_tx_pkts_pri_arr[i].string);
-                                       buf += ETH_GSTRING_LEN;
+                                       str = bnxt_tx_pkts_pri_arr[i].string;
+                                       ethtool_puts(&buf, str);
                                }
                        }
                }
                break;
        case ETH_SS_TEST:
                if (bp->num_tests)
-                       memcpy(buf, bp->test_info->string,
-                              bp->num_tests * ETH_GSTRING_LEN);
+                       for (i = 0; i < bp->num_tests; i++)
+                               ethtool_puts(&buf, bp->test_info->string[i]);
                break;
        default:
                netdev_err(bp->dev, "bnxt_get_strings invalid request %x\n",