|
@@ -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;
|
|
|
}
|