Commit 4d5770b3 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller
Browse files

net: dsa: make the VLAN add function return void



The switchdev design implies that a software error should not happen in
the commit phase since it must have been previously reported in the
prepare phase. If an hardware error occurs during the commit phase,
there is nothing switchdev can do about it.

The DSA layer separates port_vlan_prepare and port_vlan_add for
simplicity and convenience. If an hardware error occurs during the
commit phase, there is no need to report it outside the driver itself.

Make the DSA port_vlan_add routine return void for explicitness.
Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8497aa61
...@@ -1908,7 +1908,7 @@ static int _mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, u16 vid, ...@@ -1908,7 +1908,7 @@ static int _mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, u16 vid,
return _mv88e6xxx_vtu_loadpurge(ds, &vlan); return _mv88e6xxx_vtu_loadpurge(ds, &vlan);
} }
int mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans) struct switchdev_trans *trans)
{ {
...@@ -1916,23 +1916,19 @@ int mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, ...@@ -1916,23 +1916,19 @@ int mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID; bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID;
u16 vid; u16 vid;
int err = 0;
mutex_lock(&ps->smi_mutex); mutex_lock(&ps->smi_mutex);
for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) { for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid)
err = _mv88e6xxx_port_vlan_add(ds, port, vid, untagged); if (_mv88e6xxx_port_vlan_add(ds, port, vid, untagged))
if (err) netdev_err(ds->ports[port], "failed to add VLAN %d%c\n",
goto unlock; vid, untagged ? 'u' : 't');
}
/* no PVID with ranges, otherwise it's a bug */ if (pvid && _mv88e6xxx_port_pvid_set(ds, port, vlan->vid_end))
if (pvid) netdev_err(ds->ports[port], "failed to set PVID %d\n",
err = _mv88e6xxx_port_pvid_set(ds, port, vlan->vid_end); vlan->vid_end);
unlock:
mutex_unlock(&ps->smi_mutex);
return err; mutex_unlock(&ps->smi_mutex);
} }
static int _mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port, u16 vid) static int _mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port, u16 vid)
......
...@@ -503,7 +503,7 @@ int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port, ...@@ -503,7 +503,7 @@ int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port,
int mv88e6xxx_port_vlan_prepare(struct dsa_switch *ds, int port, int mv88e6xxx_port_vlan_prepare(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port, int mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port,
......
...@@ -310,7 +310,7 @@ struct dsa_switch_driver { ...@@ -310,7 +310,7 @@ struct dsa_switch_driver {
int (*port_vlan_prepare)(struct dsa_switch *ds, int port, int (*port_vlan_prepare)(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int (*port_vlan_add)(struct dsa_switch *ds, int port, void (*port_vlan_add)(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int (*port_vlan_del)(struct dsa_switch *ds, int port, int (*port_vlan_del)(struct dsa_switch *ds, int port,
......
...@@ -207,21 +207,16 @@ static int dsa_slave_port_vlan_add(struct net_device *dev, ...@@ -207,21 +207,16 @@ static int dsa_slave_port_vlan_add(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 err;
if (switchdev_trans_ph_prepare(trans)) { if (switchdev_trans_ph_prepare(trans)) {
if (!ds->drv->port_vlan_prepare || !ds->drv->port_vlan_add) if (!ds->drv->port_vlan_prepare || !ds->drv->port_vlan_add)
return -EOPNOTSUPP; return -EOPNOTSUPP;
err = ds->drv->port_vlan_prepare(ds, p->port, vlan, trans); return ds->drv->port_vlan_prepare(ds, p->port, vlan, trans);
if (err)
return err;
} else {
err = ds->drv->port_vlan_add(ds, p->port, vlan, trans);
if (err)
return err;
} }
ds->drv->port_vlan_add(ds, p->port, vlan, trans);
return 0; return 0;
} }
......
Supports Markdown
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