net: ethernet: ti: cpsw: unsync mcast entries while switch promisc mode
authorIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
Mon, 22 Oct 2018 18:51:36 +0000 (21:51 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 23 Oct 2018 03:20:14 +0000 (20:20 -0700)
After flushing all mcast entries from the table, the ones contained in
mc list of ndev are not restored when promisc mode is toggled off,
because they are considered as synched with ALE, thus, in order to
restore them after promisc mode - reset syncing info. This fix
touches only switch mode devices, including single port boards
like Beagle Bone.

Fixes: commit 5da1948969bc
("net: ethernet: ti: cpsw: fix lost of mcast packets while rx_mode update")

Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ti/cpsw.c

index 6cf4d4cb152ef8ae52d895dc89aab86547872210..500f7ed8c58c3b36480c3b08ea37c79f220024e0 100644 (file)
@@ -640,6 +640,7 @@ static void cpsw_set_promiscious(struct net_device *ndev, bool enable)
 
                        /* Clear all mcast from ALE */
                        cpsw_ale_flush_multicast(ale, ALE_ALL_PORTS, -1);
 
                        /* Clear all mcast from ALE */
                        cpsw_ale_flush_multicast(ale, ALE_ALL_PORTS, -1);
+                       __dev_mc_unsync(ndev, NULL);
 
                        /* Flood All Unicast Packets to Host port */
                        cpsw_ale_control_set(ale, 0, ALE_P0_UNI_FLOOD, 1);
 
                        /* Flood All Unicast Packets to Host port */
                        cpsw_ale_control_set(ale, 0, ALE_P0_UNI_FLOOD, 1);