mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
net: hisilicon: hns3: 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: Jijie Shao <shaojijie@huawei.com> Tested-by: Jijie Shao <shaojijie@huawei.com> Link: https://patch.msgid.link/20241104204823.297277-1-rosenp@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
4069dcb7da
commit
4ea3e22190
6 changed files with 44 additions and 81 deletions
|
@ -677,7 +677,7 @@ struct hnae3_ae_ops {
|
|||
void (*get_mac_stats)(struct hnae3_handle *handle,
|
||||
struct hns3_mac_stats *mac_stats);
|
||||
void (*get_strings)(struct hnae3_handle *handle,
|
||||
u32 stringset, u8 *data);
|
||||
u32 stringset, u8 **data);
|
||||
int (*get_sset_count)(struct hnae3_handle *handle, int stringset);
|
||||
|
||||
void (*get_regs)(struct hnae3_handle *handle, u32 *version,
|
||||
|
|
|
@ -36,27 +36,22 @@ int hclge_comm_tqps_get_sset_count(struct hnae3_handle *handle)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(hclge_comm_tqps_get_sset_count);
|
||||
|
||||
u8 *hclge_comm_tqps_get_strings(struct hnae3_handle *handle, u8 *data)
|
||||
void hclge_comm_tqps_get_strings(struct hnae3_handle *handle, u8 **data)
|
||||
{
|
||||
struct hnae3_knic_private_info *kinfo = &handle->kinfo;
|
||||
u8 *buff = data;
|
||||
u16 i;
|
||||
|
||||
for (i = 0; i < kinfo->num_tqps; i++) {
|
||||
struct hclge_comm_tqp *tqp =
|
||||
container_of(kinfo->tqp[i], struct hclge_comm_tqp, q);
|
||||
snprintf(buff, ETH_GSTRING_LEN, "txq%u_pktnum_rcd", tqp->index);
|
||||
buff += ETH_GSTRING_LEN;
|
||||
ethtool_sprintf(data, "txq%u_pktnum_rcd", tqp->index);
|
||||
}
|
||||
|
||||
for (i = 0; i < kinfo->num_tqps; i++) {
|
||||
struct hclge_comm_tqp *tqp =
|
||||
container_of(kinfo->tqp[i], struct hclge_comm_tqp, q);
|
||||
snprintf(buff, ETH_GSTRING_LEN, "rxq%u_pktnum_rcd", tqp->index);
|
||||
buff += ETH_GSTRING_LEN;
|
||||
ethtool_sprintf(data, "rxq%u_pktnum_rcd", tqp->index);
|
||||
}
|
||||
|
||||
return buff;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hclge_comm_tqps_get_strings);
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ struct hclge_comm_tqp {
|
|||
|
||||
u64 *hclge_comm_tqps_get_stats(struct hnae3_handle *handle, u64 *data);
|
||||
int hclge_comm_tqps_get_sset_count(struct hnae3_handle *handle);
|
||||
u8 *hclge_comm_tqps_get_strings(struct hnae3_handle *handle, u8 *data);
|
||||
void hclge_comm_tqps_get_strings(struct hnae3_handle *handle, u8 **data);
|
||||
void hclge_comm_reset_tqp_stats(struct hnae3_handle *handle);
|
||||
int hclge_comm_tqps_update_stats(struct hnae3_handle *handle,
|
||||
struct hclge_comm_hw *hw);
|
||||
|
|
|
@ -509,54 +509,37 @@ static int hns3_get_sset_count(struct net_device *netdev, int stringset)
|
|||
}
|
||||
}
|
||||
|
||||
static void *hns3_update_strings(u8 *data, const struct hns3_stats *stats,
|
||||
u32 stat_count, u32 num_tqps, const char *prefix)
|
||||
static void hns3_update_strings(u8 **data, const struct hns3_stats *stats,
|
||||
u32 stat_count, u32 num_tqps,
|
||||
const char *prefix)
|
||||
{
|
||||
#define MAX_PREFIX_SIZE (6 + 4)
|
||||
u32 size_left;
|
||||
u32 i, j;
|
||||
u32 n1;
|
||||
|
||||
for (i = 0; i < num_tqps; i++) {
|
||||
for (j = 0; j < stat_count; j++) {
|
||||
data[ETH_GSTRING_LEN - 1] = '\0';
|
||||
|
||||
/* first, prepend the prefix string */
|
||||
n1 = scnprintf(data, MAX_PREFIX_SIZE, "%s%u_",
|
||||
prefix, i);
|
||||
size_left = (ETH_GSTRING_LEN - 1) - n1;
|
||||
|
||||
/* now, concatenate the stats string to it */
|
||||
strncat(data, stats[j].stats_string, size_left);
|
||||
data += ETH_GSTRING_LEN;
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
for (i = 0; i < num_tqps; i++)
|
||||
for (j = 0; j < stat_count; j++)
|
||||
ethtool_sprintf(data, "%s%u_%s", prefix, i,
|
||||
stats[j].stats_string);
|
||||
}
|
||||
|
||||
static u8 *hns3_get_strings_tqps(struct hnae3_handle *handle, u8 *data)
|
||||
static void hns3_get_strings_tqps(struct hnae3_handle *handle, u8 **data)
|
||||
{
|
||||
struct hnae3_knic_private_info *kinfo = &handle->kinfo;
|
||||
const char tx_prefix[] = "txq";
|
||||
const char rx_prefix[] = "rxq";
|
||||
|
||||
/* get strings for Tx */
|
||||
data = hns3_update_strings(data, hns3_txq_stats, HNS3_TXQ_STATS_COUNT,
|
||||
kinfo->num_tqps, tx_prefix);
|
||||
hns3_update_strings(data, hns3_txq_stats, HNS3_TXQ_STATS_COUNT,
|
||||
kinfo->num_tqps, tx_prefix);
|
||||
|
||||
/* get strings for Rx */
|
||||
data = hns3_update_strings(data, hns3_rxq_stats, HNS3_RXQ_STATS_COUNT,
|
||||
kinfo->num_tqps, rx_prefix);
|
||||
|
||||
return data;
|
||||
hns3_update_strings(data, hns3_rxq_stats, HNS3_RXQ_STATS_COUNT,
|
||||
kinfo->num_tqps, rx_prefix);
|
||||
}
|
||||
|
||||
static void hns3_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
|
||||
{
|
||||
struct hnae3_handle *h = hns3_get_handle(netdev);
|
||||
const struct hnae3_ae_ops *ops = h->ae_algo->ops;
|
||||
char *buff = (char *)data;
|
||||
int i;
|
||||
|
||||
if (!ops->get_strings)
|
||||
|
@ -564,18 +547,15 @@ static void hns3_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
|
|||
|
||||
switch (stringset) {
|
||||
case ETH_SS_STATS:
|
||||
buff = hns3_get_strings_tqps(h, buff);
|
||||
ops->get_strings(h, stringset, (u8 *)buff);
|
||||
hns3_get_strings_tqps(h, &data);
|
||||
ops->get_strings(h, stringset, &data);
|
||||
break;
|
||||
case ETH_SS_TEST:
|
||||
ops->get_strings(h, stringset, data);
|
||||
ops->get_strings(h, stringset, &data);
|
||||
break;
|
||||
case ETH_SS_PRIV_FLAGS:
|
||||
for (i = 0; i < HNS3_PRIV_FLAGS_LEN; i++) {
|
||||
snprintf(buff, ETH_GSTRING_LEN, "%s",
|
||||
hns3_priv_flags[i].name);
|
||||
buff += ETH_GSTRING_LEN;
|
||||
}
|
||||
for (i = 0; i < HNS3_PRIV_FLAGS_LEN; i++)
|
||||
ethtool_puts(&data, hns3_priv_flags[i].name);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -595,25 +595,21 @@ static u64 *hclge_comm_get_stats(struct hclge_dev *hdev,
|
|||
return buf;
|
||||
}
|
||||
|
||||
static u8 *hclge_comm_get_strings(struct hclge_dev *hdev, u32 stringset,
|
||||
const struct hclge_comm_stats_str strs[],
|
||||
int size, u8 *data)
|
||||
static void hclge_comm_get_strings(struct hclge_dev *hdev, u32 stringset,
|
||||
const struct hclge_comm_stats_str strs[],
|
||||
int size, u8 **data)
|
||||
{
|
||||
char *buff = (char *)data;
|
||||
u32 i;
|
||||
|
||||
if (stringset != ETH_SS_STATS)
|
||||
return buff;
|
||||
return;
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
if (strs[i].stats_num > hdev->ae_dev->dev_specs.mac_stats_num)
|
||||
continue;
|
||||
|
||||
snprintf(buff, ETH_GSTRING_LEN, "%s", strs[i].desc);
|
||||
buff = buff + ETH_GSTRING_LEN;
|
||||
ethtool_puts(data, strs[i].desc);
|
||||
}
|
||||
|
||||
return (u8 *)buff;
|
||||
}
|
||||
|
||||
static void hclge_update_stats_for_all(struct hclge_dev *hdev)
|
||||
|
@ -718,44 +714,38 @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)
|
|||
}
|
||||
|
||||
static void hclge_get_strings(struct hnae3_handle *handle, u32 stringset,
|
||||
u8 *data)
|
||||
u8 **data)
|
||||
{
|
||||
struct hclge_vport *vport = hclge_get_vport(handle);
|
||||
struct hclge_dev *hdev = vport->back;
|
||||
u8 *p = (char *)data;
|
||||
const char *str;
|
||||
int size;
|
||||
|
||||
if (stringset == ETH_SS_STATS) {
|
||||
size = ARRAY_SIZE(g_mac_stats_string);
|
||||
p = hclge_comm_get_strings(hdev, stringset, g_mac_stats_string,
|
||||
size, p);
|
||||
p = hclge_comm_tqps_get_strings(handle, p);
|
||||
hclge_comm_get_strings(hdev, stringset, g_mac_stats_string,
|
||||
size, data);
|
||||
hclge_comm_tqps_get_strings(handle, data);
|
||||
} else if (stringset == ETH_SS_TEST) {
|
||||
if (handle->flags & HNAE3_SUPPORT_EXTERNAL_LOOPBACK) {
|
||||
memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_EXTERNAL],
|
||||
ETH_GSTRING_LEN);
|
||||
p += ETH_GSTRING_LEN;
|
||||
str = hns3_nic_test_strs[HNAE3_LOOP_EXTERNAL];
|
||||
ethtool_puts(data, str);
|
||||
}
|
||||
if (handle->flags & HNAE3_SUPPORT_APP_LOOPBACK) {
|
||||
memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_APP],
|
||||
ETH_GSTRING_LEN);
|
||||
p += ETH_GSTRING_LEN;
|
||||
str = hns3_nic_test_strs[HNAE3_LOOP_APP];
|
||||
ethtool_puts(data, str);
|
||||
}
|
||||
if (handle->flags & HNAE3_SUPPORT_SERDES_SERIAL_LOOPBACK) {
|
||||
memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_SERIAL_SERDES],
|
||||
ETH_GSTRING_LEN);
|
||||
p += ETH_GSTRING_LEN;
|
||||
str = hns3_nic_test_strs[HNAE3_LOOP_SERIAL_SERDES];
|
||||
ethtool_puts(data, str);
|
||||
}
|
||||
if (handle->flags & HNAE3_SUPPORT_SERDES_PARALLEL_LOOPBACK) {
|
||||
memcpy(p,
|
||||
hns3_nic_test_strs[HNAE3_LOOP_PARALLEL_SERDES],
|
||||
ETH_GSTRING_LEN);
|
||||
p += ETH_GSTRING_LEN;
|
||||
str = hns3_nic_test_strs[HNAE3_LOOP_PARALLEL_SERDES];
|
||||
ethtool_puts(data, str);
|
||||
}
|
||||
if (handle->flags & HNAE3_SUPPORT_PHY_LOOPBACK) {
|
||||
memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_PHY],
|
||||
ETH_GSTRING_LEN);
|
||||
p += ETH_GSTRING_LEN;
|
||||
str = hns3_nic_test_strs[HNAE3_LOOP_PHY];
|
||||
ethtool_puts(data, str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -130,12 +130,10 @@ static int hclgevf_get_sset_count(struct hnae3_handle *handle, int strset)
|
|||
}
|
||||
|
||||
static void hclgevf_get_strings(struct hnae3_handle *handle, u32 strset,
|
||||
u8 *data)
|
||||
u8 **data)
|
||||
{
|
||||
u8 *p = (char *)data;
|
||||
|
||||
if (strset == ETH_SS_STATS)
|
||||
p = hclge_comm_tqps_get_strings(handle, p);
|
||||
hclge_comm_tqps_get_strings(handle, data);
|
||||
}
|
||||
|
||||
static void hclgevf_get_stats(struct hnae3_handle *handle, u64 *data)
|
||||
|
|
Loading…
Add table
Reference in a new issue