提交 423b5d88 编写于 作者: G Guojia Liao 提交者: Xie XiuQi

net: hns3: fix incorrect return value when updating vlan table

driver inclusion
category: bugfix
bugzilla: NA
CVE: NA

When updating vlan filter for port base vlan, it could be fail in
some unexpect case. However, the original codes didn't not deal with
those case and just return a retult as 'OK'. This patch fix it.

Fixes: 073cb1f5614e ("net: hns3: fix set port base vlan issue")

Feature or Bugfix:Bugfix
Signed-off-by: NGuojia Liao <liaoguojia@huawei.com>
Reviewed-by: Nlipeng <lipeng321@huawei.com>
Reviewed-by: NYunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 c7f9267b
...@@ -62,10 +62,6 @@ static int hclge_init_vlan_config(struct hclge_dev *hdev); ...@@ -62,10 +62,6 @@ static int hclge_init_vlan_config(struct hclge_dev *hdev);
static void hclge_sync_vlan_filter(struct hclge_dev *hdev); static void hclge_sync_vlan_filter(struct hclge_dev *hdev);
static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev); static int hclge_reset_ae_dev(struct hnae3_ae_dev *ae_dev);
static bool hclge_get_hw_reset_stat(struct hnae3_handle *handle); static bool hclge_get_hw_reset_stat(struct hnae3_handle *handle);
static void hclge_add_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
bool writen_to_tbl);
static void hclge_rm_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
bool is_write_tbl);
static void hclge_rfs_filter_expire(struct hclge_dev *hdev); static void hclge_rfs_filter_expire(struct hclge_dev *hdev);
static void hclge_clear_arfs_rules(struct hnae3_handle *handle); static void hclge_clear_arfs_rules(struct hnae3_handle *handle);
static int hclge_set_default_loopback(struct hclge_dev *hdev); static int hclge_set_default_loopback(struct hclge_dev *hdev);
...@@ -8233,21 +8229,28 @@ static void hclge_add_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id, ...@@ -8233,21 +8229,28 @@ static void hclge_add_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
list_add_tail(&vlan->node, &vport->vlan_list); list_add_tail(&vlan->node, &vport->vlan_list);
} }
static void hclge_add_vport_all_vlan_table(struct hclge_vport *vport) static int hclge_add_vport_all_vlan_table(struct hclge_vport *vport)
{ {
struct hclge_vport_vlan_cfg *vlan, *tmp; struct hclge_vport_vlan_cfg *vlan, *tmp;
struct hclge_dev *hdev = vport->back; struct hclge_dev *hdev = vport->back;
int ret;
list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) { list_for_each_entry_safe(vlan, tmp, &vport->vlan_list, node) {
if (!vlan->hd_tbl_status) if (!vlan->hd_tbl_status) {
hclge_set_vlan_filter_hw(hdev, ret = hclge_set_vlan_filter_hw(hdev, htons(ETH_P_8021Q),
htons(ETH_P_8021Q), vport->vport_id,
vport->vport_id, vlan->vlan_id, false);
vlan->vlan_id, if (ret) {
false); dev_err(&hdev->pdev->dev,
"restore vport vlan list failed, ret=%d\n",
ret);
return ret;
}
}
vlan->hd_tbl_status = true; vlan->hd_tbl_status = true;
} }
return 0;
} }
static void hclge_rm_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id, static void hclge_rm_vport_vlan_table(struct hclge_vport *vport, u16 vlan_id,
...@@ -8378,19 +8381,15 @@ static int hclge_update_vlan_filter_entries(struct hclge_vport *vport, ...@@ -8378,19 +8381,15 @@ static int hclge_update_vlan_filter_entries(struct hclge_vport *vport,
vport->vport_id, vport->vport_id,
new_info->vlan_tag, new_info->vlan_tag,
false); false);
}
} else { ret = hclge_set_vlan_filter_hw(hdev, htons(old_info->vlan_proto),
ret = hclge_set_vlan_filter_hw(hdev, vport->vport_id, old_info->vlan_tag,
htons(old_info->vlan_proto), true);
vport->vport_id, if (ret)
old_info->vlan_tag, return ret;
true);
if (ret)
return ret;
hclge_add_vport_all_vlan_table(vport); return hclge_add_vport_all_vlan_table(vport);
return 0;
}
} }
int hclge_update_port_base_vlan_cfg(struct hclge_vport *vport, u16 state, int hclge_update_port_base_vlan_cfg(struct hclge_vport *vport, u16 state,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册