diff options
Diffstat (limited to 'drivers/net/ethernet/marvell/mvpp2.c')
| -rw-r--r-- | drivers/net/ethernet/marvell/mvpp2.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c index 4f34e1b79705..ac92685dd4e5 100644 --- a/drivers/net/ethernet/marvell/mvpp2.c +++ b/drivers/net/ethernet/marvell/mvpp2.c @@ -5666,6 +5666,7 @@ static void mvpp2_set_rx_mode(struct net_device *dev)  	int id = port->id;  	bool allmulti = dev->flags & IFF_ALLMULTI; +retry:  	mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);  	mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);  	mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti); @@ -5673,9 +5674,13 @@ static void mvpp2_set_rx_mode(struct net_device *dev)  	/* Remove all port->id's mcast enries */  	mvpp2_prs_mcast_del_all(priv, id); -	if (allmulti && !netdev_mc_empty(dev)) { -		netdev_for_each_mc_addr(ha, dev) -			mvpp2_prs_mac_da_accept(priv, id, ha->addr, true); +	if (!allmulti) { +		netdev_for_each_mc_addr(ha, dev) { +			if (mvpp2_prs_mac_da_accept(priv, id, ha->addr, true)) { +				allmulti = true; +				goto retry; +			} +		}  	}  } | 
