107 lines
3.2 KiB
Diff
107 lines
3.2 KiB
Diff
From d0918941875e598dc5b66269c26b581526dcf490 Mon Sep 17 00:00:00 2001
|
|
From: Guangbin Huang <huangguangbin2@huawei.com>
|
|
Date: Tue, 28 Sep 2021 11:52:11 +0800
|
|
Subject: [PATCH 119/283] net: hns3: reconstruct function hclge_ets_validate()
|
|
|
|
mainline inclusion
|
|
from mainline-v5.15-rc1
|
|
commit 161ad669e6c23529415bffed5cb3bfa012e46cb4
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EMYT
|
|
CVE: NA
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=161ad669e6c23529415bffed5cb3bfa012e46cb4
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
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>
|
|
Reviewed-by: Yongxin Li <liyongxin1@huawei.com>
|
|
Signed-off-by: Junxin Chen <chenjunxin1@huawei.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
|
|
---
|
|
.../hisilicon/hns3/hns3pf/hclge_dcb.c | 47 ++++++++++++++-----
|
|
1 file changed, 35 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
|
|
index 72963ddc3103..65c38d972a4d 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c
|
|
@@ -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;
|
|
|
|
--
|
|
2.34.1
|
|
|