Commit 16bfa702 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller

net: dsa: make port_bridge_leave return void

netdev_upper_dev_unlink() which notifies NETDEV_CHANGEUPPER, returns
void, as well as del_nbp(). So there's no advantage to catch an eventual
error from the port_bridge_leave routine at the DSA level.

Make this routine void for the DSA layer and its existing drivers.
Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 71327a4e
...@@ -516,7 +516,7 @@ static int bcm_sf2_sw_br_join(struct dsa_switch *ds, int port, ...@@ -516,7 +516,7 @@ static int bcm_sf2_sw_br_join(struct dsa_switch *ds, int port,
return 0; return 0;
} }
static int bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port) static void bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port)
{ {
struct bcm_sf2_priv *priv = ds_to_priv(ds); struct bcm_sf2_priv *priv = ds_to_priv(ds);
struct net_device *bridge = priv->port_sts[port].bridge_dev; struct net_device *bridge = priv->port_sts[port].bridge_dev;
...@@ -543,8 +543,6 @@ static int bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port) ...@@ -543,8 +543,6 @@ static int bcm_sf2_sw_br_leave(struct dsa_switch *ds, int port)
core_writel(priv, p_ctl, CORE_PORT_VLAN_CTL_PORT(port)); core_writel(priv, p_ctl, CORE_PORT_VLAN_CTL_PORT(port));
priv->port_sts[port].vlan_ctl_mask = p_ctl; priv->port_sts[port].vlan_ctl_mask = p_ctl;
priv->port_sts[port].bridge_dev = NULL; priv->port_sts[port].bridge_dev = NULL;
return 0;
} }
static int bcm_sf2_sw_br_set_stp_state(struct dsa_switch *ds, int port, static int bcm_sf2_sw_br_set_stp_state(struct dsa_switch *ds, int port,
......
...@@ -2219,39 +2219,29 @@ int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port, ...@@ -2219,39 +2219,29 @@ int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
return err; return err;
} }
int mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port) void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port)
{ {
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
struct net_device *bridge = ps->ports[port].bridge_dev; struct net_device *bridge = ps->ports[port].bridge_dev;
u16 fid; u16 fid;
int i, err; int i;
mutex_lock(&ps->smi_mutex); mutex_lock(&ps->smi_mutex);
/* Give the port a fresh Filtering Information Database */ /* Give the port a fresh Filtering Information Database */
err = _mv88e6xxx_fid_new(ds, &fid); if (_mv88e6xxx_fid_new(ds, &fid) ||
if (err) _mv88e6xxx_port_fid_set(ds, port, fid))
goto unlock; netdev_warn(ds->ports[port], "failed to assign a new FID\n");
err = _mv88e6xxx_port_fid_set(ds, port, fid);
if (err)
goto unlock;
/* Unassign the bridge and remap each port's VLANTable */ /* Unassign the bridge and remap each port's VLANTable */
ps->ports[port].bridge_dev = NULL; ps->ports[port].bridge_dev = NULL;
for (i = 0; i < ps->num_ports; ++i) { for (i = 0; i < ps->num_ports; ++i)
if (i == port || ps->ports[i].bridge_dev == bridge) { if (i == port || ps->ports[i].bridge_dev == bridge)
err = _mv88e6xxx_port_based_vlan_map(ds, i); if (_mv88e6xxx_port_based_vlan_map(ds, i))
if (err) netdev_warn(ds->ports[i], "failed to remap\n");
break;
}
}
unlock:
mutex_unlock(&ps->smi_mutex); mutex_unlock(&ps->smi_mutex);
return err;
} }
static void mv88e6xxx_bridge_work(struct work_struct *work) static void mv88e6xxx_bridge_work(struct work_struct *work)
......
...@@ -488,7 +488,7 @@ int mv88e6xxx_set_eee(struct dsa_switch *ds, int port, ...@@ -488,7 +488,7 @@ int mv88e6xxx_set_eee(struct dsa_switch *ds, int port,
struct phy_device *phydev, struct ethtool_eee *e); struct phy_device *phydev, struct ethtool_eee *e);
int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port, int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
struct net_device *bridge); struct net_device *bridge);
int mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port); void mv88e6xxx_port_bridge_leave(struct dsa_switch *ds, int port);
int mv88e6xxx_port_stp_update(struct dsa_switch *ds, int port, u8 state); int mv88e6xxx_port_stp_update(struct dsa_switch *ds, int port, u8 state);
int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port, int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port,
bool vlan_filtering); bool vlan_filtering);
......
...@@ -298,7 +298,7 @@ struct dsa_switch_driver { ...@@ -298,7 +298,7 @@ struct dsa_switch_driver {
*/ */
int (*port_bridge_join)(struct dsa_switch *ds, int port, int (*port_bridge_join)(struct dsa_switch *ds, int port,
struct net_device *bridge); struct net_device *bridge);
int (*port_bridge_leave)(struct dsa_switch *ds, int port); void (*port_bridge_leave)(struct dsa_switch *ds, int port);
int (*port_stp_update)(struct dsa_switch *ds, int port, int (*port_stp_update)(struct dsa_switch *ds, int port,
u8 state); u8 state);
......
...@@ -454,15 +454,14 @@ static int dsa_slave_bridge_port_join(struct net_device *dev, ...@@ -454,15 +454,14 @@ static int dsa_slave_bridge_port_join(struct net_device *dev,
return ret; return ret;
} }
static int dsa_slave_bridge_port_leave(struct net_device *dev) static void dsa_slave_bridge_port_leave(struct net_device *dev)
{ {
struct dsa_slave_priv *p = netdev_priv(dev); struct dsa_slave_priv *p = netdev_priv(dev);
struct dsa_switch *ds = p->parent; struct dsa_switch *ds = p->parent;
int ret = -EOPNOTSUPP;
if (ds->drv->port_bridge_leave) if (ds->drv->port_bridge_leave)
ret = ds->drv->port_bridge_leave(ds, p->port); ds->drv->port_bridge_leave(ds, p->port);
p->bridge_dev = NULL; p->bridge_dev = NULL;
...@@ -470,8 +469,6 @@ static int dsa_slave_bridge_port_leave(struct net_device *dev) ...@@ -470,8 +469,6 @@ static int dsa_slave_bridge_port_leave(struct net_device *dev)
* so allow it to be in BR_STATE_FORWARDING to be kept functional * so allow it to be in BR_STATE_FORWARDING to be kept functional
*/ */
dsa_slave_stp_update(dev, BR_STATE_FORWARDING); dsa_slave_stp_update(dev, BR_STATE_FORWARDING);
return ret;
} }
static int dsa_slave_port_attr_get(struct net_device *dev, static int dsa_slave_port_attr_get(struct net_device *dev,
...@@ -1156,7 +1153,7 @@ static int dsa_slave_master_changed(struct net_device *dev) ...@@ -1156,7 +1153,7 @@ static int dsa_slave_master_changed(struct net_device *dev)
!strcmp(master->rtnl_link_ops->kind, "bridge")) !strcmp(master->rtnl_link_ops->kind, "bridge"))
err = dsa_slave_bridge_port_join(dev, master); err = dsa_slave_bridge_port_join(dev, master);
else if (dsa_port_is_bridged(p)) else if (dsa_port_is_bridged(p))
err = dsa_slave_bridge_port_leave(dev); dsa_slave_bridge_port_leave(dev);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment