Commit f20a4d40 authored by Shannon Nelson's avatar Shannon Nelson Committed by David S. Miller

ionic: leave netdev mac alone after fw-upgrade

When running in a bond setup, or some other potential
configurations, the netdev mac may have been changed from
the default device mac.  Since the userland doesn't know
about the changes going on under the covers in a fw-upgrade
it doesn't know the re-push the mac filter.  The driver
needs to leave the netdev mac filter alone when rebuilding
after the fw-upgrade.

Fixes: c672412f ("ionic: remove lifs on fw reset")
Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2c864c78
...@@ -2348,7 +2348,17 @@ static int ionic_station_set(struct ionic_lif *lif) ...@@ -2348,7 +2348,17 @@ static int ionic_station_set(struct ionic_lif *lif)
if (is_zero_ether_addr(ctx.comp.lif_getattr.mac)) if (is_zero_ether_addr(ctx.comp.lif_getattr.mac))
return 0; return 0;
if (!ether_addr_equal(ctx.comp.lif_getattr.mac, netdev->dev_addr)) { if (!is_zero_ether_addr(netdev->dev_addr)) {
/* If the netdev mac is non-zero and doesn't match the default
* device address, it was set by something earlier and we're
* likely here again after a fw-upgrade reset. We need to be
* sure the netdev mac is in our filter list.
*/
if (!ether_addr_equal(ctx.comp.lif_getattr.mac,
netdev->dev_addr))
ionic_lif_addr(lif, netdev->dev_addr, true);
} else {
/* Update the netdev mac with the device's mac */
memcpy(addr.sa_data, ctx.comp.lif_getattr.mac, netdev->addr_len); memcpy(addr.sa_data, ctx.comp.lif_getattr.mac, netdev->addr_len);
addr.sa_family = AF_INET; addr.sa_family = AF_INET;
err = eth_prepare_mac_addr_change(netdev, &addr); err = eth_prepare_mac_addr_change(netdev, &addr);
...@@ -2358,12 +2368,6 @@ static int ionic_station_set(struct ionic_lif *lif) ...@@ -2358,12 +2368,6 @@ static int ionic_station_set(struct ionic_lif *lif)
return 0; return 0;
} }
if (!is_zero_ether_addr(netdev->dev_addr)) {
netdev_dbg(lif->netdev, "deleting station MAC addr %pM\n",
netdev->dev_addr);
ionic_lif_addr(lif, netdev->dev_addr, false);
}
eth_commit_mac_addr_change(netdev, &addr); eth_commit_mac_addr_change(netdev, &addr);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment