|
@@ -3692,19 +3692,23 @@ static int ixgbevf_set_mac(struct net_device *netdev, void *p)
|
|
|
struct ixgbevf_adapter *adapter = netdev_priv(netdev);
|
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
struct sockaddr *addr = p;
|
|
|
+ int err;
|
|
|
|
|
|
if (!is_valid_ether_addr(addr->sa_data))
|
|
|
return -EADDRNOTAVAIL;
|
|
|
|
|
|
- ether_addr_copy(netdev->dev_addr, addr->sa_data);
|
|
|
- ether_addr_copy(hw->mac.addr, addr->sa_data);
|
|
|
-
|
|
|
spin_lock_bh(&adapter->mbx_lock);
|
|
|
|
|
|
- hw->mac.ops.set_rar(hw, 0, hw->mac.addr, 0);
|
|
|
+ err = hw->mac.ops.set_rar(hw, 0, addr->sa_data, 0);
|
|
|
|
|
|
spin_unlock_bh(&adapter->mbx_lock);
|
|
|
|
|
|
+ if (err)
|
|
|
+ return -EPERM;
|
|
|
+
|
|
|
+ ether_addr_copy(hw->mac.addr, addr->sa_data);
|
|
|
+ ether_addr_copy(netdev->dev_addr, addr->sa_data);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|