mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
net: cpsw: fix cpdma rx descriptor leak on down interface
This patch fixes a CPDMA RX Descriptor leak that occurs after taking the interface down when the CPSW is in Dual MAC mode. Previously the CPSW_ALE port was left open up which causes packets to be received and processed by the RX interrupt handler and were passed to the non active network interface where they were ignored. The fix is for the slave_stop function of the selected interface to disable the respective CPSW_ALE Port from forwarding packets. This blocks traffic from being received on the inactive interface. Signed-off-by: Schuyler Patton <spatton@ti.com> Reviewed-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ec495fac11
commit
3995d265b3
@ -1164,11 +1164,17 @@ static void cpsw_init_host_port(struct cpsw_priv *priv)
|
||||
|
||||
static void cpsw_slave_stop(struct cpsw_slave *slave, struct cpsw_priv *priv)
|
||||
{
|
||||
u32 slave_port;
|
||||
|
||||
slave_port = cpsw_get_slave_port(priv, slave->slave_num);
|
||||
|
||||
if (!slave->phy)
|
||||
return;
|
||||
phy_stop(slave->phy);
|
||||
phy_disconnect(slave->phy);
|
||||
slave->phy = NULL;
|
||||
cpsw_ale_control_set(priv->ale, slave_port,
|
||||
ALE_PORT_STATE, ALE_PORT_STATE_DISABLE);
|
||||
}
|
||||
|
||||
static int cpsw_ndo_open(struct net_device *ndev)
|
||||
|
Loading…
Reference in New Issue
Block a user