diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 0ea14c0a2e74..b0edae94d73d 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | |||
@@ -3122,7 +3122,7 @@ static void ixgbevf_free_all_rx_resources(struct ixgbevf_adapter *adapter) | |||
3122 | * handler is registered with the OS, the watchdog timer is started, | 3122 | * handler is registered with the OS, the watchdog timer is started, |
3123 | * and the stack is notified that the interface is ready. | 3123 | * and the stack is notified that the interface is ready. |
3124 | **/ | 3124 | **/ |
3125 | static int ixgbevf_open(struct net_device *netdev) | 3125 | int ixgbevf_open(struct net_device *netdev) |
3126 | { | 3126 | { |
3127 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); | 3127 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); |
3128 | struct ixgbe_hw *hw = &adapter->hw; | 3128 | struct ixgbe_hw *hw = &adapter->hw; |
@@ -3205,7 +3205,7 @@ err_setup_reset: | |||
3205 | * needs to be disabled. A global MAC reset is issued to stop the | 3205 | * needs to be disabled. A global MAC reset is issued to stop the |
3206 | * hardware, and all transmit and receive resources are freed. | 3206 | * hardware, and all transmit and receive resources are freed. |
3207 | **/ | 3207 | **/ |
3208 | static int ixgbevf_close(struct net_device *netdev) | 3208 | int ixgbevf_close(struct net_device *netdev) |
3209 | { | 3209 | { |
3210 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); | 3210 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); |
3211 | 3211 | ||
@@ -3692,19 +3692,23 @@ static int ixgbevf_set_mac(struct net_device *netdev, void *p) | |||
3692 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); | 3692 | struct ixgbevf_adapter *adapter = netdev_priv(netdev); |
3693 | struct ixgbe_hw *hw = &adapter->hw; | 3693 | struct ixgbe_hw *hw = &adapter->hw; |
3694 | struct sockaddr *addr = p; | 3694 | struct sockaddr *addr = p; |
3695 | int err; | ||
3695 | 3696 | ||
3696 | if (!is_valid_ether_addr(addr->sa_data)) | 3697 | if (!is_valid_ether_addr(addr->sa_data)) |
3697 | return -EADDRNOTAVAIL; | 3698 | return -EADDRNOTAVAIL; |
3698 | 3699 | ||
3699 | ether_addr_copy(netdev->dev_addr, addr->sa_data); | ||
3700 | ether_addr_copy(hw->mac.addr, addr->sa_data); | ||
3701 | |||
3702 | spin_lock_bh(&adapter->mbx_lock); | 3700 | spin_lock_bh(&adapter->mbx_lock); |
3703 | 3701 | ||
3704 | hw->mac.ops.set_rar(hw, 0, hw->mac.addr, 0); | 3702 | err = hw->mac.ops.set_rar(hw, 0, addr->sa_data, 0); |
3705 | 3703 | ||
3706 | spin_unlock_bh(&adapter->mbx_lock); | 3704 | spin_unlock_bh(&adapter->mbx_lock); |
3707 | 3705 | ||
3706 | if (err) | ||
3707 | return -EPERM; | ||
3708 | |||
3709 | ether_addr_copy(hw->mac.addr, addr->sa_data); | ||
3710 | ether_addr_copy(netdev->dev_addr, addr->sa_data); | ||
3711 | |||
3708 | return 0; | 3712 | return 0; |
3709 | } | 3713 | } |
3710 | 3714 | ||