net: dsa: make the FDB add function return void
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>
Wed, 6 Apr 2016 15:55:04 +0000 (11:55 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 8 Apr 2016 20:50:40 +0000 (16:50 -0400)
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: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/bcm_sf2.c
drivers/net/dsa/mv88e6xxx.c
drivers/net/dsa/mv88e6xxx.h
include/net/dsa.h
net/dsa/slave.c

index 2bba1d93869476230a298ff628df80b739794dd4..780f228765388c196398fd5f7aef6bb2ca5cd754 100644 (file)
@@ -724,13 +724,14 @@ static int bcm_sf2_sw_fdb_prepare(struct dsa_switch *ds, int port,
        return 0;
 }
 
-static int bcm_sf2_sw_fdb_add(struct dsa_switch *ds, int port,
-                             const struct switchdev_obj_port_fdb *fdb,
-                             struct switchdev_trans *trans)
+static void bcm_sf2_sw_fdb_add(struct dsa_switch *ds, int port,
+                              const struct switchdev_obj_port_fdb *fdb,
+                              struct switchdev_trans *trans)
 {
        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,
index 53c545cbb779fd148846a8c2936cf74e885e89e4..ef36bf6d6cdd19fc170aadbdedb84536b5bcfaa1 100644 (file)
@@ -2090,21 +2090,19 @@ int mv88e6xxx_port_fdb_prepare(struct dsa_switch *ds, int port,
        return 0;
 }
 
-int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
-                          const struct switchdev_obj_port_fdb *fdb,
-                          struct switchdev_trans *trans)
+void mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
+                           const struct switchdev_obj_port_fdb *fdb,
+                           struct switchdev_trans *trans)
 {
        int state = is_multicast_ether_addr(fdb->addr) ?
                GLOBAL_ATU_DATA_STATE_MC_STATIC :
                GLOBAL_ATU_DATA_STATE_UC_STATIC;
        struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
-       int ret;
 
        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);
-
-       return ret;
 }
 
 int mv88e6xxx_port_fdb_del(struct dsa_switch *ds, int port,
index 49448553c44bc7f2504e49c90fdd69a288cf2eb4..a7dccbe229f236bd06ff83cd2579305f6760daba 100644 (file)
@@ -514,9 +514,9 @@ int mv88e6xxx_port_vlan_dump(struct dsa_switch *ds, int port,
 int mv88e6xxx_port_fdb_prepare(struct dsa_switch *ds, int port,
                               const struct switchdev_obj_port_fdb *fdb,
                               struct switchdev_trans *trans);
-int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
-                          const struct switchdev_obj_port_fdb *fdb,
-                          struct switchdev_trans *trans);
+void mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
+                           const struct switchdev_obj_port_fdb *fdb,
+                           struct switchdev_trans *trans);
 int mv88e6xxx_port_fdb_del(struct dsa_switch *ds, int port,
                           const struct switchdev_obj_port_fdb *fdb);
 int mv88e6xxx_port_fdb_dump(struct dsa_switch *ds, int port,
index 2123981fd94abe2145ee95f4927244ea793146e6..f1670a4daaebcb7aaefb04150b776cd2806751de 100644 (file)
@@ -325,7 +325,7 @@ struct dsa_switch_driver {
        int     (*port_fdb_prepare)(struct dsa_switch *ds, int port,
                                    const struct switchdev_obj_port_fdb *fdb,
                                    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,
                                struct switchdev_trans *trans);
        int     (*port_fdb_del)(struct dsa_switch *ds, int port,
index 088215c3642fa6c52f9a41349ef88ac85b891958..90bc7442c44f68dc45f93687bfeaf26244e48e00 100644 (file)
@@ -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_switch *ds = p->parent;
-       int ret;
 
-       if (!ds->drv->port_fdb_prepare || !ds->drv->port_fdb_add)
-               return -EOPNOTSUPP;
+       if (switchdev_trans_ph_prepare(trans)) {
+               if (!ds->drv->port_fdb_prepare || !ds->drv->port_fdb_add)
+                       return -EOPNOTSUPP;
 
-       if (switchdev_trans_ph_prepare(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 ds->drv->port_fdb_prepare(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,