]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
net: hns3: refactor PF tqp stats APIs with new common tqp stats APIs
authorJie Wang <wangjie125@huawei.com>
Wed, 5 Jan 2022 14:20:13 +0000 (22:20 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Jan 2022 14:36:36 +0000 (14:36 +0000)
This patch firstly uses new tqp struct(hclge_comm_tqp) and deletes the
old PF tqp struct(hclge_tqp). All the tqp stats members used in PF module
are modified according to the new hclge_comm_tqp.

Secondly PF tqp stats APIs are refactored to use new common tqp stats APIs.
The old tqp stats APIs in PF are deleted.

Signed-off-by: Jie Wang <wangjie125@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h

index 4d835be1fb2c3335f79b91b223268df4d1cb0067..24f7afacae028ebbe763891983633c8af25830e2 100644 (file)
@@ -611,111 +611,6 @@ int hclge_mac_update_stats(struct hclge_dev *hdev)
                return hclge_mac_update_stats_defective(hdev);
 }
 
-static int hclge_tqps_update_stats(struct hnae3_handle *handle)
-{
-       struct hnae3_knic_private_info *kinfo = &handle->kinfo;
-       struct hclge_vport *vport = hclge_get_vport(handle);
-       struct hclge_dev *hdev = vport->back;
-       struct hnae3_queue *queue;
-       struct hclge_desc desc[1];
-       struct hclge_tqp *tqp;
-       int ret, i;
-
-       for (i = 0; i < kinfo->num_tqps; i++) {
-               queue = handle->kinfo.tqp[i];
-               tqp = container_of(queue, struct hclge_tqp, q);
-               /* command : HCLGE_OPC_QUERY_IGU_STAT */
-               hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QUERY_RX_STATS,
-                                          true);
-
-               desc[0].data[0] = cpu_to_le32(tqp->index);
-               ret = hclge_cmd_send(&hdev->hw, desc, 1);
-               if (ret) {
-                       dev_err(&hdev->pdev->dev,
-                               "Query tqp stat fail, status = %d,queue = %d\n",
-                               ret, i);
-                       return ret;
-               }
-               tqp->tqp_stats.rcb_rx_ring_pktnum_rcd +=
-                       le32_to_cpu(desc[0].data[1]);
-       }
-
-       for (i = 0; i < kinfo->num_tqps; i++) {
-               queue = handle->kinfo.tqp[i];
-               tqp = container_of(queue, struct hclge_tqp, q);
-               /* command : HCLGE_OPC_QUERY_IGU_STAT */
-               hclge_cmd_setup_basic_desc(&desc[0],
-                                          HCLGE_OPC_QUERY_TX_STATS,
-                                          true);
-
-               desc[0].data[0] = cpu_to_le32(tqp->index);
-               ret = hclge_cmd_send(&hdev->hw, desc, 1);
-               if (ret) {
-                       dev_err(&hdev->pdev->dev,
-                               "Query tqp stat fail, status = %d,queue = %d\n",
-                               ret, i);
-                       return ret;
-               }
-               tqp->tqp_stats.rcb_tx_ring_pktnum_rcd +=
-                       le32_to_cpu(desc[0].data[1]);
-       }
-
-       return 0;
-}
-
-static u64 *hclge_tqps_get_stats(struct hnae3_handle *handle, u64 *data)
-{
-       struct hnae3_knic_private_info *kinfo = &handle->kinfo;
-       struct hclge_tqp *tqp;
-       u64 *buff = data;
-       int i;
-
-       for (i = 0; i < kinfo->num_tqps; i++) {
-               tqp = container_of(kinfo->tqp[i], struct hclge_tqp, q);
-               *buff++ = tqp->tqp_stats.rcb_tx_ring_pktnum_rcd;
-       }
-
-       for (i = 0; i < kinfo->num_tqps; i++) {
-               tqp = container_of(kinfo->tqp[i], struct hclge_tqp, q);
-               *buff++ = tqp->tqp_stats.rcb_rx_ring_pktnum_rcd;
-       }
-
-       return buff;
-}
-
-static int hclge_tqps_get_sset_count(struct hnae3_handle *handle, int stringset)
-{
-       struct hnae3_knic_private_info *kinfo = &handle->kinfo;
-
-       /* each tqp has TX & RX two queues */
-       return kinfo->num_tqps * (2);
-}
-
-static u8 *hclge_tqps_get_strings(struct hnae3_handle *handle, u8 *data)
-{
-       struct hnae3_knic_private_info *kinfo = &handle->kinfo;
-       u8 *buff = data;
-       int i;
-
-       for (i = 0; i < kinfo->num_tqps; i++) {
-               struct hclge_tqp *tqp = container_of(handle->kinfo.tqp[i],
-                       struct hclge_tqp, q);
-               snprintf(buff, ETH_GSTRING_LEN, "txq%u_pktnum_rcd",
-                        tqp->index);
-               buff = buff + ETH_GSTRING_LEN;
-       }
-
-       for (i = 0; i < kinfo->num_tqps; i++) {
-               struct hclge_tqp *tqp = container_of(kinfo->tqp[i],
-                       struct hclge_tqp, q);
-               snprintf(buff, ETH_GSTRING_LEN, "rxq%u_pktnum_rcd",
-                        tqp->index);
-               buff = buff + ETH_GSTRING_LEN;
-       }
-
-       return buff;
-}
-
 static int hclge_comm_get_count(struct hclge_dev *hdev,
                                const struct hclge_comm_stats_str strs[],
                                u32 size)
