Commit 8497aa61 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller

net: dsa: make the FDB 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_fdb_prepare and port_fdb_add for simplicity
and convenience. If an hardware error occurs during the commit phase,
there is no need to report it outside the DSA driver itself.

Make the DSA port_fdb_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 43c44a9f
...@@ -724,13 +724,14 @@ static int bcm_sf2_sw_fdb_prepare(struct dsa_switch *ds, int port, ...@@ -724,13 +724,14 @@ static int bcm_sf2_sw_fdb_prepare(struct dsa_switch *ds, int port,
return 0; return 0;
} }
static int bcm_sf2_sw_fdb_add(struct dsa_switch *ds, int port, static void bcm_sf2_sw_fdb_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb, const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans) struct switchdev_trans *trans)
{ {
struct bcm_sf2_priv *priv = ds_to_priv(ds); struct bcm_sf2_priv *priv = ds_to_priv(ds);
return bcm_sf2_arl_op(priv, 0, port, fdb->addr, fdb->vid, true); if (bcm_sf2_arl_op(priv, 0, port, fdb->addr, fdb->vid, true))
pr_err("%s: failed to add MAC address\n", __func__);
} }
static int bcm_sf2_sw_fdb_del(struct dsa_switch *ds, int port, static int bcm_sf2_sw_fdb_del(struct dsa_switch *ds, int port,
......
...@@ -2090,7 +2090,7 @@ int mv88e6xxx_port_fdb_prepare(struct dsa_switch *ds, int port, ...@@ -2090,7 +2090,7 @@ int mv88e6xxx_port_fdb_prepare(struct dsa_switch *ds, int port,
return 0; return 0;
} }
int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port, void mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb, const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans) struct switchdev_trans *trans)
{ {
...@@ -2098,13 +2098,11 @@ int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port, ...@@ -2098,13 +2098,11 @@ int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
GLOBAL_ATU_DATA_STATE_MC_STATIC : GLOBAL_ATU_DATA_STATE_MC_STATIC :
GLOBAL_ATU_DATA_STATE_UC_STATIC; GLOBAL_ATU_DATA_STATE_UC_STATIC;
struct mv88e6xxx_priv_state *ps = ds_to_priv(ds); struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
int ret;
mutex_lock(&ps->smi_mutex); mutex_lock(&ps->smi_mutex);
ret = _mv88e6xxx_port_fdb_load(ds, port, fdb->addr, fdb->vid, state); if (_mv88e6xxx_port_fdb_load(ds, port, fdb->addr, fdb->vid, state))
netdev_err(ds->ports[port], "failed to load MAC address\n");
mutex_unlock(&ps->smi_mutex); mutex_unlock(&ps->smi_mutex);
return ret;
} }
int mv88e6xxx_port_fdb_del(struct dsa_switch *ds, int port, int mv88e6xxx_port_fdb_del(struct dsa_switch *ds, int port,
......
...@@ -514,7 +514,7 @@ int mv88e6xxx_port_vlan_dump(struct dsa_switch *ds, int port, ...@@ -514,7 +514,7 @@ int mv88e6xxx_port_vlan_dump(struct dsa_switch *ds, int port,
int mv88e6xxx_port_fdb_prepare(struct dsa_switch *ds, int port, int mv88e6xxx_port_fdb_prepare(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb, const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port, void mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb, const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int mv88e6xxx_port_fdb_del(struct dsa_switch *ds, int port, int mv88e6xxx_port_fdb_del(struct dsa_switch *ds, int port,
......
...@@ -325,7 +325,7 @@ struct dsa_switch_driver { ...@@ -325,7 +325,7 @@ struct dsa_switch_driver {
int (*port_fdb_prepare)(struct dsa_switch *ds, int port, int (*port_fdb_prepare)(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb, const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int (*port_fdb_add)(struct dsa_switch *ds, int port, void (*port_fdb_add)(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb, const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int (*port_fdb_del)(struct dsa_switch *ds, int port, int (*port_fdb_del)(struct dsa_switch *ds, int port,
......
...@@ -256,17 +256,17 @@ static int dsa_slave_port_fdb_add(struct net_device *dev, ...@@ -256,17 +256,17 @@ static int dsa_slave_port_fdb_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 ret;
if (switchdev_trans_ph_prepare(trans)) {
if (!ds->drv->port_fdb_prepare || !ds->drv->port_fdb_add) if (!ds->drv->port_fdb_prepare || !ds->drv->port_fdb_add)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (switchdev_trans_ph_prepare(trans)) return ds->drv->port_fdb_prepare(ds, p->port, fdb, trans);
ret = ds->drv->port_fdb_prepare(ds, p->port, fdb, trans); }
else
ret = ds->drv->port_fdb_add(ds, p->port, fdb, trans);
return ret; ds->drv->port_fdb_add(ds, p->port, fdb, trans);
return 0;
} }
static int dsa_slave_port_fdb_del(struct net_device *dev, static int dsa_slave_port_fdb_del(struct net_device *dev,
......
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