Skip to content

Commit 1f60949

Browse files
Yunsheng Lindavem330
authored andcommitted
net: hns3: add HNAE3_RESTORE_CLIENT interface in enet module
The HNAE3_INIT_CLIENT interface is also used when changing tc configuration, vlan/mac hardware table does not need to be restored when tc configuration changes. This patch adds a HNAE3_RESTORE_CLIENT interface to restore the vlan/mac hardware table when resetting. Signed-off-by: Yunsheng Lin <[email protected]> Signed-off-by: Peng Li <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent af01390 commit 1f60949

File tree

4 files changed

+40
-28
lines changed

4 files changed

+40
-28
lines changed

drivers/net/ethernet/hisilicon/hns3/hnae3.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ enum hnae3_reset_notify_type {
124124
HNAE3_DOWN_CLIENT,
125125
HNAE3_INIT_CLIENT,
126126
HNAE3_UNINIT_CLIENT,
127+
HNAE3_RESTORE_CLIENT,
127128
};
128129

129130
enum hnae3_reset_type {

drivers/net/ethernet/hisilicon/hns3/hns3_enet.c

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4004,35 +4004,8 @@ static int hns3_reset_notify_init_enet(struct hnae3_handle *handle)
40044004
{
40054005
struct net_device *netdev = handle->kinfo.netdev;
40064006
struct hns3_nic_priv *priv = netdev_priv(netdev);
4007-
bool vlan_filter_enable;
40084007
int ret;
40094008

4010-
ret = hns3_init_mac_addr(netdev, false);
4011-
if (ret)
4012-
return ret;
4013-
4014-
ret = hns3_recover_hw_addr(netdev);
4015-
if (ret)
4016-
return ret;
4017-
4018-
ret = hns3_update_promisc_mode(netdev, handle->netdev_flags);
4019-
if (ret)
4020-
return ret;
4021-
4022-
vlan_filter_enable = netdev->flags & IFF_PROMISC ? false : true;
4023-
hns3_enable_vlan_filter(netdev, vlan_filter_enable);
4024-
4025-
/* Hardware table is only clear when pf resets */
4026-
if (!(handle->flags & HNAE3_SUPPORT_VF)) {
4027-
ret = hns3_restore_vlan(netdev);
4028-
if (ret)
4029-
return ret;
4030-
}
4031-
4032-
ret = hns3_restore_fd_rules(netdev);
4033-
if (ret)
4034-
return ret;
4035-
40364009
/* Carrier off reporting is important to ethtool even BEFORE open */
40374010
netif_carrier_off(netdev);
40384011

@@ -4070,6 +4043,37 @@ static int hns3_reset_notify_init_enet(struct hnae3_handle *handle)
40704043
return ret;
40714044
}
40724045

4046+
static int hns3_reset_notify_restore_enet(struct hnae3_handle *handle)
4047+
{
4048+
struct net_device *netdev = handle->kinfo.netdev;
4049+
bool vlan_filter_enable;
4050+
int ret;
4051+
4052+
ret = hns3_init_mac_addr(netdev, false);
4053+
if (ret)
4054+
return ret;
4055+
4056+
ret = hns3_recover_hw_addr(netdev);
4057+
if (ret)
4058+
return ret;
4059+
4060+
ret = hns3_update_promisc_mode(netdev, handle->netdev_flags);
4061+
if (ret)
4062+
return ret;
4063+
4064+
vlan_filter_enable = netdev->flags & IFF_PROMISC ? false : true;
4065+
hns3_enable_vlan_filter(netdev, vlan_filter_enable);
4066+
4067+
/* Hardware table is only clear when pf resets */
4068+
if (!(handle->flags & HNAE3_SUPPORT_VF)) {
4069+
ret = hns3_restore_vlan(netdev);
4070+
if (ret)
4071+
return ret;
4072+
}
4073+
4074+
return hns3_restore_fd_rules(netdev);
4075+
}
4076+
40734077
static int hns3_reset_notify_uninit_enet(struct hnae3_handle *handle)
40744078
{
40754079
struct net_device *netdev = handle->kinfo.netdev;
@@ -4125,6 +4129,9 @@ static int hns3_reset_notify(struct hnae3_handle *handle,
41254129
case HNAE3_UNINIT_CLIENT:
41264130
ret = hns3_reset_notify_uninit_enet(handle);
41274131
break;
4132+
case HNAE3_RESTORE_CLIENT:
4133+
ret = hns3_reset_notify_restore_enet(handle);
4134+
break;
41284135
default:
41294136
break;
41304137
}

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2866,6 +2866,10 @@ static void hclge_reset(struct hclge_dev *hdev)
28662866
if (ret)
28672867
goto err_reset_lock;
28682868

2869+
ret = hclge_notify_client(hdev, HNAE3_RESTORE_CLIENT);
2870+
if (ret)
2871+
goto err_reset_lock;
2872+
28692873
hclge_clear_reset_cause(hdev);
28702874

28712875
ret = hclge_reset_prepare_up(hdev);

drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1264,7 +1264,7 @@ static int hclgevf_reset_stack(struct hclgevf_dev *hdev)
12641264
if (ret)
12651265
return ret;
12661266

1267-
return 0;
1267+
return hclgevf_notify_client(hdev, HNAE3_RESTORE_CLIENT);
12681268
}
12691269

12701270
static int hclgevf_reset_prepare_wait(struct hclgevf_dev *hdev)

0 commit comments

Comments
 (0)