diff options
Diffstat (limited to 'drivers/net/ethernet/ibm/ibmvnic.c')
-rw-r--r-- | drivers/net/ethernet/ibm/ibmvnic.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 461014b7ccdd..736df59c16f5 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c | |||
@@ -757,6 +757,12 @@ static int ibmvnic_login(struct net_device *netdev) | |||
757 | } | 757 | } |
758 | } while (adapter->renegotiate); | 758 | } while (adapter->renegotiate); |
759 | 759 | ||
760 | /* handle pending MAC address changes after successful login */ | ||
761 | if (adapter->mac_change_pending) { | ||
762 | __ibmvnic_set_mac(netdev, &adapter->desired.mac); | ||
763 | adapter->mac_change_pending = false; | ||
764 | } | ||
765 | |||
760 | return 0; | 766 | return 0; |
761 | } | 767 | } |
762 | 768 | ||
@@ -994,11 +1000,6 @@ static int ibmvnic_open(struct net_device *netdev) | |||
994 | 1000 | ||
995 | mutex_lock(&adapter->reset_lock); | 1001 | mutex_lock(&adapter->reset_lock); |
996 | 1002 | ||
997 | if (adapter->mac_change_pending) { | ||
998 | __ibmvnic_set_mac(netdev, &adapter->desired.mac); | ||
999 | adapter->mac_change_pending = false; | ||
1000 | } | ||
1001 | |||
1002 | if (adapter->state != VNIC_CLOSED) { | 1003 | if (adapter->state != VNIC_CLOSED) { |
1003 | rc = ibmvnic_login(netdev); | 1004 | rc = ibmvnic_login(netdev); |
1004 | if (rc) { | 1005 | if (rc) { |
@@ -1532,7 +1533,7 @@ static int ibmvnic_set_mac(struct net_device *netdev, void *p) | |||
1532 | struct ibmvnic_adapter *adapter = netdev_priv(netdev); | 1533 | struct ibmvnic_adapter *adapter = netdev_priv(netdev); |
1533 | struct sockaddr *addr = p; | 1534 | struct sockaddr *addr = p; |
1534 | 1535 | ||
1535 | if (adapter->state != VNIC_OPEN) { | 1536 | if (adapter->state == VNIC_PROBED) { |
1536 | memcpy(&adapter->desired.mac, addr, sizeof(struct sockaddr)); | 1537 | memcpy(&adapter->desired.mac, addr, sizeof(struct sockaddr)); |
1537 | adapter->mac_change_pending = true; | 1538 | adapter->mac_change_pending = true; |
1538 | return 0; | 1539 | return 0; |