mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 13:00:54 +07:00
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: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
71327a4e7d
commit
16bfa7024e
@ -516,7 +516,7 @@ static int bcm_sf2_sw_br_join(struct dsa_switch *ds, int port,
|
||||
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 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)
|
||||
core_writel(priv, p_ctl, CORE_PORT_VLAN_CTL_PORT(port));
|
||||
priv->port_sts[port].vlan_ctl_mask = p_ctl;
|
||||
priv->port_sts[port].bridge_dev = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
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,
|
||||
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 net_device *bridge = ps->ports[port].bridge_dev;
|
||||
u16 fid;
|
||||
int i, err;
|
||||
int i;
|
||||
|
||||
mutex_lock(&ps->smi_mutex);
|
||||
|
||||
/* Give the port a fresh Filtering Information Database */
|
||||
err = _mv88e6xxx_fid_new(ds, &fid);
|
||||
if (err)
|
||||
goto unlock;
|
||||
|
||||
err = _mv88e6xxx_port_fid_set(ds, port, fid);
|
||||
if (err)
|
||||
goto unlock;
|
||||
if (_mv88e6xxx_fid_new(ds, &fid) ||
|
||||
_mv88e6xxx_port_fid_set(ds, port, fid))
|
||||
netdev_warn(ds->ports[port], "failed to assign a new FID\n");
|
||||
|
||||
/* Unassign the bridge and remap each port's VLANTable */
|
||||
ps->ports[port].bridge_dev = NULL;
|
||||
|
||||
for (i = 0; i < ps->num_ports; ++i) {
|
||||
if (i == port || ps->ports[i].bridge_dev == bridge) {
|
||||
err = _mv88e6xxx_port_based_vlan_map(ds, i);
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ps->num_ports; ++i)
|
||||
if (i == port || ps->ports[i].bridge_dev == bridge)
|
||||
if (_mv88e6xxx_port_based_vlan_map(ds, i))
|
||||
netdev_warn(ds->ports[i], "failed to remap\n");
|
||||
|
||||
unlock:
|
||||
mutex_unlock(&ps->smi_mutex);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void mv88e6xxx_bridge_work(struct work_struct *work)
|
||||
|
@ -488,7 +488,7 @@ int mv88e6xxx_set_eee(struct dsa_switch *ds, int port,
|
||||
struct phy_device *phydev, struct ethtool_eee *e);
|
||||
int mv88e6xxx_port_bridge_join(struct dsa_switch *ds, int port,
|
||||
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_vlan_filtering(struct dsa_switch *ds, int port,
|
||||
bool vlan_filtering);
|
||||
|
@ -298,7 +298,7 @@ struct dsa_switch_driver {
|
||||
*/
|
||||
int (*port_bridge_join)(struct dsa_switch *ds, int port,
|
||||
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,
|
||||
u8 state);
|
||||
|
||||
|
@ -454,15 +454,14 @@ static int dsa_slave_bridge_port_join(struct net_device *dev,
|
||||
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_switch *ds = p->parent;
|
||||
int ret = -EOPNOTSUPP;
|
||||
|
||||
|
||||
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;
|
||||
|
||||
@ -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
|
||||
*/
|
||||
dsa_slave_stp_update(dev, BR_STATE_FORWARDING);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
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)
|
||||
!strcmp(master->rtnl_link_ops->kind, "bridge"))
|
||||
err = dsa_slave_bridge_port_join(dev, master);
|
||||
else if (dsa_port_is_bridged(p))
|
||||
err = dsa_slave_bridge_port_leave(dev);
|
||||
dsa_slave_bridge_port_leave(dev);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user