mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-05 15:16:39 +07:00
drivers: net: cpsw: fix cpsw hung with add vlan using vconfig
while adding vlan in dual EMAC mode, only specific ports should be subscribed for the vlan, else it will lead to switching mode and if both ports connected to same switch cpsw will hung as it creates a network loop. Fixing this by adding only specific ports in case of dual EMAC. Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
16dde0d6ac
commit
9f6bd8fa58
@ -1634,16 +1634,24 @@ static inline int cpsw_add_vlan_ale_entry(struct cpsw_priv *priv,
|
||||
unsigned short vid)
|
||||
{
|
||||
int ret;
|
||||
int unreg_mcast_mask;
|
||||
int unreg_mcast_mask = 0;
|
||||
u32 port_mask;
|
||||
|
||||
if (priv->ndev->flags & IFF_ALLMULTI)
|
||||
unreg_mcast_mask = ALE_ALL_PORTS;
|
||||
else
|
||||
unreg_mcast_mask = ALE_PORT_1 | ALE_PORT_2;
|
||||
if (priv->data.dual_emac) {
|
||||
port_mask = (1 << (priv->emac_port + 1)) | ALE_PORT_HOST;
|
||||
|
||||
ret = cpsw_ale_add_vlan(priv->ale, vid,
|
||||
ALE_ALL_PORTS << priv->host_port,
|
||||
0, ALE_ALL_PORTS << priv->host_port,
|
||||
if (priv->ndev->flags & IFF_ALLMULTI)
|
||||
unreg_mcast_mask = port_mask;
|
||||
} else {
|
||||
port_mask = ALE_ALL_PORTS;
|
||||
|
||||
if (priv->ndev->flags & IFF_ALLMULTI)
|
||||
unreg_mcast_mask = ALE_ALL_PORTS;
|
||||
else
|
||||
unreg_mcast_mask = ALE_PORT_1 | ALE_PORT_2;
|
||||
}
|
||||
|
||||
ret = cpsw_ale_add_vlan(priv->ale, vid, port_mask, 0, port_mask,
|
||||
unreg_mcast_mask << priv->host_port);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
@ -1654,8 +1662,7 @@ static inline int cpsw_add_vlan_ale_entry(struct cpsw_priv *priv,
|
||||
goto clean_vid;
|
||||
|
||||
ret = cpsw_ale_add_mcast(priv->ale, priv->ndev->broadcast,
|
||||
ALE_ALL_PORTS << priv->host_port,
|
||||
ALE_VLAN, vid, 0);
|
||||
port_mask, ALE_VLAN, vid, 0);
|
||||
if (ret != 0)
|
||||
goto clean_vlan_ucast;
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user