Re: [PATCH net] hinic: fix wrong return value of mac-set cmd

2020-09-24 Thread David Miller
From: Luo bin 
Date: Thu, 24 Sep 2020 09:31:51 +0800

> 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 

Applied and queued up for -stable.


[PATCH net] hinic: fix wrong return value of mac-set cmd

2020-09-23 Thread Luo bin
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 
---
 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 02cd635d6914..eb97f2d6b1ad 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),
 _mac_cmd, _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(>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 4d63680f2143..f8a26459ff65 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, _info,
 sizeof(mac_info), _info, _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(>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;
@@ -503,8 +502,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;
@@ -546,12 +544,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(>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(>hwif->pdev->dev, "MAC is repeated. Ignore 
update operation\n");
 
-- 
2.17.1



Re: [PATCH net] hinic: fix wrong return value of mac-set cmd

2020-09-23 Thread luobin (L)
On 2020/9/24 8:43, David Miller wrote:
> From: Luo bin 
> Date: Tue, 22 Sep 2020 19:26:43 +0800
> 
>> 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.
>>
>> Signed-off-by: Luo bin 
> 
> Bug fixes require a proper Fixes: tag.
> 
> Please resubmit with the corrected, thank you.
> .
> 
Will fix. Thanks!


Re: [PATCH net] hinic: fix wrong return value of mac-set cmd

2020-09-23 Thread David Miller
From: Luo bin 
Date: Tue, 22 Sep 2020 19:26:43 +0800

> 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.
> 
> Signed-off-by: Luo bin 

Bug fixes require a proper Fixes: tag.

Please resubmit with the corrected, thank you.


[PATCH net] hinic: fix wrong return value of mac-set cmd

2020-09-22 Thread Luo bin
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.

Signed-off-by: Luo bin 
---
 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 02cd635d6914..eb97f2d6b1ad 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),
 _mac_cmd, _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(>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 4d63680f2143..f8a26459ff65 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, _info,
 sizeof(mac_info), _info, _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(>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;
@@ -503,8 +502,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;
@@ -546,12 +544,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(>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(>hwif->pdev->dev, "MAC is repeated. Ignore 
update operation\n");
 
-- 
2.17.1