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;
|
||||
|
||||
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,7 +2121,7 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2129,6 +2131,7 @@ static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev,
|
|||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue