Commit 2d7dfe2d authored by Rosen Penev's avatar Rosen Penev Committed by Jakub Kicinski
Browse files

net: marvell: 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: default avatarRosen Penev <rosenp@gmail.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20241024195833.176843-1-rosenp@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 77693e6c
Loading
Loading
Loading
Loading
+13 −26
Original line number Diff line number Diff line
@@ -1985,45 +1985,32 @@ static void mvpp2_ethtool_get_strings(struct net_device *netdev, u32 sset,
				      u8 *data)
{
	struct mvpp2_port *port = netdev_priv(netdev);
	const char *str;
	int i, q;

	if (sset != ETH_SS_STATS)
		return;

	for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_mib_regs); i++) {
		strscpy(data, mvpp2_ethtool_mib_regs[i].string,
			ETH_GSTRING_LEN);
		data += ETH_GSTRING_LEN;
	}
	for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_mib_regs); i++)
		ethtool_puts(&data, mvpp2_ethtool_mib_regs[i].string);

	for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_port_regs); i++) {
		strscpy(data, mvpp2_ethtool_port_regs[i].string,
			ETH_GSTRING_LEN);
		data += ETH_GSTRING_LEN;
	}
	for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_port_regs); i++)
		ethtool_puts(&data, mvpp2_ethtool_port_regs[i].string);

	for (q = 0; q < port->ntxqs; q++) {
	for (q = 0; q < port->ntxqs; q++)
		for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_txq_regs); i++) {
			snprintf(data, ETH_GSTRING_LEN,
				 mvpp2_ethtool_txq_regs[i].string, q);
			data += ETH_GSTRING_LEN;
		}
			str = mvpp2_ethtool_txq_regs[i].string;
			ethtool_sprintf(&data, str, q);
		}

	for (q = 0; q < port->nrxqs; q++) {
	for (q = 0; q < port->nrxqs; q++)
		for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_rxq_regs); i++) {
			snprintf(data, ETH_GSTRING_LEN,
				 mvpp2_ethtool_rxq_regs[i].string,
				 q);
			data += ETH_GSTRING_LEN;
		}
			str = mvpp2_ethtool_rxq_regs[i].string;
			ethtool_sprintf(&data, str, q);
		}

	for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_xdp); i++) {
		strscpy(data, mvpp2_ethtool_xdp[i].string,
			ETH_GSTRING_LEN);
		data += ETH_GSTRING_LEN;
	}
	for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_xdp); i++)
		ethtool_puts(&data, mvpp2_ethtool_xdp[i].string);
}

static void
+12 −19
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ static const char octep_gstrings_global_stats[][ETH_GSTRING_LEN] = {
	"rx_err_pkts",
};

#define OCTEP_GLOBAL_STATS_CNT (sizeof(octep_gstrings_global_stats) / ETH_GSTRING_LEN)
#define OCTEP_GLOBAL_STATS_CNT ARRAY_SIZE(octep_gstrings_global_stats)

static const char octep_gstrings_tx_q_stats[][ETH_GSTRING_LEN] = {
	"tx_packets_posted[Q-%u]",
@@ -56,7 +56,7 @@ static const char octep_gstrings_tx_q_stats[][ETH_GSTRING_LEN] = {
	"tx_busy[Q-%u]",
};

#define OCTEP_TX_Q_STATS_CNT (sizeof(octep_gstrings_tx_q_stats) / ETH_GSTRING_LEN)
#define OCTEP_TX_Q_STATS_CNT ARRAY_SIZE(octep_gstrings_tx_q_stats)

static const char octep_gstrings_rx_q_stats[][ETH_GSTRING_LEN] = {
	"rx_packets[Q-%u]",
@@ -64,7 +64,7 @@ static const char octep_gstrings_rx_q_stats[][ETH_GSTRING_LEN] = {
	"rx_alloc_errors[Q-%u]",
};

#define OCTEP_RX_Q_STATS_CNT (sizeof(octep_gstrings_rx_q_stats) / ETH_GSTRING_LEN)
#define OCTEP_RX_Q_STATS_CNT ARRAY_SIZE(octep_gstrings_rx_q_stats)

static void octep_get_drvinfo(struct net_device *netdev,
			      struct ethtool_drvinfo *info)
@@ -80,31 +80,24 @@ static void octep_get_strings(struct net_device *netdev,
{
	struct octep_device *oct = netdev_priv(netdev);
	u16 num_queues = CFG_GET_PORTS_ACTIVE_IO_RINGS(oct->conf);
	char *strings = (char *)data;
	const char *str;
	int i, j;

	switch (stringset) {
	case ETH_SS_STATS:
		for (i = 0; i < OCTEP_GLOBAL_STATS_CNT; i++) {
			snprintf(strings, ETH_GSTRING_LEN,
				 octep_gstrings_global_stats[i]);
			strings += ETH_GSTRING_LEN;
		}
		for (i = 0; i < OCTEP_GLOBAL_STATS_CNT; i++)
			ethtool_puts(&data, octep_gstrings_global_stats[i]);

		for (i = 0; i < num_queues; i++) {
		for (i = 0; i < num_queues; i++)
			for (j = 0; j < OCTEP_TX_Q_STATS_CNT; j++) {
				snprintf(strings, ETH_GSTRING_LEN,
					 octep_gstrings_tx_q_stats[j], i);
				strings += ETH_GSTRING_LEN;
			}
				str = octep_gstrings_tx_q_stats[j];
				ethtool_sprintf(&data, str, i);
			}

		for (i = 0; i < num_queues; i++) {
		for (i = 0; i < num_queues; i++)
			for (j = 0; j < OCTEP_RX_Q_STATS_CNT; j++) {
				snprintf(strings, ETH_GSTRING_LEN,
					 octep_gstrings_rx_q_stats[j], i);
				strings += ETH_GSTRING_LEN;
			}
				str = octep_gstrings_rx_q_stats[j];
				ethtool_sprintf(&data, str, i);
			}
		break;
	default:
+12 −19
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ static const char octep_vf_gstrings_global_stats[][ETH_GSTRING_LEN] = {
	"rx_dropped_bytes_fifo_full",
};

#define OCTEP_VF_GLOBAL_STATS_CNT (sizeof(octep_vf_gstrings_global_stats) / ETH_GSTRING_LEN)
#define OCTEP_VF_GLOBAL_STATS_CNT ARRAY_SIZE(octep_vf_gstrings_global_stats)

static const char octep_vf_gstrings_tx_q_stats[][ETH_GSTRING_LEN] = {
	"tx_packets_posted[Q-%u]",
@@ -34,7 +34,7 @@ static const char octep_vf_gstrings_tx_q_stats[][ETH_GSTRING_LEN] = {
	"tx_busy[Q-%u]",
};

#define OCTEP_VF_TX_Q_STATS_CNT (sizeof(octep_vf_gstrings_tx_q_stats) / ETH_GSTRING_LEN)
#define OCTEP_VF_TX_Q_STATS_CNT ARRAY_SIZE(octep_vf_gstrings_tx_q_stats)

static const char octep_vf_gstrings_rx_q_stats[][ETH_GSTRING_LEN] = {
	"rx_packets[Q-%u]",
@@ -42,7 +42,7 @@ static const char octep_vf_gstrings_rx_q_stats[][ETH_GSTRING_LEN] = {
	"rx_alloc_errors[Q-%u]",
};

#define OCTEP_VF_RX_Q_STATS_CNT (sizeof(octep_vf_gstrings_rx_q_stats) / ETH_GSTRING_LEN)
#define OCTEP_VF_RX_Q_STATS_CNT ARRAY_SIZE(octep_vf_gstrings_rx_q_stats)

static void octep_vf_get_drvinfo(struct net_device *netdev,
				 struct ethtool_drvinfo *info)
@@ -58,31 +58,24 @@ static void octep_vf_get_strings(struct net_device *netdev,
{
	struct octep_vf_device *oct = netdev_priv(netdev);
	u16 num_queues = CFG_GET_PORTS_ACTIVE_IO_RINGS(oct->conf);
	char *strings = (char *)data;
	const char *str;
	int i, j;

	switch (stringset) {
	case ETH_SS_STATS:
		for (i = 0; i < OCTEP_VF_GLOBAL_STATS_CNT; i++) {
			snprintf(strings, ETH_GSTRING_LEN,
				 octep_vf_gstrings_global_stats[i]);
			strings += ETH_GSTRING_LEN;
		}
		for (i = 0; i < OCTEP_VF_GLOBAL_STATS_CNT; i++)
			ethtool_puts(&data, octep_vf_gstrings_global_stats[i]);

		for (i = 0; i < num_queues; i++) {
		for (i = 0; i < num_queues; i++)
			for (j = 0; j < OCTEP_VF_TX_Q_STATS_CNT; j++) {
				snprintf(strings, ETH_GSTRING_LEN,
					 octep_vf_gstrings_tx_q_stats[j], i);
				strings += ETH_GSTRING_LEN;
			}
				str = octep_vf_gstrings_tx_q_stats[j];
				ethtool_sprintf(&data, str, i);
			}

		for (i = 0; i < num_queues; i++) {
		for (i = 0; i < num_queues; i++)
			for (j = 0; j < OCTEP_VF_RX_Q_STATS_CNT; j++) {
				snprintf(strings, ETH_GSTRING_LEN,
					 octep_vf_gstrings_rx_q_stats[j], i);
				strings += ETH_GSTRING_LEN;
			}
				str = octep_vf_gstrings_rx_q_stats[j];
				ethtool_sprintf(&data, str, i);
			}
		break;
	default:
+29 −49
Original line number Diff line number Diff line
@@ -85,26 +85,22 @@ static void otx2_get_qset_strings(struct otx2_nic *pfvf, u8 **data, int qset)
	int start_qidx = qset * pfvf->hw.rx_queues;
	int qidx, stats;

	for (qidx = 0; qidx < pfvf->hw.rx_queues; qidx++) {
		for (stats = 0; stats < otx2_n_queue_stats; stats++) {
			sprintf(*data, "rxq%d: %s", qidx + start_qidx,
	for (qidx = 0; qidx < pfvf->hw.rx_queues; qidx++)
		for (stats = 0; stats < otx2_n_queue_stats; stats++)
			ethtool_sprintf(data, "rxq%d: %s", qidx + start_qidx,
					otx2_queue_stats[stats].name);
			*data += ETH_GSTRING_LEN;
		}
	}

	for (qidx = 0; qidx < otx2_get_total_tx_queues(pfvf); qidx++) {
		for (stats = 0; stats < otx2_n_queue_stats; stats++) {
	for (qidx = 0; qidx < otx2_get_total_tx_queues(pfvf); qidx++)
		for (stats = 0; stats < otx2_n_queue_stats; stats++)
			if (qidx >= pfvf->hw.non_qos_queues)
				sprintf(*data, "txq_qos%d: %s",
					qidx + start_qidx - pfvf->hw.non_qos_queues,
				ethtool_sprintf(data, "txq_qos%d: %s",
						qidx + start_qidx -
							pfvf->hw.non_qos_queues,
						otx2_queue_stats[stats].name);
			else
				sprintf(*data, "txq%d: %s", qidx + start_qidx,
				ethtool_sprintf(data, "txq%d: %s",
						qidx + start_qidx,
						otx2_queue_stats[stats].name);
			*data += ETH_GSTRING_LEN;
		}
	}
}

static void otx2_get_strings(struct net_device *netdev, u32 sset, u8 *data)
@@ -115,36 +111,25 @@ static void otx2_get_strings(struct net_device *netdev, u32 sset, u8 *data)
	if (sset != ETH_SS_STATS)
		return;

	for (stats = 0; stats < otx2_n_dev_stats; stats++) {
		memcpy(data, otx2_dev_stats[stats].name, ETH_GSTRING_LEN);
		data += ETH_GSTRING_LEN;
	}
	for (stats = 0; stats < otx2_n_dev_stats; stats++)
		ethtool_puts(&data, otx2_dev_stats[stats].name);

	for (stats = 0; stats < otx2_n_drv_stats; stats++) {
		memcpy(data, otx2_drv_stats[stats].name, ETH_GSTRING_LEN);
		data += ETH_GSTRING_LEN;
	}
	for (stats = 0; stats < otx2_n_drv_stats; stats++)
		ethtool_puts(&data, otx2_drv_stats[stats].name);

	otx2_get_qset_strings(pfvf, &data, 0);

	if (!test_bit(CN10K_RPM, &pfvf->hw.cap_flag)) {
		for (stats = 0; stats < CGX_RX_STATS_COUNT; stats++) {
			sprintf(data, "cgx_rxstat%d: ", stats);
			data += ETH_GSTRING_LEN;
		}
		for (stats = 0; stats < CGX_RX_STATS_COUNT; stats++)
			ethtool_sprintf(&data, "cgx_rxstat%d: ", stats);

		for (stats = 0; stats < CGX_TX_STATS_COUNT; stats++) {
			sprintf(data, "cgx_txstat%d: ", stats);
			data += ETH_GSTRING_LEN;
		}
		for (stats = 0; stats < CGX_TX_STATS_COUNT; stats++)
			ethtool_sprintf(&data, "cgx_txstat%d: ", stats);
	}

	strcpy(data, "reset_count");
	data += ETH_GSTRING_LEN;
	sprintf(data, "Fec Corrected Errors: ");
	data += ETH_GSTRING_LEN;
	sprintf(data, "Fec Uncorrected Errors: ");
	data += ETH_GSTRING_LEN;
	ethtool_puts(&data, "reset_count");
	ethtool_puts(&data, "Fec Corrected Errors: ");
	ethtool_puts(&data, "Fec Uncorrected Errors: ");
}

static void otx2_get_qset_stats(struct otx2_nic *pfvf,
@@ -1375,20 +1360,15 @@ static void otx2vf_get_strings(struct net_device *netdev, u32 sset, u8 *data)
	if (sset != ETH_SS_STATS)
		return;

	for (stats = 0; stats < otx2_n_dev_stats; stats++) {
		memcpy(data, otx2_dev_stats[stats].name, ETH_GSTRING_LEN);
		data += ETH_GSTRING_LEN;
	}
	for (stats = 0; stats < otx2_n_dev_stats; stats++)
		ethtool_puts(&data, otx2_dev_stats[stats].name);

	for (stats = 0; stats < otx2_n_drv_stats; stats++) {
		memcpy(data, otx2_drv_stats[stats].name, ETH_GSTRING_LEN);
		data += ETH_GSTRING_LEN;
	}
	for (stats = 0; stats < otx2_n_drv_stats; stats++)
		ethtool_puts(&data, otx2_drv_stats[stats].name);

	otx2_get_qset_strings(vf, &data, 0);

	strcpy(data, "reset_count");
	data += ETH_GSTRING_LEN;
	ethtool_puts(&data, "reset_count");
}

static void otx2vf_get_ethtool_stats(struct net_device *netdev,
+1 −2
Original line number Diff line number Diff line
@@ -484,8 +484,7 @@ static void skge_get_strings(struct net_device *dev, u32 stringset, u8 *data)
	switch (stringset) {
	case ETH_SS_STATS:
		for (i = 0; i < ARRAY_SIZE(skge_stats); i++)
			memcpy(data + i * ETH_GSTRING_LEN,
			       skge_stats[i].name, ETH_GSTRING_LEN);
			ethtool_puts(&data, skge_stats[i].name);
		break;
	}
}
Loading