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

Configure Feed

Select the types of activity you want to include in your feed.

net: freescale: 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>
Reviewed-by: Lee Trager <lee@trager.us>
Link: https://patch.msgid.link/20241025203757.288367-1-rosenp@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Rosen Penev and committed by
Jakub Kicinski
f611cc38 cf44bd08

+52 -89
+14 -28
drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c
··· 243 243 static void dpaa_get_strings(struct net_device *net_dev, u32 stringset, 244 244 u8 *data) 245 245 { 246 - unsigned int i, j, num_cpus, size; 247 - char string_cpu[ETH_GSTRING_LEN]; 248 - u8 *strings; 246 + unsigned int i, j, num_cpus; 249 247 250 - memset(string_cpu, 0, sizeof(string_cpu)); 251 - strings = data; 252 - num_cpus = num_online_cpus(); 253 - size = DPAA_STATS_GLOBAL_LEN * ETH_GSTRING_LEN; 248 + num_cpus = num_online_cpus(); 254 249 255 250 for (i = 0; i < DPAA_STATS_PERCPU_LEN; i++) { 256 - for (j = 0; j < num_cpus; j++) { 257 - snprintf(string_cpu, ETH_GSTRING_LEN, "%s [CPU %d]", 258 - dpaa_stats_percpu[i], j); 259 - memcpy(strings, string_cpu, ETH_GSTRING_LEN); 260 - strings += ETH_GSTRING_LEN; 261 - } 262 - snprintf(string_cpu, ETH_GSTRING_LEN, "%s [TOTAL]", 263 - dpaa_stats_percpu[i]); 264 - memcpy(strings, string_cpu, ETH_GSTRING_LEN); 265 - strings += ETH_GSTRING_LEN; 266 - } 267 - for (j = 0; j < num_cpus; j++) { 268 - snprintf(string_cpu, ETH_GSTRING_LEN, 269 - "bpool [CPU %d]", j); 270 - memcpy(strings, string_cpu, ETH_GSTRING_LEN); 271 - strings += ETH_GSTRING_LEN; 272 - } 273 - snprintf(string_cpu, ETH_GSTRING_LEN, "bpool [TOTAL]"); 274 - memcpy(strings, string_cpu, ETH_GSTRING_LEN); 275 - strings += ETH_GSTRING_LEN; 251 + for (j = 0; j < num_cpus; j++) 252 + ethtool_sprintf(&data, "%s [CPU %d]", 253 + dpaa_stats_percpu[i], j); 276 254 277 - memcpy(strings, dpaa_stats_global, size); 255 + ethtool_sprintf(&data, "%s [TOTAL]", dpaa_stats_percpu[i]); 256 + } 257 + for (i = 0; i < num_cpus; i++) 258 + ethtool_sprintf(&data, "bpool [CPU %d]", i); 259 + 260 + ethtool_puts(&data, "bpool [TOTAL]"); 261 + 262 + for (i = 0; i < DPAA_STATS_GLOBAL_LEN; i++) 263 + ethtool_puts(&data, dpaa_stats_global[i]); 278 264 } 279 265 280 266 static int dpaa_get_hash_opts(struct net_device *dev,
+5 -10
drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
··· 217 217 static void dpaa2_eth_get_strings(struct net_device *netdev, u32 stringset, 218 218 u8 *data) 219 219 { 220 - u8 *p = data; 221 220 int i; 222 221 223 222 switch (stringset) { 224 223 case ETH_SS_STATS: 225 - for (i = 0; i < DPAA2_ETH_NUM_STATS; i++) { 226 - strscpy(p, dpaa2_ethtool_stats[i], ETH_GSTRING_LEN); 227 - p += ETH_GSTRING_LEN; 228 - } 229 - for (i = 0; i < DPAA2_ETH_NUM_EXTRA_STATS; i++) { 230 - strscpy(p, dpaa2_ethtool_extras[i], ETH_GSTRING_LEN); 231 - p += ETH_GSTRING_LEN; 232 - } 233 - dpaa2_mac_get_strings(p); 224 + for (i = 0; i < DPAA2_ETH_NUM_STATS; i++) 225 + ethtool_puts(&data, dpaa2_ethtool_stats[i]); 226 + for (i = 0; i < DPAA2_ETH_NUM_EXTRA_STATS; i++) 227 + ethtool_puts(&data, dpaa2_ethtool_extras[i]); 228 + dpaa2_mac_get_strings(&data); 234 229 break; 235 230 } 236 231 }
+3 -6
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
··· 558 558 return DPAA2_MAC_NUM_STATS; 559 559 } 560 560 561 - void dpaa2_mac_get_strings(u8 *data) 561 + void dpaa2_mac_get_strings(u8 **data) 562 562 { 563 - u8 *p = data; 564 563 int i; 565 564 566 - for (i = 0; i < DPAA2_MAC_NUM_STATS; i++) { 567 - strscpy(p, dpaa2_mac_ethtool_stats[i], ETH_GSTRING_LEN); 568 - p += ETH_GSTRING_LEN; 569 - } 565 + for (i = 0; i < DPAA2_MAC_NUM_STATS; i++) 566 + ethtool_puts(data, dpaa2_mac_ethtool_stats[i]); 570 567 } 571 568 572 569 void dpaa2_mac_get_ethtool_stats(struct dpaa2_mac *mac, u64 *data)
+1 -1
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.h
··· 49 49 50 50 int dpaa2_mac_get_sset_count(void); 51 51 52 - void dpaa2_mac_get_strings(u8 *data); 52 + void dpaa2_mac_get_strings(u8 **data); 53 53 54 54 void dpaa2_mac_get_ethtool_stats(struct dpaa2_mac *mac, u64 *data); 55 55
+4 -5
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-ethtool.c
··· 170 170 static void dpaa2_switch_ethtool_get_strings(struct net_device *netdev, 171 171 u32 stringset, u8 *data) 172 172 { 173 - u8 *p = data; 173 + const char *str; 174 174 int i; 175 175 176 176 switch (stringset) { 177 177 case ETH_SS_STATS: 178 178 for (i = 0; i < DPAA2_SWITCH_NUM_COUNTERS; i++) { 179 - memcpy(p, dpaa2_switch_ethtool_counters[i].name, 180 - ETH_GSTRING_LEN); 181 - p += ETH_GSTRING_LEN; 179 + str = dpaa2_switch_ethtool_counters[i].name; 180 + ethtool_puts(&data, str); 182 181 } 183 - dpaa2_mac_get_strings(p); 182 + dpaa2_mac_get_strings(&data); 184 183 break; 185 184 } 186 185 }
+11 -24
drivers/net/ethernet/freescale/enetc/enetc_ethtool.c
··· 247 247 static void enetc_get_strings(struct net_device *ndev, u32 stringset, u8 *data) 248 248 { 249 249 struct enetc_ndev_priv *priv = netdev_priv(ndev); 250 - u8 *p = data; 251 250 int i, j; 252 251 253 252 switch (stringset) { 254 253 case ETH_SS_STATS: 255 - for (i = 0; i < ARRAY_SIZE(enetc_si_counters); i++) { 256 - strscpy(p, enetc_si_counters[i].name, ETH_GSTRING_LEN); 257 - p += ETH_GSTRING_LEN; 258 - } 259 - for (i = 0; i < priv->num_tx_rings; i++) { 260 - for (j = 0; j < ARRAY_SIZE(tx_ring_stats); j++) { 261 - snprintf(p, ETH_GSTRING_LEN, tx_ring_stats[j], 262 - i); 263 - p += ETH_GSTRING_LEN; 264 - } 265 - } 266 - for (i = 0; i < priv->num_rx_rings; i++) { 267 - for (j = 0; j < ARRAY_SIZE(rx_ring_stats); j++) { 268 - snprintf(p, ETH_GSTRING_LEN, rx_ring_stats[j], 269 - i); 270 - p += ETH_GSTRING_LEN; 271 - } 272 - } 254 + for (i = 0; i < ARRAY_SIZE(enetc_si_counters); i++) 255 + ethtool_puts(&data, enetc_si_counters[i].name); 256 + for (i = 0; i < priv->num_tx_rings; i++) 257 + for (j = 0; j < ARRAY_SIZE(tx_ring_stats); j++) 258 + ethtool_sprintf(&data, tx_ring_stats[j], i); 259 + for (i = 0; i < priv->num_rx_rings; i++) 260 + for (j = 0; j < ARRAY_SIZE(rx_ring_stats); j++) 261 + ethtool_sprintf(&data, rx_ring_stats[j], i); 273 262 274 263 if (!enetc_si_is_pf(priv->si)) 275 264 break; 276 265 277 - for (i = 0; i < ARRAY_SIZE(enetc_port_counters); i++) { 278 - strscpy(p, enetc_port_counters[i].name, 279 - ETH_GSTRING_LEN); 280 - p += ETH_GSTRING_LEN; 281 - } 266 + for (i = 0; i < ARRAY_SIZE(enetc_port_counters); i++) 267 + ethtool_puts(&data, enetc_port_counters[i].name); 268 + 282 269 break; 283 270 } 284 271 }
+5 -3
drivers/net/ethernet/freescale/gianfar_ethtool.c
··· 115 115 static void gfar_gstrings(struct net_device *dev, u32 stringset, u8 * buf) 116 116 { 117 117 struct gfar_private *priv = netdev_priv(dev); 118 + int i; 118 119 119 120 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) 120 - memcpy(buf, stat_gstrings, GFAR_STATS_LEN * ETH_GSTRING_LEN); 121 + for (i = 0; i < GFAR_STATS_LEN; i++) 122 + ethtool_puts(&buf, stat_gstrings[i]); 121 123 else 122 - memcpy(buf, stat_gstrings, 123 - GFAR_EXTRA_STATS_LEN * ETH_GSTRING_LEN); 124 + for (i = 0; i < GFAR_EXTRA_STATS_LEN; i++) 125 + ethtool_puts(&buf, stat_gstrings[i]); 124 126 } 125 127 126 128 /* Fill in an array of 64-bit statistics from various sources.
+9 -12
drivers/net/ethernet/freescale/ucc_geth_ethtool.c
··· 287 287 { 288 288 struct ucc_geth_private *ugeth = netdev_priv(netdev); 289 289 u32 stats_mode = ugeth->ug_info->statisticsMode; 290 + int i; 290 291 291 - if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_HARDWARE) { 292 - memcpy(buf, hw_stat_gstrings, UEC_HW_STATS_LEN * 293 - ETH_GSTRING_LEN); 294 - buf += UEC_HW_STATS_LEN * ETH_GSTRING_LEN; 295 - } 296 - if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_TX) { 297 - memcpy(buf, tx_fw_stat_gstrings, UEC_TX_FW_STATS_LEN * 298 - ETH_GSTRING_LEN); 299 - buf += UEC_TX_FW_STATS_LEN * ETH_GSTRING_LEN; 300 - } 292 + if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_HARDWARE) 293 + for (i = 0; i < UEC_HW_STATS_LEN; i++) 294 + ethtool_puts(&buf, hw_stat_gstrings[i]); 295 + if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_TX) 296 + for (i = 0; i < UEC_TX_FW_STATS_LEN; i++) 297 + ethtool_puts(&buf, tx_fw_stat_gstrings[i]); 301 298 if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX) 302 - memcpy(buf, rx_fw_stat_gstrings, UEC_RX_FW_STATS_LEN * 303 - ETH_GSTRING_LEN); 299 + for (i = 0; i < UEC_RX_FW_STATS_LEN; i++) 300 + ethtool_puts(&buf, rx_fw_stat_gstrings[i]); 304 301 } 305 302 306 303 static void uec_get_ethtool_stats(struct net_device *netdev,