aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/ibm/ibmvnic.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/ibm/ibmvnic.c')
-rw-r--r--drivers/net/ethernet/ibm/ibmvnic.c13
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;