diff options
author | Guangbin Huang <huangguangbin2@huawei.com> | 2022-09-16 10:38:01 +0800 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-09-21 14:32:21 -0700 |
commit | dfea275e06c26690b1ef27399fd84ce50372b85c (patch) | |
tree | 843897ef95fedb5164335b0e23227cedaa67da38 /drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c | |
parent | 04b6ba143521f4485b7f2c36c655b262a79dae97 (diff) |
net: hns3: optimize converting dscp to priority process of hns3_nic_select_queue()
Currently, when function hns3_nic_select_queue() converts dscp to priority,
it calls an indirect callback ae_algo->ops->get_dscp_prio to get priority.
However as function hns3_nic_select_queue() is in fast path, the indirect
call may cause degradation of performance. For optimization, this patch
moves dscp_app_cnt and dscp_prio from struct hclge_tm_info to struct
hnae3_knic_private_info, so they can be used in both hclge and hns3 layers.
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c')
-rw-r--r-- | drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c index 55f696d071e5..142415c84c6b 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c @@ -1158,17 +1158,18 @@ static int hclge_dbg_dump_qos_pri_map(struct hclge_dev *hdev, char *buf, static int hclge_dbg_dump_qos_dscp_map(struct hclge_dev *hdev, char *buf, int len) { + struct hnae3_knic_private_info *kinfo = &hdev->vport[0].nic.kinfo; struct hclge_desc desc[HCLGE_DSCP_MAP_TC_BD_NUM]; u8 *req0 = (u8 *)desc[0].data; u8 *req1 = (u8 *)desc[1].data; - u8 dscp_tc[HCLGE_MAX_DSCP]; + u8 dscp_tc[HNAE3_MAX_DSCP]; int pos, ret; u8 i, j; pos = scnprintf(buf, len, "tc map mode: %s\n", - tc_map_mode_str[hdev->vport[0].nic.kinfo.tc_map_mode]); + tc_map_mode_str[kinfo->tc_map_mode]); - if (hdev->vport[0].nic.kinfo.tc_map_mode != HNAE3_TC_MAP_MODE_DSCP) + if (kinfo->tc_map_mode != HNAE3_TC_MAP_MODE_DSCP) return 0; hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_QOS_MAP, true); @@ -1184,8 +1185,8 @@ static int hclge_dbg_dump_qos_dscp_map(struct hclge_dev *hdev, char *buf, pos += scnprintf(buf + pos, len - pos, "\nDSCP PRIO TC\n"); /* The low 32 dscp setting use bd0, high 32 dscp setting use bd1 */ - for (i = 0; i < HCLGE_MAX_DSCP / HCLGE_DSCP_MAP_TC_BD_NUM; i++) { - j = i + HCLGE_MAX_DSCP / HCLGE_DSCP_MAP_TC_BD_NUM; + for (i = 0; i < HNAE3_MAX_DSCP / HCLGE_DSCP_MAP_TC_BD_NUM; i++) { + j = i + HNAE3_MAX_DSCP / HCLGE_DSCP_MAP_TC_BD_NUM; /* Each dscp setting has 4 bits, so each byte saves two dscp * setting */ @@ -1195,12 +1196,12 @@ static int hclge_dbg_dump_qos_dscp_map(struct hclge_dev *hdev, char *buf, dscp_tc[j] &= HCLGE_DBG_TC_MASK; } - for (i = 0; i < HCLGE_MAX_DSCP; i++) { - if (hdev->tm_info.dscp_prio[i] == HCLGE_PRIO_ID_INVALID) + for (i = 0; i < HNAE3_MAX_DSCP; i++) { + if (kinfo->dscp_prio[i] == HNAE3_PRIO_ID_INVALID) continue; pos += scnprintf(buf + pos, len - pos, " %2u %u %u\n", - i, hdev->tm_info.dscp_prio[i], dscp_tc[i]); + i, kinfo->dscp_prio[i], dscp_tc[i]); } return 0; |