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

ionic: refactor ionic_lif_addr to remove a layer

The filter counting in ionic_lif_addr() really isn't useful,
and potentially misleading, especially when we're checking in
ionic_lif_rx_mode() to see if we need to go into PROMISC mode.
We can safely refactor this and remove a calling layer.
Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 969f8439
...@@ -1351,43 +1351,6 @@ int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr) ...@@ -1351,43 +1351,6 @@ int ionic_lif_addr_del(struct ionic_lif *lif, const u8 *addr)
return 0; return 0;
} }
static int ionic_lif_addr(struct ionic_lif *lif, const u8 *addr, bool add)
{
unsigned int nmfilters;
unsigned int nufilters;
if (add) {
/* Do we have space for this filter? We test the counters
* here before checking the need for deferral so that we
* can return an overflow error to the stack.
*/
nmfilters = le32_to_cpu(lif->identity->eth.max_mcast_filters);
nufilters = le32_to_cpu(lif->identity->eth.max_ucast_filters);
if ((is_multicast_ether_addr(addr) && lif->nmcast < nmfilters))
lif->nmcast++;
else if (!is_multicast_ether_addr(addr) &&
lif->nucast < nufilters)
lif->nucast++;
else
return -ENOSPC;
} else {
if (is_multicast_ether_addr(addr) && lif->nmcast)
lif->nmcast--;
else if (!is_multicast_ether_addr(addr) && lif->nucast)
lif->nucast--;
}
netdev_dbg(lif->netdev, "rx_filter %s %pM\n",
add ? "add" : "del", addr);
if (add)
return ionic_lif_addr_add(lif, addr);
else
return ionic_lif_addr_del(lif, addr);
return 0;
}
static int ionic_addr_add(struct net_device *netdev, const u8 *addr) static int ionic_addr_add(struct net_device *netdev, const u8 *addr)
{ {
return ionic_lif_list_addr(netdev_priv(netdev), addr, ADD_ADDR); return ionic_lif_list_addr(netdev_priv(netdev), addr, ADD_ADDR);
...@@ -3234,7 +3197,7 @@ static int ionic_station_set(struct ionic_lif *lif) ...@@ -3234,7 +3197,7 @@ static int ionic_station_set(struct ionic_lif *lif)
*/ */
if (!ether_addr_equal(ctx.comp.lif_getattr.mac, if (!ether_addr_equal(ctx.comp.lif_getattr.mac,
netdev->dev_addr)) netdev->dev_addr))
ionic_lif_addr(lif, netdev->dev_addr, ADD_ADDR); ionic_lif_addr_add(lif, netdev->dev_addr);
} else { } else {
/* Update the netdev mac with the device's mac */ /* 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);
...@@ -3251,7 +3214,7 @@ static int ionic_station_set(struct ionic_lif *lif) ...@@ -3251,7 +3214,7 @@ static int ionic_station_set(struct ionic_lif *lif)
netdev_dbg(lif->netdev, "adding station MAC addr %pM\n", netdev_dbg(lif->netdev, "adding station MAC addr %pM\n",
netdev->dev_addr); netdev->dev_addr);
ionic_lif_addr(lif, netdev->dev_addr, ADD_ADDR); ionic_lif_addr_add(lif, netdev->dev_addr);
return 0; return 0;
} }
......
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