From c03bc86e7aae34d0493e0cf286969ff9d07149e7 Mon Sep 17 00:00:00 2001 From: Yonglong Liu Date: Thu, 28 Mar 2024 16:15:40 +0800 Subject: [PATCH] net: hns3: fix port vlan filter not disabled problem in dynamic vlan mode driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I9D6UN CVE: NA ---------------------------------------------------------------------- The driver set port vlan filter to "on" when initialized, and then set port vlan filter to "off" in service task if in dynamic vlan mode. Between this two settings, if user set a vlan to the port, the port vlan filter is remain in "on" status, which is not expected. To fix the problem, if in dynamic vlan mode, set the port vlan filter to "off". Fixes: 184cd221a863 ("net: hns3: disable port VLAN filter when support function level VLAN filter control") Fixes: 2ba306627f59 ("net: hns3: add support for modify VLAN filter state") Signed-off-by: Yonglong Liu Signed-off-by: Hao Chen Signed-off-by: Zihao Xue --- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index 44cbbd91860d..4c3cdc9f1e8c 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -10547,6 +10547,7 @@ static int hclge_set_vlan_protocol_type(struct hclge_dev *hdev) static int hclge_init_vlan_filter(struct hclge_dev *hdev) { struct hclge_vport *vport; + bool enable = true; int ret; int i; @@ -10566,8 +10567,12 @@ static int hclge_init_vlan_filter(struct hclge_dev *hdev) vport->cur_vlan_fltr_en = true; } + if (test_bit(HNAE3_DEV_SUPPORT_VLAN_FLTR_MDF_B, hdev->ae_dev->caps) && + !test_bit(HNAE3_DEV_SUPPORT_PORT_VLAN_BYPASS_B, hdev->ae_dev->caps)) + enable = false; + return hclge_set_vlan_filter_ctrl(hdev, HCLGE_FILTER_TYPE_PORT, - HCLGE_FILTER_FE_INGRESS, true, 0); + HCLGE_FILTER_FE_INGRESS, enable, 0); } static int hclge_init_vlan_type(struct hclge_dev *hdev) -- Gitee