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: fe4144d47e
("net: hns3: sync VLAN filter entries when kill VLAN ID failed")
Signed-off-by: Guojia Liao <liaoguojia@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
efe3fa45f7
Коммит
b7b5d25bdd
|
@ -9042,11 +9042,12 @@ int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
|
|||
bool writen_to_tbl = false;
|
||||
int ret = 0;
|
||||
|
||||
/* When device is resetting, firmware is unable to handle
|
||||
* mailbox. Just record the vlan id, and remove it after
|
||||
/* When device is resetting or reset failed, firmware is unable to
|
||||
* handle mailbox. Just record the vlan id, and remove it after
|
||||
* 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);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
|
|
@ -1592,11 +1592,12 @@ static int hclgevf_set_vlan_filter(struct hnae3_handle *handle,
|
|||
if (proto != htons(ETH_P_8021Q))
|
||||
return -EPROTONOSUPPORT;
|
||||
|
||||
/* When device is resetting, firmware is unable to handle
|
||||
* mailbox. Just record the vlan id, and remove it after
|
||||
/* When device is resetting or reset failed, firmware is unable to
|
||||
* handle mailbox. Just record the vlan id, and remove it after
|
||||
* 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);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
@ -3443,7 +3444,8 @@ void hclgevf_update_port_base_vlan_info(struct hclgevf_dev *hdev, u16 state,
|
|||
|
||||
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,
|
||||
"is resetting when updating port based vlan info\n");
|
||||
rtnl_unlock();
|
||||
|
|
Загрузка…
Ссылка в новой задаче