Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: bnx2x: use ethtool string helpers

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>

authored by

Rosen Penev and committed by
Jakub Kicinski
4069dcb7 720d3314

+31 -37
+31 -37
drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
··· 39 39 int size; 40 40 char string[ETH_GSTRING_LEN]; 41 41 } bnx2x_q_stats_arr[] = { 42 - /* 1 */ { Q_STATS_OFFSET32(total_bytes_received_hi), 8, "[%s]: rx_bytes" }, 42 + /* 1 */ { Q_STATS_OFFSET32(total_bytes_received_hi), 8, "[%d]: rx_bytes" }, 43 43 { Q_STATS_OFFSET32(total_unicast_packets_received_hi), 44 - 8, "[%s]: rx_ucast_packets" }, 44 + 8, "[%d]: rx_ucast_packets" }, 45 45 { Q_STATS_OFFSET32(total_multicast_packets_received_hi), 46 - 8, "[%s]: rx_mcast_packets" }, 46 + 8, "[%d]: rx_mcast_packets" }, 47 47 { Q_STATS_OFFSET32(total_broadcast_packets_received_hi), 48 - 8, "[%s]: rx_bcast_packets" }, 49 - { Q_STATS_OFFSET32(no_buff_discard_hi), 8, "[%s]: rx_discards" }, 48 + 8, "[%d]: rx_bcast_packets" }, 49 + { Q_STATS_OFFSET32(no_buff_discard_hi), 8, "[%d]: rx_discards" }, 50 50 { Q_STATS_OFFSET32(rx_err_discard_pkt), 51 - 4, "[%s]: rx_phy_ip_err_discards"}, 51 + 4, "[%d]: rx_phy_ip_err_discards"}, 52 52 { Q_STATS_OFFSET32(rx_skb_alloc_failed), 53 - 4, "[%s]: rx_skb_alloc_discard" }, 54 - { Q_STATS_OFFSET32(hw_csum_err), 4, "[%s]: rx_csum_offload_errors" }, 55 - { Q_STATS_OFFSET32(driver_xoff), 4, "[%s]: tx_exhaustion_events" }, 56 - { Q_STATS_OFFSET32(total_bytes_transmitted_hi), 8, "[%s]: tx_bytes" }, 53 + 4, "[%d]: rx_skb_alloc_discard" }, 54 + { Q_STATS_OFFSET32(hw_csum_err), 4, "[%d]: rx_csum_offload_errors" }, 55 + { Q_STATS_OFFSET32(driver_xoff), 4, "[%d]: tx_exhaustion_events" }, 56 + { Q_STATS_OFFSET32(total_bytes_transmitted_hi), 8, "[%d]: tx_bytes" }, 57 57 /* 10 */{ Q_STATS_OFFSET32(total_unicast_packets_transmitted_hi), 58 - 8, "[%s]: tx_ucast_packets" }, 58 + 8, "[%d]: tx_ucast_packets" }, 59 59 { Q_STATS_OFFSET32(total_multicast_packets_transmitted_hi), 60 - 8, "[%s]: tx_mcast_packets" }, 60 + 8, "[%d]: tx_mcast_packets" }, 61 61 { Q_STATS_OFFSET32(total_broadcast_packets_transmitted_hi), 62 - 8, "[%s]: tx_bcast_packets" }, 62 + 8, "[%d]: tx_bcast_packets" }, 63 63 { Q_STATS_OFFSET32(total_tpa_aggregations_hi), 64 - 8, "[%s]: tpa_aggregations" }, 64 + 8, "[%d]: tpa_aggregations" }, 65 65 { Q_STATS_OFFSET32(total_tpa_aggregated_frames_hi), 66 - 8, "[%s]: tpa_aggregated_frames"}, 67 - { Q_STATS_OFFSET32(total_tpa_bytes_hi), 8, "[%s]: tpa_bytes"}, 66 + 8, "[%d]: tpa_aggregated_frames"}, 67 + { Q_STATS_OFFSET32(total_tpa_bytes_hi), 8, "[%d]: tpa_bytes"}, 68 68 { Q_STATS_OFFSET32(driver_filtered_tx_pkt), 69 - 4, "[%s]: driver_filtered_tx_pkt" } 69 + 4, "[%d]: driver_filtered_tx_pkt" } 70 70 }; 71 71 72 72 #define BNX2X_NUM_Q_STATS ARRAY_SIZE(bnx2x_q_stats_arr) ··· 3184 3184 static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 3185 3185 { 3186 3186 struct bnx2x *bp = netdev_priv(dev); 3187 - int i, j, k, start; 3188 - char queue_name[MAX_QUEUE_NAME_LEN+1]; 3187 + const char *str; 3188 + int i, j, start; 3189 3189 3190 3190 switch (stringset) { 3191 3191 case ETH_SS_STATS: 3192 - k = 0; 3193 3192 if (is_multi(bp)) { 3194 3193 for_each_eth_queue(bp, i) { 3195 - memset(queue_name, 0, sizeof(queue_name)); 3196 - snprintf(queue_name, sizeof(queue_name), 3197 - "%d", i); 3198 - for (j = 0; j < BNX2X_NUM_Q_STATS; j++) 3199 - snprintf(buf + (k + j)*ETH_GSTRING_LEN, 3200 - ETH_GSTRING_LEN, 3201 - bnx2x_q_stats_arr[j].string, 3202 - queue_name); 3203 - k += BNX2X_NUM_Q_STATS; 3194 + for (j = 0; j < BNX2X_NUM_Q_STATS; j++) { 3195 + str = bnx2x_q_stats_arr[j].string; 3196 + ethtool_sprintf(&buf, str, i); 3197 + } 3204 3198 } 3205 3199 } 3206 3200 3207 - for (i = 0, j = 0; i < BNX2X_NUM_STATS; i++) { 3201 + for (i = 0; i < BNX2X_NUM_STATS; i++) { 3208 3202 if (HIDE_PORT_STAT(bp) && IS_PORT_STAT(i)) 3209 3203 continue; 3210 - strcpy(buf + (k + j)*ETH_GSTRING_LEN, 3211 - bnx2x_stats_arr[i].string); 3212 - j++; 3204 + ethtool_puts(&buf, bnx2x_stats_arr[i].string); 3213 3205 } 3214 3206 3215 3207 break; 3216 3208 3217 3209 case ETH_SS_TEST: 3210 + if (IS_VF(bp)) 3211 + break; 3218 3212 /* First 4 tests cannot be done in MF mode */ 3219 3213 if (!IS_MF(bp)) 3220 3214 start = 0; 3221 3215 else 3222 3216 start = 4; 3223 - memcpy(buf, bnx2x_tests_str_arr + start, 3224 - ETH_GSTRING_LEN * BNX2X_NUM_TESTS(bp)); 3217 + for (i = start; i < BNX2X_NUM_TESTS_SF; i++) 3218 + ethtool_puts(&buf, bnx2x_tests_str_arr[i]); 3225 3219 break; 3226 3220 3227 3221 case ETH_SS_PRIV_FLAGS: 3228 - memcpy(buf, bnx2x_private_arr, 3229 - ETH_GSTRING_LEN * BNX2X_PRI_FLAG_LEN); 3222 + for (i = 0; i < BNX2X_PRI_FLAG_LEN; i++) 3223 + ethtool_puts(&buf, bnx2x_private_arr[i]); 3230 3224 break; 3231 3225 } 3232 3226 }