From 45cebb7f04dba801c671ceb702fd27de34d11470 Mon Sep 17 00:00:00 2001 From: Guojia Liao Date: Mon, 31 Aug 2020 20:41:49 +0800 Subject: [PATCH] net: hns3: fix bug when PF set the duplicate MAC address for VFs driver inclusion category: bugfix bugzilla: NA CVE: NA ------------------------------------- We consider that the uniqueness of the MAC address configuration should be guaranteed by the user. So the restriction on the configuration of duplicate MAC addresses is removed in patch "remove the limitation of MAC address duplicate configuration". What happens if a duplicate MAC address is still configured? If the MAC address A is configured to vport A and then vport B. The MAC address of vport A in the hardware becomes invalid. If the address of vport A is changed to MAC address B, the driver needs to delete the MAC address A of vport A. Due to the MAC address A of vport A has become invalid in the hardware entry, so "-ENOENT" is returned. In this case, the "used_umv_size" value recorded in driver is not updated. As a result, the MAC entry status of the software is inconsistent with that of the hardware. Therefore, the driver updates the umv size even if the MAC entry cannot be found. Ensure that the software and hardware status is consistent. Signed-off-by: Guojia Liao Reviewed-by: Peng Li Reviewed-by: Weiwei Deng Reviewed-by: Zhaohui Zhong Reviewed-by: Junxin Chen Signed-off-by: Shengzui You Signed-off-by: Yang Yingliang --- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index 823f161766aa..24b86d704e03 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -7586,12 +7586,11 @@ int hclge_rm_uc_addr_common(struct hclge_vport *vport, hnae3_set_bit(req.entry_type, HCLGE_MAC_VLAN_BIT0_EN_B, 0); hclge_prepare_mac_addr(&req, addr, false); ret = hclge_remove_mac_vlan_tbl(vport, &req); - if (!ret) { + if (!ret || ret == -ENOENT) { mutex_lock(&hdev->vport_lock); hclge_update_umv_space(vport, true); mutex_unlock(&hdev->vport_lock); - } else if (ret == -ENOENT) { - ret = 0; + return 0; } return ret; -- GitLab