mirror of https://gitee.com/openkylin/linux.git
Merge branch 'cpsw-runtime-pm-fix'
Grygorii Strashko says: ==================== net: ethernet: ti: cpsw: fix runtime pm while add/del reserved vid Here 2 not critical fixes for: - vlan ale table leak while error if deleting vlan (simplifies next fix) - runtime pm while try to set reserved vlan ==================== Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
556fdd857f
|
@ -2086,14 +2086,16 @@ static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev,
|
|||
int i;
|
||||
|
||||
for (i = 0; i < cpsw->data.slaves; i++) {
|
||||
if (vid == cpsw->slaves[i].port_vlan)
|
||||
return -EINVAL;
|
||||
if (vid == cpsw->slaves[i].port_vlan) {
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dev_info(priv->dev, "Adding vlanid %d to vlan filter\n", vid);
|
||||
ret = cpsw_add_vlan_ale_entry(priv, vid);
|
||||
|
||||
err:
|
||||
pm_runtime_put(cpsw->dev);
|
||||
return ret;
|
||||
}
|
||||
|
@ -2119,22 +2121,17 @@ static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev,
|
|||
|
||||
for (i = 0; i < cpsw->data.slaves; i++) {
|
||||
if (vid == cpsw->slaves[i].port_vlan)
|
||||
return -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
dev_info(priv->dev, "removing vlanid %d from vlan filter\n", vid);
|
||||
ret = cpsw_ale_del_vlan(cpsw->ale, vid, 0);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
ret = cpsw_ale_del_ucast(cpsw->ale, priv->mac_addr,
|
||||
HOST_PORT_NUM, ALE_VLAN, vid);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
ret = cpsw_ale_del_mcast(cpsw->ale, priv->ndev->broadcast,
|
||||
0, ALE_VLAN, vid);
|
||||
ret |= cpsw_ale_del_ucast(cpsw->ale, priv->mac_addr,
|
||||
HOST_PORT_NUM, ALE_VLAN, vid);
|
||||
ret |= cpsw_ale_del_mcast(cpsw->ale, priv->ndev->broadcast,
|
||||
0, ALE_VLAN, vid);
|
||||
err:
|
||||
pm_runtime_put(cpsw->dev);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -394,7 +394,7 @@ int cpsw_ale_del_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask,
|
|||
|
||||
idx = cpsw_ale_match_addr(ale, addr, (flags & ALE_VLAN) ? vid : 0);
|
||||
if (idx < 0)
|
||||
return -EINVAL;
|
||||
return -ENOENT;
|
||||
|
||||
cpsw_ale_read(ale, idx, ale_entry);
|
||||
|
||||
|
|
Loading…
Reference in New Issue