net: bnx2x: use ethtool string helpers
authorRosen Penev <rosenp@gmail.com>
Mon, 4 Nov 2024 20:23:26 +0000 (12:23 -0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 7 Nov 2024 01:50:37 +0000 (17:50 -0800)
The latter is the preferred way to copy ethtool strings.

Avoids manually incrementing the pointer. Cleans up the code quite well.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://patch.msgid.link/20241104202326.78418-1-rosenp@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c

index adf7b6b94941c2fb2ae7b25ee43b00158ae6ba85..44199855ebfb965c42630d0e6f6d40bcfe96ff40 100644 (file)
@@ -39,34 +39,34 @@ static const struct {
        int size;
        char string[ETH_GSTRING_LEN];
 } bnx2x_q_stats_arr[] = {
-/* 1 */        { Q_STATS_OFFSET32(total_bytes_received_hi), 8, "[%s]: rx_bytes" },
+/* 1 */        { Q_STATS_OFFSET32(total_bytes_received_hi), 8, "[%d]: rx_bytes" },
        { Q_STATS_OFFSET32(total_unicast_packets_received_hi),
-                                               8, "[%s]: rx_ucast_packets" },
+                                               8, "[%d]: rx_ucast_packets" },
        { Q_STATS_OFFSET32(total_multicast_packets_received_hi),
-                                               8, "[%s]: rx_mcast_packets" },
+                                               8, "[%d]: rx_mcast_packets" },
        { Q_STATS_OFFSET32(total_broadcast_packets_received_hi),
-                                               8, "[%s]: rx_bcast_packets" },
-       { Q_STATS_OFFSET32(no_buff_discard_hi), 8, "[%s]: rx_discards" },
+                                               8, "[%d]: rx_bcast_packets" },
+       { Q_STATS_OFFSET32(no_buff_discard_hi), 8, "[%d]: rx_discards" },
        { Q_STATS_OFFSET32(rx_err_discard_pkt),
-                                        4, "[%s]: rx_phy_ip_err_discards"},
+                                        4, "[%d]: rx_phy_ip_err_discards"},
        { Q_STATS_OFFSET32(rx_skb_alloc_failed),
-                                        4, "[%s]: rx_skb_alloc_discard" },
-       { Q_STATS_OFFSET32(hw_csum_err), 4, "[%s]: rx_csum_offload_errors" },
-       { Q_STATS_OFFSET32(driver_xoff), 4, "[%s]: tx_exhaustion_events" },
-       { Q_STATS_OFFSET32(total_bytes_transmitted_hi), 8, "[%s]: tx_bytes" },
+                                        4, "[%d]: rx_skb_alloc_discard" },
+       { Q_STATS_OFFSET32(hw_csum_err), 4, "[%d]: rx_csum_offload_errors" },
+       { Q_STATS_OFFSET32(driver_xoff), 4, "[%d]: tx_exhaustion_events" },
+       { Q_STATS_OFFSET32(total_bytes_transmitted_hi), 8, "[%d]: tx_bytes" },
 /* 10 */{ Q_STATS_OFFSET32(total_unicast_packets_transmitted_hi),
-                                               8, "[%s]: tx_ucast_packets" },
+                                               8, "[%d]: tx_ucast_packets" },
        { Q_STATS_OFFSET32(total_multicast_packets_transmitted_hi),
-                                               8, "[%s]: tx_mcast_packets" },
+                                               8, "[%d]: tx_mcast_packets" },
        { Q_STATS_OFFSET32(total_broadcast_packets_transmitted_hi),
-                                               8, "[%s]: tx_bcast_packets" },
+                                               8, "[%d]: tx_bcast_packets" },
        { Q_STATS_OFFSET32(total_tpa_aggregations_hi),
-                                               8, "[%s]: tpa_aggregations" },
+                                               8, "[%d]: tpa_aggregations" },
        { Q_STATS_OFFSET32(total_tpa_aggregated_frames_hi),
-                                       8, "[%s]: tpa_aggregated_frames"},
-       { Q_STATS_OFFSET32(total_tpa_bytes_hi), 8, "[%s]: tpa_bytes"},
+                                       8, "[%d]: tpa_aggregated_frames"},
+       { Q_STATS_OFFSET32(total_tpa_bytes_hi), 8, "[%d]: tpa_bytes"},
        { Q_STATS_OFFSET32(driver_filtered_tx_pkt),
-                                       4, "[%s]: driver_filtered_tx_pkt" }
+                                       4, "[%d]: driver_filtered_tx_pkt" }
 };
 
 #define BNX2X_NUM_Q_STATS ARRAY_SIZE(bnx2x_q_stats_arr)
@@ -3184,49 +3184,43 @@ static u32 bnx2x_get_private_flags(struct net_device *dev)
 static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
 {
        struct bnx2x *bp = netdev_priv(dev);
-       int i, j, k, start;
-       char queue_name[MAX_QUEUE_NAME_LEN+1];
+       const char *str;
+       int i, j, start;
 
        switch (stringset) {
        case ETH_SS_STATS:
-               k = 0;
                if (is_multi(bp)) {
                        for_each_eth_queue(bp, i) {
-                               memset(queue_name, 0, sizeof(queue_name));
-                               snprintf(queue_name, sizeof(queue_name),
-                                        "%d", i);
-                               for (j = 0; j < BNX2X_NUM_Q_STATS; j++)
-                                       snprintf(buf + (k + j)*ETH_GSTRING_LEN,
-                                               ETH_GSTRING_LEN,
-                                               bnx2x_q_stats_arr[j].string,
-                                               queue_name);
-                               k += BNX2X_NUM_Q_STATS;
+                               for (j = 0; j < BNX2X_NUM_Q_STATS; j++) {
+                                       str = bnx2x_q_stats_arr[j].string;
+                                       ethtool_sprintf(&buf, str, i);
+                               }
                        }
                }
 
-               for (i = 0, j = 0; i < BNX2X_NUM_STATS; i++) {
+               for (i = 0; i < BNX2X_NUM_STATS; i++) {
                        if (HIDE_PORT_STAT(bp) && IS_PORT_STAT(i))
                                continue;
-                       strcpy(buf + (k + j)*ETH_GSTRING_LEN,
-                                  bnx2x_stats_arr[i].string);
-                       j++;
+                       ethtool_puts(&buf, bnx2x_stats_arr[i].string);
                }
 
                break;
 
        case ETH_SS_TEST:
+               if (IS_VF(bp))
+                       break;
                /* First 4 tests cannot be done in MF mode */
                if (!IS_MF(bp))
                        start = 0;
                else
                        start = 4;
-               memcpy(buf, bnx2x_tests_str_arr + start,
-                      ETH_GSTRING_LEN * BNX2X_NUM_TESTS(bp));
+               for (i = start; i < BNX2X_NUM_TESTS_SF; i++)
+                       ethtool_puts(&buf, bnx2x_tests_str_arr[i]);
                break;
 
        case ETH_SS_PRIV_FLAGS:
-               memcpy(buf, bnx2x_private_arr,
-                      ETH_GSTRING_LEN * BNX2X_PRI_FLAG_LEN);
+               for (i = 0; i < BNX2X_PRI_FLAG_LEN; i++)
+                       ethtool_puts(&buf, bnx2x_private_arr[i]);
                break;
        }
 }