From 4540006dd6528c4fdfce3b1f4c0d41b47e09045d Mon Sep 17 00:00:00 2001 From: Jijie Shao Date: Wed, 19 Nov 2025 11:35:02 +0800 Subject: [PATCH 1/5] Revert "net: hns3: allocate fd counter for queue bonding" driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/ID8DLQ ---------------------------------------------------------------------- This reverts commit 6aa5364797ac12054bf73dc2611b74b4bdfc4af2. Signed-off-by: Donghua Huang --- .../hisilicon/hns3/hns3pf/hclge_cmd.h | 12 ------ .../hisilicon/hns3/hns3pf/hclge_main.c | 39 ------------------- 2 files changed, 51 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h index d2fb21fd2354..d91f84a4c572 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h @@ -778,18 +778,6 @@ struct hclge_fd_qb_cfg_cmd { u8 rsv[22]; }; -#define HCLGE_FD_QB_AD_RULE_ID_VLD_B 0 -#define HCLGE_FD_QB_AD_COUNTER_VLD_B 1 -struct hclge_fd_qb_ad_cmd { - u8 vf_id; - u8 rsv1; - u8 ad_sel; - u8 rsv2; - __le16 hit_rule_id; - u8 counter_id; - u8 rsv3[17]; -}; - #define HCLGE_FD_USER_DEF_OFT_S 0 #define HCLGE_FD_USER_DEF_OFT_M GENMASK(14, 0) #define HCLGE_FD_USER_DEF_EN_B 15 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index f86d2ec244ec..0c24aa0e321a 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -4791,40 +4791,6 @@ static void hclge_update_vport_alive(struct hclge_dev *hdev) } } -static int hclge_set_fd_qb_counter(struct hclge_dev *hdev, u8 vf_id) -{ - struct hclge_fd_qb_ad_cmd *req; - struct hclge_desc desc; - int ret; - - hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_QB_AD_OP, false); - req = (struct hclge_fd_qb_ad_cmd *)desc.data; - req->vf_id = vf_id; - hnae3_set_bit(req->ad_sel, HCLGE_FD_QB_AD_COUNTER_VLD_B, 1); - req->counter_id = vf_id % hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1]; - ret = hclge_cmd_send(&hdev->hw, &desc, 1); - if (ret) - dev_warn(&hdev->pdev->dev, - "failed to set qb counter for vport %u, ret = %d.\n", - vf_id, ret); - return ret; -} - -static void hclge_init_fd_qb_counter(struct hclge_dev *hdev) -{ - int ret; - u16 i; - - if (!test_bit(HNAE3_DEV_SUPPORT_QB_B, hdev->ae_dev->caps)) - return; - - for (i = 0; i < hdev->num_alloc_vport; i++) { - ret = hclge_set_fd_qb_counter(hdev, i); - if (ret) - return; - } -} - static int hclge_set_fd_qb(struct hclge_dev *hdev, u8 vf_id, bool enable) { struct hclge_fd_qb_cfg_cmd *req; @@ -6024,11 +5990,6 @@ static int hclge_init_fd_config(struct hclge_dev *hdev) if (ret) return ret; - if (!hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1]) - hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1] = 1; - - hclge_init_fd_qb_counter(hdev); - return hclge_set_fd_key_config(hdev, HCLGE_FD_STAGE_1); } -- Gitee From f1e26918991031c55022e71f7a8f66a6473a540d Mon Sep 17 00:00:00 2001 From: Jijie Shao Date: Wed, 19 Nov 2025 11:46:12 +0800 Subject: [PATCH 2/5] Revert "net: hns3: correct the logic of hclge_sync_vf_qb_mode()" driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/ID8DLQ ---------------------------------------------------------------------- This reverts commit 39fa20074bd3874a5c361e57dfec1bfa9f174366. Signed-off-by: Donghua Huang --- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index 0c24aa0e321a..b67a10c7a69b 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -4874,8 +4874,7 @@ static int hclge_sync_vf_qb_mode(struct hclge_vport *vport) ret = hclge_set_fd_qb(hdev, vport->vport_id, request_enable); if (ret) set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); - else - vport->vf_info.qb_en = request_enable ? 1 : 0; + vport->vf_info.qb_en = request_enable ? 1 : 0; return ret; } -- Gitee From a6c3e6f95a0a376b4f380ec82f3b7a8799e68ce9 Mon Sep 17 00:00:00 2001 From: Jijie Shao Date: Wed, 19 Nov 2025 11:39:34 +0800 Subject: [PATCH 3/5] Revert "net: hns3: refactor the debugfs for dumping FD tcam" driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/ID8DLQ ---------------------------------------------------------------------- This reverts commit cdf4b91891c0c9d370f3a271b79470477fc00e45. Signed-off-by: Donghua Huang --- .../hisilicon/hns3/hns3pf/hclge_debugfs.c | 102 +++--------------- .../hisilicon/hns3/hns3pf/hclge_debugfs.h | 5 + 2 files changed, 21 insertions(+), 86 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c index ae82bd55752a..ea464573e304 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c @@ -1978,7 +1978,8 @@ static int hclge_dbg_dump_mng_table(struct seq_file *s, void *data) static int hclge_dbg_fd_tcam_read(struct hclge_dev *hdev, bool sel_x, - struct seq_file *s, u8 stage, u32 loc) + struct seq_file *s, + struct hclge_dbg_tcam_msg tcam_msg) { struct hclge_fd_tcam_config_1_cmd *req1; struct hclge_fd_tcam_config_2_cmd *req2; @@ -1997,15 +1998,15 @@ static int hclge_dbg_fd_tcam_read(struct hclge_dev *hdev, bool sel_x, req2 = (struct hclge_fd_tcam_config_2_cmd *)desc[1].data; req3 = (struct hclge_fd_tcam_config_3_cmd *)desc[2].data; - req1->stage = stage; + req1->stage = tcam_msg.stage; req1->xy_sel = sel_x ? 1 : 0; - req1->index = cpu_to_le32(loc); + req1->index = cpu_to_le32(tcam_msg.loc); ret = hclge_cmd_send(&hdev->hw, desc, 3); if (ret) return ret; - seq_printf(s, "read result tcam key %s(%u):\n", sel_x ? "x" : "y", loc); + seq_printf(s, "read result tcam key %s(%u):\n", sel_x ? "x" : "y", tcam_msg.loc); /* tcam_data0 ~ tcam_data1 */ req = (__le32 *)req1->tcam_data; @@ -2044,11 +2045,13 @@ static int hclge_dbg_get_rules_location(struct hclge_dev *hdev, u16 *rule_locs) return cnt; } -static int hclge_dbg_dump_fd_tcam(struct hclge_dev *hdev, struct seq_file *s) +static int hclge_dbg_dump_fd_tcam(struct seq_file *s, void *data) { - u32 rule_num = hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]; + struct hclge_dev *hdev = hclge_seq_file_to_hdev(s); + struct hclge_dbg_tcam_msg tcam_msg; int i, ret, rule_cnt; u16 *rule_locs; + u32 rule_num; if (!hnae3_ae_dev_fd_supported(hdev->ae_dev)) { dev_err(&hdev->pdev->dev, @@ -2056,6 +2059,7 @@ static int hclge_dbg_dump_fd_tcam(struct hclge_dev *hdev, struct seq_file *s) return -EOPNOTSUPP; } + rule_num = hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]; if (!hdev->hclge_fd_rule_num || !rule_num) return 0; @@ -2073,14 +2077,17 @@ static int hclge_dbg_dump_fd_tcam(struct hclge_dev *hdev, struct seq_file *s) ret = 0; for (i = 0; i < rule_cnt; i++) { - ret = hclge_dbg_fd_tcam_read(hdev, true, s, HCLGE_FD_STAGE_1, rule_locs[i]); + tcam_msg.stage = HCLGE_FD_STAGE_1; + tcam_msg.loc = rule_locs[i]; + + ret = hclge_dbg_fd_tcam_read(hdev, true, s, tcam_msg); if (ret) { dev_err(&hdev->pdev->dev, "failed to get fd tcam key x, ret = %d\n", ret); goto out; } - ret = hclge_dbg_fd_tcam_read(hdev, false, s, HCLGE_FD_STAGE_1, rule_locs[i]); + ret = hclge_dbg_fd_tcam_read(hdev, false, s, tcam_msg); if (ret) { dev_err(&hdev->pdev->dev, "failed to get fd tcam key y, ret = %d\n", ret); @@ -2093,73 +2100,6 @@ static int hclge_dbg_dump_fd_tcam(struct hclge_dev *hdev, struct seq_file *s) return ret; } -static int hclge_query_rules_valid(struct hclge_dev *hdev, u8 stage, u32 loc) -{ -#define HCLGE_TCAM_SELECTION_X 1 - struct hclge_fd_tcam_config_1_cmd *req1; - struct hclge_fd_tcam_config_2_cmd *req2; - struct hclge_fd_tcam_config_3_cmd *req3; - struct hclge_desc desc[3]; - int ret; - - hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_FD_TCAM_OP, true); - desc[0].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT); - hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_FD_TCAM_OP, true); - desc[1].flag |= cpu_to_le16(HCLGE_COMM_CMD_FLAG_NEXT); - hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_FD_TCAM_OP, true); - - req1 = (struct hclge_fd_tcam_config_1_cmd *)desc[0].data; - req2 = (struct hclge_fd_tcam_config_2_cmd *)desc[1].data; - req3 = (struct hclge_fd_tcam_config_3_cmd *)desc[2].data; - - req1->stage = stage; - req1->xy_sel = HCLGE_TCAM_SELECTION_X; - req1->index = cpu_to_le32(loc); - - ret = hclge_cmd_send(&hdev->hw, desc, 3); - if (ret) { - dev_err(&hdev->pdev->dev, - "failed to read tcam status, ret = %d\n", ret); - return ret; - } - - return req1->entry_vld; -} - -static int hclge_dbg_dump_qb_tcam(struct hclge_dev *hdev, struct seq_file *s) -{ - int ret = 0; - u32 i; - - if (!hnae3_ae_dev_fd_supported(hdev->ae_dev)) { - dev_err(&hdev->pdev->dev, - "Only FD-supported dev supports dump fd tcam\n"); - return -EOPNOTSUPP; - } - - for (i = 0; i < hdev->fd_cfg.rule_num[HCLGE_FD_STAGE_1]; i++) { - if (hclge_query_rules_valid(hdev, HCLGE_FD_STAGE_1, i) <= 0) - continue; - - ret = hclge_dbg_fd_tcam_read(hdev, true, s, - HCLGE_FD_STAGE_1, i); - if (ret) { - dev_err(&hdev->pdev->dev, - "failed to get qb tcam key x, ret = %d\n", ret); - return ret; - } - - ret = hclge_dbg_fd_tcam_read(hdev, false, s, - HCLGE_FD_STAGE_1, i); - if (ret) { - dev_err(&hdev->pdev->dev, - "failed to get qb tcam key y, ret = %d\n", ret); - return ret; - } - } - return 0; -} - static int hclge_dbg_dump_fd_counter(struct seq_file *s, void *data) { struct hclge_dev *hdev = hclge_seq_file_to_hdev(s); @@ -2847,16 +2787,6 @@ static int hclge_dbg_dump_ptp_info(struct seq_file *s, void *data) return 0; } -static int hclge_dbg_dump_tcam(struct seq_file *s, void *data) -{ - struct hclge_dev *hdev = hclge_seq_file_to_hdev(s); - - if (test_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state)) - return hclge_dbg_dump_qb_tcam(hdev, s); - else - return hclge_dbg_dump_fd_tcam(hdev, s); -}; - static int hclge_dbg_dump_mac_uc(struct seq_file *s, void *data) { hclge_dbg_dump_mac_list(s, true); @@ -3002,7 +2932,7 @@ static const struct hclge_dbg_func hclge_dbg_cmd_func[] = { }, { .cmd = HNAE3_DBG_CMD_FD_TCAM, - .dbg_read_func = hclge_dbg_dump_tcam, + .dbg_read_func = hclge_dbg_dump_fd_tcam, }, { .cmd = HNAE3_DBG_CMD_SERV_INFO, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h index 910618ebcc33..317f79efd54c 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h @@ -69,6 +69,11 @@ struct hclge_dbg_reg_common_msg { enum hclge_opcode_type cmd; }; +struct hclge_dbg_tcam_msg { + u8 stage; + u32 loc; +}; + #define HCLGE_DBG_MAX_DFX_MSG_LEN 60 struct hclge_dbg_dfx_message { int flag; -- Gitee From 70acb44f78eab1ca18f64c525454a8cf23d47657 Mon Sep 17 00:00:00 2001 From: Jijie Shao Date: Wed, 19 Nov 2025 11:50:10 +0800 Subject: [PATCH 4/5] Revert "net: hns3: add queue bonding mode support for VF" driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/ID8DLQ ---------------------------------------------------------------------- This reverts commit c21609871fe9083cc33a29332709610a8abdd344. Signed-off-by: Donghua Huang --- .../net/ethernet/hisilicon/hns3/hclge_mbx.h | 8 -- .../hisilicon/hns3/hns3pf/hclge_main.c | 51 +------------ .../hisilicon/hns3/hns3pf/hclge_main.h | 2 - .../hisilicon/hns3/hns3pf/hclge_mbx.c | 37 ---------- .../hisilicon/hns3/hns3vf/hclgevf_main.c | 74 ------------------- .../hisilicon/hns3/hns3vf/hclgevf_main.h | 6 -- .../hisilicon/hns3/hns3vf/hclgevf_mbx.c | 17 ----- 7 files changed, 1 insertion(+), 194 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h b/drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h index 6d6e74d60a23..f28254df76f8 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h +++ b/drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h @@ -48,8 +48,6 @@ enum HCLGE_MBX_OPCODE { HCLGE_MBX_VF_UNINIT, /* (VF -> PF) vf is unintializing */ HCLGE_MBX_HANDLE_VF_TBL, /* (VF -> PF) store/clear hw table */ HCLGE_MBX_GET_RING_VECTOR_MAP, /* (VF -> PF) get ring-to-vector map */ - HCLGE_MBX_SET_QB = 0x28, /* (VF -> PF) set queue bonding */ - HCLGE_MBX_PUSH_QB_STATE, /* (PF -> VF) push qb state */ HCLGE_MBX_GET_TC = 0x2F, /* (VF -> PF) get tc */ HCLGE_MBX_SET_TC = 0x30, /* (VF -> PF) set tc */ HCLGE_MBX_EVENT_NOTIFY, /* (PF -> VF) event notify */ @@ -83,12 +81,6 @@ enum hclge_mbx_tbl_cfg_subcode { HCLGE_MBX_VPORT_LIST_CLEAR, }; -enum hclge_mbx_qb_cfg_subcode { - HCLGE_MBX_QB_CHECK_CAPS = 0, /* query whether support qb */ - HCLGE_MBX_QB_ENABLE, /* request pf enable qb */ - HCLGE_MBX_QB_GET_STATE /* query whether qb enabled */ -}; - enum hclge_mbx_event_notify_type { HCLGE_MBX_DSCP_CHANGE = 0, }; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index b67a10c7a69b..a0a10ee2142f 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -4816,7 +4816,6 @@ static int hclge_sync_pf_qb_mode(struct hclge_dev *hdev) struct hnae3_handle *handle = &vport->nic; bool request_enable = true; int ret; - u16 i; if (!test_and_clear_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state)) return 0; @@ -4845,11 +4844,6 @@ static int hclge_sync_pf_qb_mode(struct hclge_dev *hdev) clear_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state); hdev->fd_active_type = HCLGE_FD_RULE_NONE; } - - for (i = 1; i < hdev->num_alloc_vport; i++) { - vport = &hdev->vport[i]; - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); - } } else { set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); } @@ -4858,33 +4852,10 @@ static int hclge_sync_pf_qb_mode(struct hclge_dev *hdev) return ret; } -static int hclge_sync_vf_qb_mode(struct hclge_vport *vport) -{ - struct hclge_dev *hdev = vport->back; - bool request_enable = false; - int ret; - - if (!test_and_clear_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state)) - return 0; - - if (vport->vf_info.trusted && vport->vf_info.request_qb_en && - test_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state)) - request_enable = true; - - ret = hclge_set_fd_qb(hdev, vport->vport_id, request_enable); - if (ret) - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); - vport->vf_info.qb_en = request_enable ? 1 : 0; - - return ret; -} - static int hclge_disable_fd_qb_mode(struct hclge_dev *hdev) { struct hnae3_ae_dev *ae_dev = hdev->ae_dev; - struct hclge_vport *vport; int ret; - u16 i; if (!test_bit(HNAE3_DEV_SUPPORT_QB_B, ae_dev->caps) || !test_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state)) @@ -4896,35 +4867,17 @@ static int hclge_disable_fd_qb_mode(struct hclge_dev *hdev) clear_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state); - for (i = 1; i < hdev->num_alloc_vport; i++) { - vport = &hdev->vport[i]; - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); - } - return 0; } static void hclge_sync_fd_qb_mode(struct hclge_dev *hdev) { struct hnae3_ae_dev *ae_dev = hdev->ae_dev; - struct hclge_vport *vport; - int ret; - u16 i; if (!test_bit(HNAE3_DEV_SUPPORT_QB_B, ae_dev->caps)) return; - ret = hclge_sync_pf_qb_mode(hdev); - if (ret) - return; - - for (i = 1; i < hdev->num_alloc_vport; i++) { - vport = &hdev->vport[i]; - - ret = hclge_sync_vf_qb_mode(vport); - if (ret) - return; - } + hclge_sync_pf_qb_mode(hdev); } static void hclge_periodic_service_task(struct hclge_dev *hdev) @@ -12873,8 +12826,6 @@ static int hclge_set_vf_trust(struct hnae3_handle *handle, int vf, bool enable) return 0; vport->vf_info.trusted = new_trusted; - - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state); hclge_task_schedule(hdev, 0); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h index ebef8599efd2..9c5a53c26be2 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h @@ -1063,8 +1063,6 @@ struct hclge_vf_info { u32 spoofchk; u32 max_tx_rate; u32 trusted; - u8 request_qb_en; - u8 qb_en; u8 request_uc_en; u8 request_mc_en; u8 request_bc_en; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c index b8928496f0e8..9ec48b603491 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c @@ -866,36 +866,6 @@ static void hclge_handle_vf_tbl(struct hclge_vport *vport, } } -static void hclge_handle_vf_qb(struct hclge_vport *vport, - struct hclge_mbx_vf_to_pf_cmd *mbx_req, - struct hclge_respond_to_vf_msg *resp_msg) -{ - struct hclge_dev *hdev = vport->back; - - if (mbx_req->msg.subcode == HCLGE_MBX_QB_CHECK_CAPS) { - struct hnae3_handle *handle = &hdev->vport[0].nic; - - resp_msg->data[0] = test_bit(HNAE3_PFLAG_FD_QB_ENABLE, - &handle->supported_pflags); - resp_msg->len = sizeof(u8); - } else if (mbx_req->msg.subcode == HCLGE_MBX_QB_ENABLE) { - vport->vf_info.request_qb_en = mbx_req->msg.data[0]; - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); - } else if (mbx_req->msg.subcode == HCLGE_MBX_QB_GET_STATE) { - u16 msg_data = vport->vf_info.qb_en; - int ret; - - ret = hclge_send_mbx_msg(vport, (u8 *)&msg_data, - sizeof(msg_data), - HCLGE_MBX_PUSH_QB_STATE, - vport->vport_id); - if (ret) - dev_err(&hdev->pdev->dev, - "failed to inform qb state to vport %u, ret = %d\n", - vport->vport_id, ret); - } -} - static int hclge_mbx_map_ring_to_vector_handler(struct hclge_mbx_ops_param *param) { @@ -1112,12 +1082,6 @@ static int hclge_mbx_handle_vf_tbl_handler(struct hclge_mbx_ops_param *param) return 0; } -static int hclge_mbx_handle_vf_qb_handler(struct hclge_mbx_ops_param *param) -{ - hclge_handle_vf_qb(param->vport, param->req, param->resp_msg); - return 0; -} - static void hclge_vf_get_tc_ets_info(struct hclge_vport *vport, struct hclge_respond_to_vf_msg *resp_msg) @@ -1201,7 +1165,6 @@ static const hclge_mbx_ops_fn hclge_mbx_ops_list[HCLGE_MBX_OPCODE_MAX] = { [HCLGE_MBX_VF_UNINIT] = hclge_mbx_vf_uninit_handler, [HCLGE_MBX_HANDLE_VF_TBL] = hclge_mbx_handle_vf_tbl_handler, [HCLGE_MBX_GET_RING_VECTOR_MAP] = hclge_mbx_get_ring_vector_map_handler, - [HCLGE_MBX_SET_QB] = hclge_mbx_handle_vf_qb_handler, [HCLGE_MBX_GET_VF_FLR_STATUS] = hclge_mbx_get_vf_flr_status_handler, [HCLGE_MBX_PUSH_LINK_STATUS] = hclge_mbx_push_link_status_handler, [HCLGE_MBX_NCSI_ERROR] = hclge_mbx_ncsi_error_handler, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c index f168651f5879..807b6ea1728c 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c @@ -394,74 +394,6 @@ static int hclgevf_knic_setup(struct hclgevf_dev *hdev) return 0; } -static void hclgevf_update_fd_qb_state(struct hclgevf_dev *hdev) -{ - struct hnae3_handle *handle = &hdev->nic; - struct hclge_vf_to_pf_msg send_msg; - int ret; - - if (!hdev->qb_cfg.pf_support_qb || - !test_bit(HNAE3_PFLAG_FD_QB_ENABLE, &handle->priv_flags)) - return; - - hclgevf_build_send_msg(&send_msg, HCLGE_MBX_SET_QB, - HCLGE_MBX_QB_GET_STATE); - ret = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); - if (ret) - dev_err(&hdev->pdev->dev, "failed to get qb state, ret = %d", - ret); -} - -static void hclgevf_get_pf_qb_caps(struct hclgevf_dev *hdev) -{ - struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); - struct hclge_vf_to_pf_msg send_msg; - u8 resp_msg; - int ret; - - if (!test_bit(HNAE3_DEV_SUPPORT_QB_B, ae_dev->caps)) - return; - - hclgevf_build_send_msg(&send_msg, HCLGE_MBX_SET_QB, - HCLGE_MBX_QB_CHECK_CAPS); - ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, &resp_msg, - sizeof(resp_msg)); - if (ret) { - dev_err(&hdev->pdev->dev, - "failed to get qb caps from PF, ret = %d", ret); - return; - } - - hdev->qb_cfg.pf_support_qb = resp_msg > 0; -} - -static void hclgevf_set_fd_qb(struct hnae3_handle *handle) -{ -#define HCLGEVF_QB_MBX_STATE_OFFSET 0 - - struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); - struct hclge_vf_to_pf_msg send_msg; - u8 resp_msg; - int ret; - - hclgevf_build_send_msg(&send_msg, HCLGE_MBX_SET_QB, - HCLGE_MBX_QB_ENABLE); - send_msg.data[HCLGEVF_QB_MBX_STATE_OFFSET] = - test_bit(HNAE3_PFLAG_FD_QB_ENABLE, &handle->priv_flags) ? 1 : 0; - ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, &resp_msg, - sizeof(resp_msg)); - if (ret) - dev_err(&hdev->pdev->dev, "failed to set qb state, ret = %d", - ret); -} - -static bool hclgevf_query_fd_qb_state(struct hnae3_handle *handle) -{ - struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); - - return hdev->qb_cfg.hw_qb_en; -} - static void hclgevf_request_link_info(struct hclgevf_dev *hdev) { struct hclge_vf_to_pf_msg send_msg; @@ -2056,8 +1988,6 @@ static void hclgevf_periodic_service_task(struct hclgevf_dev *hdev) hclgevf_sync_promisc_mode(hdev); - hclgevf_update_fd_qb_state(hdev); - hdev->last_serv_processed = jiffies; out: @@ -3176,8 +3106,6 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev) goto err_config; } - hclgevf_get_pf_qb_caps(hdev); - hclgevf_init_rxd_adv_layout(hdev); ret = hclgevf_devlink_init(hdev); @@ -3571,8 +3499,6 @@ static const struct hnae3_ae_ops hclgevf_ops = { .set_promisc_mode = hclgevf_set_promisc_mode, .request_update_promisc_mode = hclgevf_request_update_promisc_mode, .get_cmdq_stat = hclgevf_get_cmdq_stat, - .request_flush_qb_config = hclgevf_set_fd_qb, - .query_fd_qb_state = hclgevf_query_fd_qb_state, .get_dscp_prio = hclgevf_get_dscp_prio, }; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h index 5faf05b05921..452213663d76 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h @@ -206,11 +206,6 @@ struct hclgevf_mac_table_cfg { struct list_head mc_mac_list; }; -struct hclgevf_qb_cfg { - bool pf_support_qb; - bool hw_qb_en; -}; - struct hclgevf_dev { struct pci_dev *pdev; struct hnae3_ae_dev *ae_dev; @@ -281,7 +276,6 @@ struct hclgevf_dev { unsigned long serv_processed_cnt; unsigned long last_serv_processed; - struct hclgevf_qb_cfg qb_cfg; struct devlink *devlink; }; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c index 30d24bc90170..36d28dd03ac5 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c @@ -271,7 +271,6 @@ void hclgevf_mbx_handler(struct hclgevf_dev *hdev) case HCLGE_MBX_LINK_STAT_MODE: case HCLGE_MBX_PUSH_VLAN_INFO: case HCLGE_MBX_PUSH_PROMISC_INFO: - case HCLGE_MBX_PUSH_QB_STATE: case HCLGE_MBX_EVENT_NOTIFY: hclgevf_handle_mbx_msg(hdev, req); break; @@ -298,19 +297,6 @@ static void hclgevf_parse_promisc_info(struct hclgevf_dev *hdev, "Promisc mode is closed by host for being untrusted.\n"); } -static void hclgevf_parse_qb_info(struct hclgevf_dev *hdev, u16 qb_state) -{ -#define HCLGEVF_HW_QB_ON 1 -#define HCLGEVF_HW_QB_OFF 0 - - if (qb_state > HCLGEVF_HW_QB_ON) { - dev_warn(&hdev->pdev->dev, "Invalid state, ignored.\n"); - return; - } - - hdev->qb_cfg.hw_qb_en = qb_state > HCLGEVF_HW_QB_OFF; -} - static int hclgevf_mbx_parse_event_info(struct hclgevf_dev *hdev, u64 events) { int ret = 0; @@ -400,9 +386,6 @@ void hclgevf_mbx_async_handler(struct hclgevf_dev *hdev) case HCLGE_MBX_PUSH_PROMISC_INFO: hclgevf_parse_promisc_info(hdev, le16_to_cpu(msg_q[1])); break; - case HCLGE_MBX_PUSH_QB_STATE: - hclgevf_parse_qb_info(hdev, msg_q[1]); - break; case HCLGE_MBX_EVENT_NOTIFY: events = *(u64 *)(msg_q + 1); hclgevf_mbx_parse_event_info(hdev, events); -- Gitee From f9d447d12564de4558c51626ecada5bdc7bf4e61 Mon Sep 17 00:00:00 2001 From: Jijie Shao Date: Wed, 19 Nov 2025 11:59:38 +0800 Subject: [PATCH 5/5] Revert "net: hns3: add support for queue bonding mode of flow director" driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/ID8DLQ ---------------------------------------------------------------------- This reverts commit dbf74036ff71f8fd928cbc6f53388726eef36700. Signed-off-by: Donghua Huang --- drivers/net/ethernet/hisilicon/hns3/hnae3.h | 7 -- .../ethernet/hisilicon/hns3/hns3_debugfs.c | 4 +- .../net/ethernet/hisilicon/hns3/hns3_enet.c | 83 +----------- .../net/ethernet/hisilicon/hns3/hns3_enet.h | 9 +- .../ethernet/hisilicon/hns3/hns3_ethtool.c | 11 -- .../hisilicon/hns3/hns3pf/hclge_cmd.h | 6 - .../hisilicon/hns3/hns3pf/hclge_main.c | 119 +----------------- .../hisilicon/hns3/hns3pf/hclge_main.h | 3 - 8 files changed, 8 insertions(+), 234 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h index 7d70bf0d50bd..15a8fbf01098 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h +++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h @@ -615,14 +615,10 @@ typedef int (*read_func)(struct seq_file *s, void *data); * Delete clsflower rule * cls_flower_active * Check if any cls flower rule exist - * request_flush_qb_config - * Request to update queue bonding configuration * request_pfc_storm_config * Request to update pfc storm configuration * get_pfc_storm_config * Get pfc storm config - * query_fd_qb_state - * Query whether hw queue bonding enabled * set_tx_hwts_info * Save information for 1588 tx packet * get_rx_hwts @@ -822,11 +818,9 @@ struct hnae3_ae_ops { struct ethtool_link_ksettings *cmd); int (*set_phy_link_ksettings)(struct hnae3_handle *handle, const struct ethtool_link_ksettings *cmd); - void (*request_flush_qb_config)(struct hnae3_handle *handle); void (*request_pfc_storm_config)(struct hnae3_handle *handle, bool enable); int (*get_pfc_storm_config)(struct hnae3_handle *handle, bool *enable); - bool (*query_fd_qb_state)(struct hnae3_handle *handle); bool (*set_tx_hwts_info)(struct hnae3_handle *handle, struct sk_buff *skb); void (*get_rx_hwts)(struct hnae3_handle *handle, struct sk_buff *skb, @@ -959,7 +953,6 @@ struct hnae3_roh_private_info { enum hnae3_pflag { HNAE3_PFLAG_LIMIT_PROMISC, - HNAE3_PFLAG_FD_QB_ENABLE, HNAE3_PFLAG_ROH_ARP_PROXY_ENABLE, HNAE3_PFLAG_PFC_STORM_PREVENT_ENABLE, HNAE3_PFLAG_MAX diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c index e917b097865a..39d8e1d8203c 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c @@ -709,7 +709,7 @@ static void hns3_dump_tx_bd_info(struct hns3_desc *desc, struct seq_file *s, le16_to_cpu(desc->tx.outer_vlan_tag), le16_to_cpu(desc->tx.tv), le32_to_cpu(desc->tx.ol_type_vlan_len_msec), - le32_to_cpu(desc->tx.paylen_fdop_ol4cs), + le32_to_cpu(desc->tx.paylen_ol4cs), le16_to_cpu(desc->tx.bdtp_fe_sc_vld_ra_ri), le16_to_cpu(desc->tx.mss_hw_csum)); } @@ -734,7 +734,7 @@ static int hns3_dbg_tx_bd_info(struct seq_file *s, void *private) seq_printf(s, "Queue %u tx bd info:\n", data->qid); seq_puts(s, "BD_IDX ADDRESS VLAN_TAG SIZE "); seq_puts(s, "T_CS_VLAN_TSO OT_VLAN_TAG TV OLT_VLAN_LEN "); - seq_puts(s, "PAYLEN_FDOP_OL4CS BD_FE_SC_VLD MSS_HW_CSUM\n"); + seq_puts(s, "PAYLEN_OL4CS BD_FE_SC_VLD MSS_HW_CSUM\n"); ring = &priv->ring[data->qid]; for (i = 0; i < ring->desc_num; i++) { diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c index 18bd0eaa6f5c..086544fa2d3d 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -1714,73 +1714,6 @@ static int hns3_handle_vtags(struct hns3_enet_ring *tx_ring, return 0; } -static bool hns3_query_fd_qb_state(struct hnae3_handle *handle) -{ - const struct hnae3_ae_ops *ops = handle->ae_algo->ops; - - if (!test_bit(HNAE3_PFLAG_FD_QB_ENABLE, &handle->priv_flags)) - return false; - - if (!ops->query_fd_qb_state) - return false; - - return ops->query_fd_qb_state(handle); -} - -/* fd_op is the field of tx bd indicates hw whether to add or delete - * a qb rule or do nothing. - */ -static u8 hns3_fd_qb_handle(struct hns3_enet_ring *ring, struct sk_buff *skb) -{ - struct hnae3_handle *handle = ring->tqp->handle; - union l4_hdr_info l4; - union l3_hdr_info l3; - u8 l4_proto_tmp = 0; - __be16 frag_off; - u8 ip_version; - u8 fd_op = 0; - - if (!hns3_query_fd_qb_state(handle)) - return 0; - - if (skb->encapsulation) { - ip_version = inner_ip_hdr(skb)->version; - l3.hdr = skb_inner_network_header(skb); - l4.hdr = skb_inner_transport_header(skb); - } else { - ip_version = ip_hdr(skb)->version; - l3.hdr = skb_network_header(skb); - l4.hdr = skb_transport_header(skb); - } - - if (ip_version == IP_VERSION_IPV6) { - unsigned char *exthdr; - - exthdr = l3.hdr + sizeof(*l3.v6); - l4_proto_tmp = l3.v6->nexthdr; - if (l4.hdr != exthdr) - ipv6_skip_exthdr(skb, exthdr - skb->data, - &l4_proto_tmp, &frag_off); - } else if (ip_version == IP_VERSION_IPV4) { - l4_proto_tmp = l3.v4->protocol; - } - - if (l4_proto_tmp != IPPROTO_TCP) - return 0; - - ring->fd_qb_tx_sample++; - if (l4.tcp->fin || l4.tcp->rst) { - hnae3_set_bit(fd_op, HNS3_TXD_FD_DEL_B, 1); - ring->fd_qb_tx_sample = 0; - } else if (l4.tcp->syn || - ring->fd_qb_tx_sample >= HNS3_FD_QB_FORCE_CNT_MAX) { - hnae3_set_bit(fd_op, HNS3_TXD_FD_ADD_B, 1); - ring->fd_qb_tx_sample = 0; - } - - return fd_op; -} - /* check if the hardware is capable of checksum offloading */ static bool hns3_check_hw_tx_csum(struct sk_buff *skb) { @@ -1798,7 +1731,7 @@ static bool hns3_check_hw_tx_csum(struct sk_buff *skb) } struct hns3_desc_param { - u32 paylen_fdop_ol4cs; + u32 paylen_ol4cs; u32 ol_type_vlan_len_msec; u32 type_cs_vlan_tso; u16 mss_hw_csum; @@ -1808,7 +1741,7 @@ struct hns3_desc_param { static void hns3_init_desc_data(struct sk_buff *skb, struct hns3_desc_param *pa) { - pa->paylen_fdop_ol4cs = skb->len; + pa->paylen_ol4cs = skb->len; pa->ol_type_vlan_len_msec = 0; pa->type_cs_vlan_tso = 0; pa->mss_hw_csum = 0; @@ -1876,7 +1809,7 @@ static int hns3_handle_csum_partial(struct hns3_enet_ring *ring, return ret; } - ret = hns3_set_tso(skb, ¶m->paylen_fdop_ol4cs, ¶m->mss_hw_csum, + ret = hns3_set_tso(skb, ¶m->paylen_ol4cs, ¶m->mss_hw_csum, ¶m->type_cs_vlan_tso, &desc_cb->send_bytes); if (unlikely(ret < 0)) { hns3_ring_stats_update(ring, tx_tso_err); @@ -1903,7 +1836,6 @@ static int hns3_fill_skb_desc(struct hns3_nic_priv *priv, struct hns3_desc_cb *desc_cb) { struct hns3_desc_param param; - u8 fd_op; int ret; hns3_init_desc_data(skb, ¶m); @@ -1919,10 +1851,6 @@ static int hns3_fill_skb_desc(struct hns3_nic_priv *priv, return ret; } - fd_op = hns3_fd_qb_handle(ring, skb); - hnae3_set_field(param.paylen_fdop_ol4cs, HNS3_TXD_FD_OP_M, - HNS3_TXD_FD_OP_S, fd_op); - if (hnae3_check_roh_mac_type(priv->ae_handle) && hns3_roh_check_udpv4(skb)) { struct hns3_dhcp_packet *dhcp; @@ -1936,7 +1864,7 @@ static int hns3_fill_skb_desc(struct hns3_nic_priv *priv, desc->tx.ol_type_vlan_len_msec = cpu_to_le32(param.ol_type_vlan_len_msec); desc->tx.type_cs_vlan_tso_len = cpu_to_le32(param.type_cs_vlan_tso); - desc->tx.paylen_fdop_ol4cs = cpu_to_le32(param.paylen_fdop_ol4cs); + desc->tx.paylen_ol4cs = cpu_to_le32(param.paylen_ol4cs); desc->tx.mss_hw_csum = cpu_to_le16(param.mss_hw_csum); desc->tx.vlan_tag = cpu_to_le16(param.inner_vtag); desc->tx.outer_vlan_tag = cpu_to_le16(param.out_vtag); @@ -5746,9 +5674,6 @@ static int hns3_client_init(struct hnae3_handle *handle) hns3_state_init(handle); - if (test_bit(HNAE3_DEV_SUPPORT_QB_B, ae_dev->caps)) - set_bit(HNAE3_PFLAG_FD_QB_ENABLE, &handle->supported_pflags); - ret = register_netdev(netdev); if (ret) { dev_err(priv->dev, "probe register netdev fail!\n"); diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h index 92e153e95aff..12523248b140 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h @@ -179,11 +179,6 @@ enum hns3_nic_state { #define HNS3_TXD_DECTTL_S 12 #define HNS3_TXD_DECTTL_M (0xf << HNS3_TXD_DECTTL_S) -#define HNS3_TXD_FD_ADD_B 1 -#define HNS3_TXD_FD_DEL_B 0 -#define HNS3_TXD_FD_OP_M GENMASK(21, 20) -#define HNS3_TXD_FD_OP_S 20 - #define HNS3_TXD_OL4CS_B 22 #define HNS3_TXD_MSS_S 0 @@ -219,8 +214,6 @@ enum hns3_nic_state { #define HNS3_CQ_MODE_EQE 1U #define HNS3_CQ_MODE_CQE 0U -#define HNS3_FD_QB_FORCE_CNT_MAX 20 - #define HNS3_RESCHED_BD_NUM 1024 enum hns3_pkt_l2t_type { @@ -294,7 +287,7 @@ struct __packed hns3_desc { }; }; - __le32 paylen_fdop_ol4cs; + __le32 paylen_ol4cs; __le16 bdtp_fe_sc_vld_ra_ri; __le16 mss_hw_csum; } tx; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c index bb796114c264..682dc5f9fc79 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c @@ -483,16 +483,6 @@ static void hns3_update_limit_promisc_mode(struct net_device *netdev, hns3_request_update_promisc_mode(handle); } -static void hns3_update_fd_qb_state(struct net_device *netdev, bool enable) -{ - struct hnae3_handle *handle = hns3_get_handle(netdev); - - if (!handle->ae_algo->ops->request_flush_qb_config) - return; - - handle->ae_algo->ops->request_flush_qb_config(handle); -} - static void hns3_update_roh_arp_proxy_enable(struct net_device *netdev, bool enable) { @@ -513,7 +503,6 @@ static void hns3_update_pfc_storm_prevent_enable(struct net_device *netdev, static const struct hns3_pflag_desc hns3_priv_flags[HNAE3_PFLAG_MAX] = { { "limit_promisc", hns3_update_limit_promisc_mode }, - { "qb_enable", hns3_update_fd_qb_state }, { "roh_arp_proxy_enable", hns3_update_roh_arp_proxy_enable }, { "pfc_storm_prevent_enable", hns3_update_pfc_storm_prevent_enable }, }; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h index d91f84a4c572..dbd1df74e5a1 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h @@ -772,12 +772,6 @@ struct hclge_fd_ad_cnt_read_cmd { u8 rsv2[8]; }; -struct hclge_fd_qb_cfg_cmd { - u8 en; - u8 vf_id; - u8 rsv[22]; -}; - #define HCLGE_FD_USER_DEF_OFT_S 0 #define HCLGE_FD_USER_DEF_OFT_M GENMASK(14, 0) #define HCLGE_FD_USER_DEF_EN_B 15 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index a0a10ee2142f..ba1c0a795259 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -4791,95 +4791,6 @@ static void hclge_update_vport_alive(struct hclge_dev *hdev) } } -static int hclge_set_fd_qb(struct hclge_dev *hdev, u8 vf_id, bool enable) -{ - struct hclge_fd_qb_cfg_cmd *req; - struct hclge_desc desc; - int ret; - - hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_QB_CTRL, false); - req = (struct hclge_fd_qb_cfg_cmd *)desc.data; - req->en = enable; - req->vf_id = vf_id; - - ret = hclge_cmd_send(&hdev->hw, &desc, 1); - if (ret) - dev_err(&hdev->pdev->dev, - "failed to %s qb config for vport %u, ret = %d.\n", - enable ? "enable" : "disable", vf_id, ret); - return ret; -} - -static int hclge_sync_pf_qb_mode(struct hclge_dev *hdev) -{ - struct hclge_vport *vport = &hdev->vport[0]; - struct hnae3_handle *handle = &vport->nic; - bool request_enable = true; - int ret; - - if (!test_and_clear_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state)) - return 0; - - spin_lock_bh(&hdev->fd_rule_lock); - if (hdev->fd_active_type == HCLGE_FD_EP_ACTIVE || - hdev->fd_active_type == HCLGE_FD_TC_FLOWER_ACTIVE || - !test_bit(HNAE3_PFLAG_FD_QB_ENABLE, &handle->priv_flags)) - request_enable = false; - - if (request_enable == - test_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state)) { - spin_unlock_bh(&hdev->fd_rule_lock); - return 0; - } - - if (request_enable) - hclge_clear_arfs_rules(hdev); - - ret = hclge_set_fd_qb(hdev, vport->vport_id, request_enable); - if (!ret) { - if (request_enable) { - set_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state); - hdev->fd_active_type = HCLGE_FD_QB_ACTIVE; - } else { - clear_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state); - hdev->fd_active_type = HCLGE_FD_RULE_NONE; - } - } else { - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); - } - spin_unlock_bh(&hdev->fd_rule_lock); - - return ret; -} - -static int hclge_disable_fd_qb_mode(struct hclge_dev *hdev) -{ - struct hnae3_ae_dev *ae_dev = hdev->ae_dev; - int ret; - - if (!test_bit(HNAE3_DEV_SUPPORT_QB_B, ae_dev->caps) || - !test_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state)) - return 0; - - ret = hclge_set_fd_qb(hdev, 0, false); - if (ret) - return ret; - - clear_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state); - - return 0; -} - -static void hclge_sync_fd_qb_mode(struct hclge_dev *hdev) -{ - struct hnae3_ae_dev *ae_dev = hdev->ae_dev; - - if (!test_bit(HNAE3_DEV_SUPPORT_QB_B, ae_dev->caps)) - return; - - hclge_sync_pf_qb_mode(hdev); -} - static void hclge_periodic_service_task(struct hclge_dev *hdev) { unsigned long delta = round_jiffies_relative(HZ); @@ -4893,7 +4804,6 @@ static void hclge_periodic_service_task(struct hclge_dev *hdev) hclge_update_link_status(hdev); hclge_sync_mac_table(hdev); hclge_sync_promisc_mode(hdev); - hclge_sync_fd_qb_mode(hdev); hclge_sync_fd_table(hdev); if (time_is_after_jiffies(hdev->last_serv_processed + HZ)) { @@ -5414,21 +5324,6 @@ static void hclge_request_update_promisc_mode(struct hnae3_handle *handle) set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state); } -static bool hclge_query_fd_qb_state(struct hnae3_handle *handle) -{ - struct hclge_vport *vport = hclge_get_vport(handle); - struct hclge_dev *hdev = vport->back; - - return test_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state); -} - -static void hclge_flush_qb_config(struct hnae3_handle *handle) -{ - struct hclge_vport *vport = hclge_get_vport(handle); - - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); -} - static int hclge_get_pfc_storm_prevent(struct hclge_dev *hdev, int dir, bool *enable) { @@ -5511,13 +5406,9 @@ hclge_request_pfc_storm_config(struct hnae3_handle *handle, bool enable) static void hclge_sync_fd_state(struct hclge_dev *hdev) { - struct hclge_vport *vport = &hdev->vport[0]; - - if (hlist_empty(&hdev->fd_rule_list)) { + if (hlist_empty(&hdev->fd_rule_list)) hdev->fd_active_type = HCLGE_FD_RULE_NONE; - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); } -} static void hclge_fd_inc_rule_cnt(struct hclge_dev *hdev, u16 location) { @@ -6961,10 +6852,6 @@ static int hclge_add_fd_entry_common(struct hclge_dev *hdev, { int ret; - ret = hclge_disable_fd_qb_mode(hdev); - if (ret) - return ret; - spin_lock_bh(&hdev->fd_rule_lock); if (hdev->fd_active_type != rule->rule_type && @@ -8711,7 +8598,6 @@ int hclge_vport_start(struct hclge_vport *vport) set_bit(HCLGE_VPORT_STATE_INITED, &vport->state); set_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state); - set_bit(HCLGE_VPORT_STATE_QB_CHANGE, &vport->state); set_bit(HCLGE_VPORT_STATE_PROMISC_CHANGE, &vport->state); vport->last_active_jiffies = jiffies; vport->need_notify = 0; @@ -10941,7 +10827,6 @@ static void hclge_restore_hw_table(struct hclge_dev *hdev) hclge_restore_vport_port_base_vlan_config(hdev); hclge_restore_vport_vlan_table(vport); set_bit(HCLGE_STATE_FD_USER_DEF_CHANGED, &hdev->state); - clear_bit(HCLGE_STATE_HW_QB_ENABLE, &hdev->state); hclge_restore_fd_entries(handle); } @@ -13575,10 +13460,8 @@ struct hnae3_ae_ops hclge_ops = { .put_vector = hclge_put_vector, .set_promisc_mode = hclge_set_promisc_mode, .request_update_promisc_mode = hclge_request_update_promisc_mode, - .request_flush_qb_config = hclge_flush_qb_config, .request_pfc_storm_config = hclge_request_pfc_storm_config, .get_pfc_storm_config = hclge_get_pfc_storm_config, - .query_fd_qb_state = hclge_query_fd_qb_state, .set_loopback = hclge_set_loopback, .start = hclge_ae_start, .stop = hclge_ae_stop, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h index 9c5a53c26be2..4778e159fc15 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h @@ -227,7 +227,6 @@ enum HCLGE_DEV_STATE { HCLGE_STATE_FD_TBL_CHANGED, HCLGE_STATE_FD_CLEAR_ALL, HCLGE_STATE_FD_USER_DEF_CHANGED, - HCLGE_STATE_HW_QB_ENABLE, HCLGE_STATE_PTP_EN, HCLGE_STATE_PTP_TX_HANDLING, HCLGE_STATE_FEC_STATS_UPDATING, @@ -670,7 +669,6 @@ enum HCLGE_FD_ACTIVE_RULE_TYPE { HCLGE_FD_ARFS_ACTIVE, HCLGE_FD_EP_ACTIVE, HCLGE_FD_TC_FLOWER_ACTIVE, - HCLGE_FD_QB_ACTIVE, }; enum HCLGE_FD_PACKET_TYPE { @@ -1032,7 +1030,6 @@ struct hclge_rx_vtag_cfg { enum HCLGE_VPORT_STATE { HCLGE_VPORT_STATE_ALIVE, HCLGE_VPORT_STATE_MAC_TBL_CHANGE, - HCLGE_VPORT_STATE_QB_CHANGE, HCLGE_VPORT_STATE_PROMISC_CHANGE, HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE, HCLGE_VPORT_STATE_INITED, -- Gitee