]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net: hisilicon: hns3: use ethtool string helpers
authorRosen Penev <rosenp@gmail.com>
Mon, 4 Nov 2024 20:48:23 +0000 (12:48 -0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 7 Nov 2024 01:50:56 +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>
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>
drivers/net/ethernet/hisilicon/hns3/hnae3.h
drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_tqp_stats.c
drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_tqp_stats.h
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c

index 27dbe367f3d355307a5b237a26c89f9d1986de8e..710a8f9f224843ff40c96dac2389efb8736f55f4 100644 (file)
@@ -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,
index 2b31188ff555861a8909b7afc8b26fb0ec5e7187..f9a3d6fc4416cb64a990aa03996cd6776b9d8b85 100644 (file)
@@ -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);
 
index a46350162ee8db8bf6c353dc95cf538a889d628b..b9ff424c0bc28f05bc147ca475337594d9f58fe8 100644 (file)
@@ -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);
index 97eaeec1952bb572534f87338982962073ee89f8..34a07fffadbb276de03e802bb9eefefe6bd4fad9 100644 (file)
@@ -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;
index 728f4777e51f0a1ee9f3c59d6d8f473ebc0b7c64..5fc08d686d25837021214df263fec602f07f5b5c 100644 (file)
@@ -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);
                }
        }
 }
index 896f1eb172d30e0769000db6c71a177f08133508..8739da3178973010a554939525ec0294cd81c162 100644 (file)
@@ -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)