net: hns3: add result checking for VF when modify unicast mac address
authorJian Shen <shenjian15@huawei.com>
Sat, 10 Mar 2018 03:29:33 +0000 (11:29 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Mar 2018 02:53:32 +0000 (22:53 -0400)
VF changes unicast mac address by sending mailbox msg to PF, then PF
completes the mac address modification. It may fail when the target
uc mac address is already in the mac_vlan table. VF should be aware
of it by reading the message result.

Signed-off-by: Jian Shen <shenjian15@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c

index e3e4ded1e98fbc40a59c8c39a87a6617a5f1ed08..4a49a6b2f4c3f41066df1bbc0c87e6a0c3ade434 100644 (file)
@@ -365,7 +365,7 @@ void hclge_mbx_handler(struct hclge_dev *hdev)
                                        ret);
                        break;
                case HCLGE_MBX_SET_UNICAST:
-                       ret = hclge_set_vf_uc_mac_addr(vport, req, false);
+                       ret = hclge_set_vf_uc_mac_addr(vport, req, true);
                        if (ret)
                                dev_err(&hdev->pdev->dev,
                                        "PF fail(%d) to set VF UC MAC Addr\n",
index 6c240d6463074e7aa67df9fd9a22d05120d68341..23370258aaeb26469fe381cfeeb56758d5a09160 100644 (file)
@@ -744,7 +744,7 @@ static int hclgevf_set_mac_addr(struct hnae3_handle *handle, void *p,
 
        status = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_UNICAST,
                                      subcode, msg_data, ETH_ALEN * 2,
-                                     false, NULL, 0);
+                                     true, NULL, 0);
        if (!status)
                ether_addr_copy(hdev->hw.mac.mac_addr, new_mac_addr);
 
index 18283ef4ce81bd8725e136b8c6ba6153d47fcc43..9768f71f5b182b34a16e84d1ca468b6ce2b7da91 100644 (file)
@@ -54,6 +54,10 @@ static int hclgevf_get_mbx_resp(struct hclgevf_dev *hdev, u16 code0, u16 code1,
        mbx_resp = &hdev->mbx_resp;
        r_code0 = (u16)(mbx_resp->origin_mbx_msg >> 16);
        r_code1 = (u16)(mbx_resp->origin_mbx_msg & 0xff);
+
+       if (mbx_resp->resp_status)
+               return mbx_resp->resp_status;
+
        if (resp_data)
                memcpy(resp_data, &mbx_resp->additional_info[0], resp_len);