@@ -776,7 +671,7 @@ static void hclge_update_stats_for_all(struct hclge_dev *hdev)
 
        handle = &hdev->vport[0].nic;
        if (handle->client) {
-               status = hclge_tqps_update_stats(handle);
+               status = hclge_comm_tqps_update_stats(handle, &hdev->hw.hw);
                if (status) {
                        dev_err(&hdev->pdev->dev,
                                "Update TQPS stats fail, status = %d.\n",
@@ -806,7 +701,7 @@ static void hclge_update_stats(struct hnae3_handle *handle,
                        "Update MAC stats fail, status = %d.\n",
                        status);
 
-       status = hclge_tqps_update_stats(handle);
+       status = hclge_comm_tqps_update_stats(handle, &hdev->hw.hw);
        if (status)
                dev_err(&hdev->pdev->dev,
                        "Update TQPS stats fail, status = %d.\n",
@@ -855,7 +750,7 @@ static int hclge_get_sset_count(struct hnae3_handle *handle, int stringset)
        } else if (stringset == ETH_SS_STATS) {
                count = hclge_comm_get_count(hdev, g_mac_stats_string,
                                             ARRAY_SIZE(g_mac_stats_string)) +
-                       hclge_tqps_get_sset_count(handle, stringset);
+                       hclge_comm_tqps_get_sset_count(handle);
        }
 
        return count;
@@ -873,7 +768,7 @@ static void hclge_get_strings(struct hnae3_handle *handle, u32 stringset,
                size = ARRAY_SIZE(g_mac_stats_string);
                p = hclge_comm_get_strings(hdev, stringset, g_mac_stats_string,
                                           size, p);
-               p = hclge_tqps_get_strings(handle, p);
+               p = hclge_comm_tqps_get_strings(handle, p);
        } else if (stringset == ETH_SS_TEST) {
                if (handle->flags & HNAE3_SUPPORT_APP_LOOPBACK) {
                        memcpy(p, hns3_nic_test_strs[HNAE3_LOOP_APP],
@@ -907,7 +802,7 @@ static void hclge_get_stats(struct hnae3_handle *handle, u64 *data)
 
        p = hclge_comm_get_stats(hdev, g_mac_stats_string,
                                 ARRAY_SIZE(g_mac_stats_string), data);
-       p = hclge_tqps_get_stats(handle, p);
+       p = hclge_comm_tqps_get_stats(handle, p);
 }
 
 static void hclge_get_mac_stat(struct hnae3_handle *handle,
@@ -1748,11 +1643,11 @@ static int hclge_config_gro(struct hclge_dev *hdev)
 
 static int hclge_alloc_tqps(struct hclge_dev *hdev)
 {
-       struct hclge_tqp *tqp;
+       struct hclge_comm_tqp *tqp;
        int i;
 
        hdev->htqp = devm_kcalloc(&hdev->pdev->dev, hdev->num_tqps,
-                                 sizeof(struct hclge_tqp), GFP_KERNEL);
+                                 sizeof(struct hclge_comm_tqp), GFP_KERNEL);
        if (!hdev->htqp)
                return -ENOMEM;
 
@@ -1876,8 +1771,8 @@ static int hclge_map_tqp_to_vport(struct hclge_dev *hdev,
 
        kinfo = &nic->kinfo;
        for (i = 0; i < vport->alloc_tqps; i++) {
-               struct hclge_tqp *q =
-                       container_of(kinfo->tqp[i], struct hclge_tqp, q);
+               struct hclge_comm_tqp *q =
+                       container_of(kinfo->tqp[i], struct hclge_comm_tqp, q);
                bool is_pf;
                int ret;
 
@@ -7869,22 +7764,6 @@ static int hclge_set_default_loopback(struct hclge_dev *hdev)
                                         HNAE3_LOOP_PARALLEL_SERDES);
 }
 
-static void hclge_reset_tqp_stats(struct hnae3_handle *handle)
-{
-       struct hclge_vport *vport = hclge_get_vport(handle);
-       struct hnae3_knic_private_info *kinfo;
-       struct hnae3_queue *queue;
-       struct hclge_tqp *tqp;
-       int i;
-
-       kinfo = &vport->nic.kinfo;
-       for (i = 0; i < kinfo->num_tqps; i++) {
-               queue = handle->kinfo.tqp[i];
-               tqp = container_of(queue, struct hclge_tqp, q);
-               memset(&tqp->tqp_stats, 0, sizeof(tqp->tqp_stats));
-       }
-}
-
 static void hclge_flush_link_update(struct hclge_dev *hdev)
 {
 #define HCLGE_FLUSH_LINK_TIMEOUT       100000
@@ -7926,7 +7805,7 @@ static int hclge_ae_start(struct hnae3_handle *handle)
        hdev->hw.mac.link = 0;
 
        /* reset tqp stats */
-       hclge_reset_tqp_stats(handle);
+       hclge_comm_reset_tqp_stats(handle);
 
        hclge_mac_start_phy(hdev);
 
@@ -7964,7 +7843,7 @@ static void hclge_ae_stop(struct hnae3_handle *handle)
        hclge_mac_stop_phy(hdev);
 
        /* reset tqp stats */
-       hclge_reset_tqp_stats(handle);
+       hclge_comm_reset_tqp_stats(handle);
        hclge_update_link_status(hdev);
 }
 
@@ -10577,11 +10456,11 @@ static int hclge_get_reset_status(struct hclge_dev *hdev, u16 queue_id,
 
 u16 hclge_covert_handle_qid_global(struct hnae3_handle *handle, u16 queue_id)
 {
+       struct hclge_comm_tqp *tqp;
        struct hnae3_queue *queue;
-       struct hclge_tqp *tqp;
 
        queue = handle->kinfo.tqp[queue_id];
-       tqp = container_of(queue, struct hclge_tqp, q);
+       tqp = container_of(queue, struct hclge_comm_tqp, q);
 
        return tqp->index;
 }
index d4436d59335006a9e7d575ba478fe5e8f90a418b..adfb26e792621b78c128390fad0c83b8d9fd6eee 100644 (file)
@@ -14,6 +14,7 @@
 #include "hclge_ptp.h"
 #include "hnae3.h"
 #include "hclge_comm_rss.h"
+#include "hclge_comm_tqp_stats.h"
 
 #define HCLGE_MOD_VERSION "1.0"
 #define HCLGE_DRIVER_NAME "hclge"
@@ -270,26 +271,6 @@ struct hclge_hw {
        int num_vec;
 };
 
-/* TQP stats */
-struct hlcge_tqp_stats {
-       /* query_tqp_tx_queue_statistics ,opcode id:  0x0B03 */
-       u64 rcb_tx_ring_pktnum_rcd; /* 32bit */
-       /* query_tqp_rx_queue_statistics ,opcode id:  0x0B13 */
-       u64 rcb_rx_ring_pktnum_rcd; /* 32bit */
-};
-
-struct hclge_tqp {
-       /* copy of device pointer from pci_dev,
-        * used when perform DMA mapping
-        */
-       struct device *dev;
-       struct hnae3_queue q;
-       struct hlcge_tqp_stats tqp_stats;
-       u16 index;      /* Global index in a NIC controller */
-
-       bool alloced;
-};
-
 enum hclge_fc_mode {
        HCLGE_FC_NONE,
        HCLGE_FC_RX_PAUSE,
@@ -894,7 +875,7 @@ struct hclge_dev {
        bool cur_promisc;
        int num_alloc_vfs;      /* Actual number of VFs allocated */
 
-       struct hclge_tqp *htqp;
+       struct hclge_comm_tqp *htqp;
        struct hclge_vport *vport;
 
        struct dentry *hclge_dbgfs;
@@ -1073,7 +1054,8 @@ int hclge_bind_ring_with_vector(struct hclge_vport *vport,
 
 static inline int hclge_get_queue_id(struct hnae3_queue *queue)
 {
-       struct hclge_tqp *tqp = container_of(queue, struct hclge_tqp, q);
+       struct hclge_comm_tqp *tqp =
+                       container_of(queue, struct hclge_comm_tqp, q);
 
        return tqp->index;
 }