be2net: Delete secondary unicast MAC addresses during be_close
authorAjit Khaparde <ajit.khaparde@emulex.com>
Mon, 18 Nov 2013 16:44:37 +0000 (10:44 -0600)
committerDavid S. Miller <davem@davemloft.net>
Mon, 18 Nov 2013 21:25:22 +0000 (16:25 -0500)
Secondary unicast MAC addresses will get deleted only when the interface is UP.
When the interface is DOWN, though these secondary MAC addresses are unusable
and awaiting to be deleted, cause the firmware to believe that they are being used.
If the user intends to set a MAC address as primary MAC from one of these
secondary MAC addresses, the firmware returns a MAC address Collision error.
Delete these secondary MAC addresses during be_close.

The secondary MAC addresses list will be refreshed during interface open anyway.

Signed-off-by: Ajit Khaparde <ajit.khaparde@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_main.c

index 13818d37bbbb3116709a8e0b09bc882dac598365..8e28cedf823ba7ddac5aeb4c333d128c2198b12d 100644 (file)
@@ -2672,6 +2672,11 @@ static int be_close(struct net_device *netdev)
 
        be_rx_qs_destroy(adapter);
 
+       for (i = 1; i < (adapter->uc_macs + 1); i++)
+               be_cmd_pmac_del(adapter, adapter->if_handle,
+                               adapter->pmac_id[i], 0);
+       adapter->uc_macs = 0;
+
        for_all_evt_queues(adapter, eqo, i) {
                if (msix_enabled(adapter))
                        synchronize_irq(be_msix_vec_get(adapter, eqo));