From: Luo bin <luob...@huawei.com>

[ Upstream commit f68910a8056f9451ee9fe7e1b962f7d90d326ad3 ]

It should also be regarded as an error when hw return status=4 for PF's
setting mac cmd. Only if PF return status=4 to VF should this cmd be
taken special treatment.

Fixes: 7dd29ee12865 ("hinic: add sriov feature support")
Signed-off-by: Luo bin <luob...@huawei.com>
Signed-off-by: David S. Miller <da...@davemloft.net>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/net/ethernet/huawei/hinic/hinic_port.c  |  6 +++---
 drivers/net/ethernet/huawei/hinic/hinic_sriov.c | 12 ++----------
 2 files changed, 5 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_port.c 
b/drivers/net/ethernet/huawei/hinic/hinic_port.c
index 82d5c50630e64..2be7c254cca90 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_port.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_port.c
@@ -58,9 +58,9 @@ static int change_mac(struct hinic_dev *nic_dev, const u8 
*addr,
                                 sizeof(port_mac_cmd),
                                 &port_mac_cmd, &out_size);
        if (err || out_size != sizeof(port_mac_cmd) ||
-           (port_mac_cmd.status  &&
-           port_mac_cmd.status != HINIC_PF_SET_VF_ALREADY &&
-           port_mac_cmd.status != HINIC_MGMT_STATUS_EXIST)) {
+           (port_mac_cmd.status &&
+            (port_mac_cmd.status != HINIC_PF_SET_VF_ALREADY || 
!HINIC_IS_VF(hwif)) &&
+            port_mac_cmd.status != HINIC_MGMT_STATUS_EXIST)) {
                dev_err(&pdev->dev, "Failed to change MAC, err: %d, status: 
0x%x, out size: 0x%x\n",
                        err, port_mac_cmd.status, out_size);
                return -EFAULT;
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c 
b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
index 1043389754df0..b757f7057b8fe 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
@@ -38,8 +38,7 @@ static int hinic_set_mac(struct hinic_hwdev *hwdev, const u8 
*mac_addr,
        err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_SET_MAC, &mac_info,
                                 sizeof(mac_info), &mac_info, &out_size);
        if (err || out_size != sizeof(mac_info) ||
-           (mac_info.status && mac_info.status != HINIC_PF_SET_VF_ALREADY &&
-           mac_info.status != HINIC_MGMT_STATUS_EXIST)) {
+           (mac_info.status && mac_info.status != HINIC_MGMT_STATUS_EXIST)) {
                dev_err(&hwdev->func_to_io.hwif->pdev->dev, "Failed to set MAC, 
err: %d, status: 0x%x, out size: 0x%x\n",
                        err, mac_info.status, out_size);
                return -EIO;
@@ -452,8 +451,7 @@ struct hinic_sriov_info 
*hinic_get_sriov_info_by_pcidev(struct pci_dev *pdev)
 
 static int hinic_check_mac_info(u8 status, u16 vlan_id)
 {
-       if ((status && status != HINIC_MGMT_STATUS_EXIST &&
-            status != HINIC_PF_SET_VF_ALREADY) ||
+       if ((status && status != HINIC_MGMT_STATUS_EXIST) ||
            (vlan_id & CHECK_IPSU_15BIT &&
             status == HINIC_MGMT_STATUS_EXIST))
                return -EINVAL;
@@ -495,12 +493,6 @@ static int hinic_update_mac(struct hinic_hwdev *hwdev, u8 
*old_mac,
                return -EINVAL;
        }
 
-       if (mac_info.status == HINIC_PF_SET_VF_ALREADY) {
-               dev_warn(&hwdev->hwif->pdev->dev,
-                        "PF has already set VF MAC. Ignore update 
operation\n");
-               return HINIC_PF_SET_VF_ALREADY;
-       }
-
        if (mac_info.status == HINIC_MGMT_STATUS_EXIST)
                dev_warn(&hwdev->hwif->pdev->dev, "MAC is repeated. Ignore 
update operation\n");
 
-- 
2.25.1



Reply via email to