Commit b7b5d25b authored by Guojia Liao's avatar Guojia Liao Committed by David S. Miller

net: hns3: fix for VLAN config when reset failed

When device is resetting or reset failed, firmware is unable to
handle mailbox. VLAN should not be configured in this case.

Fixes: fe4144d4 ("net: hns3: sync VLAN filter entries when kill VLAN ID failed")
Signed-off-by: default avatarGuojia Liao <liaoguojia@huawei.com>
Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent efe3fa45
...@@ -9042,11 +9042,12 @@ int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto, ...@@ -9042,11 +9042,12 @@ int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
bool writen_to_tbl = false; bool writen_to_tbl = false;
int ret = 0; int ret = 0;
/* When device is resetting, firmware is unable to handle /* When device is resetting or reset failed, firmware is unable to
* mailbox. Just record the vlan id, and remove it after * handle mailbox. Just record the vlan id, and remove it after
* reset finished. * reset finished.
*/ */
if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) && is_kill) { if ((test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) ||
test_bit(HCLGE_STATE_RST_FAIL, &hdev->state)) && is_kill) {
set_bit(vlan_id, vport->vlan_del_fail_bmap); set_bit(vlan_id, vport->vlan_del_fail_bmap);
return -EBUSY; return -EBUSY;
} }
......
...@@ -1592,11 +1592,12 @@ static int hclgevf_set_vlan_filter(struct hnae3_handle *handle, ...@@ -1592,11 +1592,12 @@ static int hclgevf_set_vlan_filter(struct hnae3_handle *handle,
if (proto != htons(ETH_P_8021Q)) if (proto != htons(ETH_P_8021Q))
return -EPROTONOSUPPORT; return -EPROTONOSUPPORT;
/* When device is resetting, firmware is unable to handle /* When device is resetting or reset failed, firmware is unable to
* mailbox. Just record the vlan id, and remove it after * handle mailbox. Just record the vlan id, and remove it after
* reset finished. * reset finished.
*/ */
if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) && is_kill) { if ((test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) ||
test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) && is_kill) {
set_bit(vlan_id, hdev->vlan_del_fail_bmap); set_bit(vlan_id, hdev->vlan_del_fail_bmap);
return -EBUSY; return -EBUSY;
} }
...@@ -3443,7 +3444,8 @@ void hclgevf_update_port_base_vlan_info(struct hclgevf_dev *hdev, u16 state, ...@@ -3443,7 +3444,8 @@ void hclgevf_update_port_base_vlan_info(struct hclgevf_dev *hdev, u16 state,
rtnl_lock(); rtnl_lock();
if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) { if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) ||
test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) {
dev_warn(&hdev->pdev->dev, dev_warn(&hdev->pdev->dev,
"is resetting when updating port based vlan info\n"); "is resetting when updating port based vlan info\n");
rtnl_unlock(); rtnl_unlock();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment