mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 09:45:08 +07:00
i40e: allow user to set LAA again
Don't short-circuit the LAA assignment when the driver thinks it has already been done - it is possible that the user might want to force the address setting again. At the same time, this requires a little re-ordering of the filter management. Change-ID: Ia0d71e3bc04edd7b68cf67edecc00abe7b9f6639 Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
cc41222c55
commit
6c8ad1ba16
@ -1327,9 +1327,6 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
|
||||
|
||||
netdev_info(netdev, "set mac address=%pM\n", addr->sa_data);
|
||||
|
||||
if (ether_addr_equal(netdev->dev_addr, addr->sa_data))
|
||||
return 0;
|
||||
|
||||
if (test_bit(__I40E_DOWN, &vsi->back->state) ||
|
||||
test_bit(__I40E_RESET_RECOVERY_PENDING, &vsi->back->state))
|
||||
return -EADDRNOTAVAIL;
|
||||
@ -1345,22 +1342,26 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
|
||||
ret);
|
||||
return -EADDRNOTAVAIL;
|
||||
}
|
||||
|
||||
ether_addr_copy(vsi->back->hw.mac.addr, addr->sa_data);
|
||||
}
|
||||
|
||||
/* In order to be sure to not drop any packets, add the new address
|
||||
* then delete the old one.
|
||||
*/
|
||||
f = i40e_add_filter(vsi, addr->sa_data, I40E_VLAN_ANY, false, false);
|
||||
if (!f)
|
||||
return -ENOMEM;
|
||||
if (!i40e_find_mac(vsi, addr->sa_data, false, true)) {
|
||||
|
||||
i40e_sync_vsi_filters(vsi);
|
||||
i40e_del_filter(vsi, netdev->dev_addr, I40E_VLAN_ANY, false, false);
|
||||
i40e_sync_vsi_filters(vsi);
|
||||
/* In order to be sure to not drop any packets, add the
|
||||
* new address first then delete the old one.
|
||||
*/
|
||||
f = i40e_add_filter(vsi, addr->sa_data, I40E_VLAN_ANY,
|
||||
false, false);
|
||||
if (!f)
|
||||
return -ENOMEM;
|
||||
|
||||
ether_addr_copy(netdev->dev_addr, addr->sa_data);
|
||||
i40e_sync_vsi_filters(vsi);
|
||||
i40e_del_filter(vsi, netdev->dev_addr, I40E_VLAN_ANY,
|
||||
false, false);
|
||||
i40e_sync_vsi_filters(vsi);
|
||||
}
|
||||
|
||||
if (!ether_addr_equal(netdev->dev_addr, addr->sa_data))
|
||||
ether_addr_copy(netdev->dev_addr, addr->sa_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user