net: hns3: reconstruct function hclge_ets_validate()
authorGuangbin Huang <huangguangbin2@huawei.com>
Mon, 30 Aug 2021 06:06:38 +0000 (14:06 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Aug 2021 08:43:18 +0000 (09:43 +0100)
This patch reconstructs function hclge_ets_validate() to reduce the code
cycle complexity and make code more concise.

Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c

index 1271604..4a619e5 100644 (file)
@@ -104,26 +104,30 @@ static int hclge_dcb_common_validate(struct hclge_dev *hdev, u8 num_tc,
        return 0;
 }
 
-static int hclge_ets_validate(struct hclge_dev *hdev, struct ieee_ets *ets,
-                             u8 *tc, bool *changed)
+static u8 hclge_ets_tc_changed(struct hclge_dev *hdev, struct ieee_ets *ets,
+                              bool *changed)
 {
-       bool has_ets_tc = false;
-       u32 total_ets_bw = 0;
-       u8 max_tc = 0;
-       int ret;
+       u8 max_tc_id = 0;
        u8 i;
 
        for (i = 0; i < HNAE3_MAX_USER_PRIO; i++) {
                if (ets->prio_tc[i] != hdev->tm_info.prio_tc[i])
                        *changed = true;
 
-               if (ets->prio_tc[i] > max_tc)
-                       max_tc = ets->prio_tc[i];
+               if (ets->prio_tc[i] > max_tc_id)
+                       max_tc_id = ets->prio_tc[i];
        }
 
-       ret = hclge_dcb_common_validate(hdev, max_tc + 1, ets->prio_tc);
-       if (ret)
-               return ret;
+       /* return max tc number, max tc id need to plus 1 */
+       return max_tc_id + 1;
+}
+
+static int hclge_ets_sch_mode_validate(struct hclge_dev *hdev,
+                                      struct ieee_ets *ets, bool *changed)
+{
+       bool has_ets_tc = false;
+       u32 total_ets_bw = 0;
+       u8 i;
 
        for (i = 0; i < hdev->tc_max; i++) {
                switch (ets->tc_tsa[i]) {
@@ -148,7 +152,26 @@ static int hclge_ets_validate(struct hclge_dev *hdev, struct ieee_ets *ets,
        if (has_ets_tc && total_ets_bw != BW_PERCENT)
                return -EINVAL;
 
-       *tc = max_tc + 1;
+       return 0;
+}
+
+static int hclge_ets_validate(struct hclge_dev *hdev, struct ieee_ets *ets,
+                             u8 *tc, bool *changed)
+{
+       u8 tc_num;
+       int ret;
+
+       tc_num = hclge_ets_tc_changed(hdev, ets, changed);
+
+       ret = hclge_dcb_common_validate(hdev, tc_num, ets->prio_tc);
+       if (ret)
+               return ret;
+
+       ret = hclge_ets_sch_mode_validate(hdev, ets, changed);
+       if (ret)
+               return ret;
+
+       *tc = tc_num;
        if (*tc != hdev->tm_info.num_tc)
                *changed = true;