diff options
Diffstat (limited to 'drivers/net/ethernet/intel/i40e/i40e_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_main.c | 14 | 
1 files changed, 7 insertions, 7 deletions
| diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index a3f45335437c..0e5dc74b4ef2 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -1543,17 +1543,17 @@ static int i40e_set_mac(struct net_device *netdev, void *p)  		netdev_info(netdev, "set new mac address %pM\n", addr->sa_data);  	/* Copy the address first, so that we avoid a possible race with -	 * .set_rx_mode(). If we copy after changing the address in the filter -	 * list, we might open ourselves to a narrow race window where -	 * .set_rx_mode could delete our dev_addr filter and prevent traffic -	 * from passing. +	 * .set_rx_mode(). +	 * - Remove old address from MAC filter +	 * - Copy new address +	 * - Add new address to MAC filter  	 */ -	ether_addr_copy(netdev->dev_addr, addr->sa_data); -  	spin_lock_bh(&vsi->mac_filter_hash_lock);  	i40e_del_mac_filter(vsi, netdev->dev_addr); -	i40e_add_mac_filter(vsi, addr->sa_data); +	ether_addr_copy(netdev->dev_addr, addr->sa_data); +	i40e_add_mac_filter(vsi, netdev->dev_addr);  	spin_unlock_bh(&vsi->mac_filter_hash_lock); +  	if (vsi->type == I40E_VSI_MAIN) {  		i40e_status ret; |