net: hns3: add queue's statistics update to service task
authorliuzhongzhu <liuzhongzhu@huawei.com>
Fri, 19 Apr 2019 03:05:46 +0000 (11:05 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 20 Apr 2019 01:43:16 +0000 (18:43 -0700)
This patch updates VF's TQP statistic info in the service task,
and adds a limitation to prevent update too frequently.

Signed-off-by: liuzhongzhu <liuzhongzhu@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h

index ac06568a284ff7035417c683b3bb8301015602b9..f9d98f8863adcd96e625d30d9e41053ac9dce6c4 100644 (file)
@@ -1649,6 +1649,7 @@ static void hclgevf_service_timer(struct timer_list *t)
 
        mod_timer(&hdev->service_timer, jiffies + 5 * HZ);
 
+       hdev->stats_timer++;
        hclgevf_task_schedule(hdev);
 }
 
@@ -1769,9 +1770,16 @@ static void hclgevf_keep_alive_task(struct work_struct *work)
 
 static void hclgevf_service_task(struct work_struct *work)
 {
+       struct hnae3_handle *handle;
        struct hclgevf_dev *hdev;
 
        hdev = container_of(work, struct hclgevf_dev, service_task);
+       handle = &hdev->nic;
+
+       if (hdev->stats_timer >= HCLGEVF_STATS_TIMER_INTERVAL) {
+               hclgevf_tqps_update_stats(handle);
+               hdev->stats_timer = 0;
+       }
 
        /* request the link status from the PF. PF would be able to tell VF
         * about such updates in future so we might remove this later
index d39c0323ca99f922ca6b071c65a4327f82b65fd6..ee3a6cbe87d307d1648f1ae70e2d33735de69a6f 100644 (file)
 #define HCLGEVF_S_IP_BIT               BIT(3)
 #define HCLGEVF_V_TAG_BIT              BIT(4)
 
+#define HCLGEVF_STATS_TIMER_INTERVAL   (36)
+
 enum hclgevf_evt_cause {
        HCLGEVF_VECTOR0_EVENT_RST,
        HCLGEVF_VECTOR0_EVENT_MBX,
@@ -281,6 +283,7 @@ struct hclgevf_dev {
        struct hnae3_client *nic_client;
        struct hnae3_client *roce_client;
        u32 flag;
+       u32 stats_timer;
 };
 
 static inline bool hclgevf_is_reset_pending(struct hclgevf_dev *hdev)