net: ethernet: ti: cpsw: fix runtime_pm while add/kill vlan
It's exclusive with normal behaviour but if try to set vlan to one of
the reserved values is made, the cpsw runtime pm is broken.
Fixes: a6c5d14f51
("drivers: net: cpsw: ndev: fix accessing to suspended device")
Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
be35b982e8
commit
803c4f64d7
@ -2086,14 +2086,16 @@ static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < cpsw->data.slaves; i++) {
|
for (i = 0; i < cpsw->data.slaves; i++) {
|
||||||
if (vid == cpsw->slaves[i].port_vlan)
|
if (vid == cpsw->slaves[i].port_vlan) {
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_info(priv->dev, "Adding vlanid %d to vlan filter\n", vid);
|
dev_info(priv->dev, "Adding vlanid %d to vlan filter\n", vid);
|
||||||
ret = cpsw_add_vlan_ale_entry(priv, vid);
|
ret = cpsw_add_vlan_ale_entry(priv, vid);
|
||||||
|
err:
|
||||||
pm_runtime_put(cpsw->dev);
|
pm_runtime_put(cpsw->dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2119,7 +2121,7 @@ static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev,
|
|||||||
|
|
||||||
for (i = 0; i < cpsw->data.slaves; i++) {
|
for (i = 0; i < cpsw->data.slaves; i++) {
|
||||||
if (vid == cpsw->slaves[i].port_vlan)
|
if (vid == cpsw->slaves[i].port_vlan)
|
||||||
return -EINVAL;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2129,6 +2131,7 @@ static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev,
|
|||||||
HOST_PORT_NUM, ALE_VLAN, vid);
|
HOST_PORT_NUM, ALE_VLAN, vid);
|
||||||
ret |= cpsw_ale_del_mcast(cpsw->ale, priv->ndev->broadcast,
|
ret |= cpsw_ale_del_mcast(cpsw->ale, priv->ndev->broadcast,
|
||||||
0, ALE_VLAN, vid);
|
0, ALE_VLAN, vid);
|
||||||
|
err:
|
||||||
pm_runtime_put(cpsw->dev);
|
pm_runtime_put(cpsw->dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user