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

index ef36bf6d6cdd19fc170aadbdedb84536b5bcfaa1..62320fca6712204cdc1828eaf36273a63af224bb 100644 (file)
@@ -1908,31 +1908,27 @@ static int _mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port, u16 vid,
        return _mv88e6xxx_vtu_loadpurge(ds, &vlan);
 }
 
-int mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
-                           const struct switchdev_obj_port_vlan *vlan,
-                           struct switchdev_trans *trans)
+void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
+                            const struct switchdev_obj_port_vlan *vlan,
+                            struct switchdev_trans *trans)
 {
        struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
        bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
        bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID;
        u16 vid;
-       int err = 0;
 
        mutex_lock(&ps->smi_mutex);
 
-       for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
-               err = _mv88e6xxx_port_vlan_add(ds, port, vid, untagged);
-               if (err)
-                       goto unlock;
-       }
+       for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid)
+               if (_mv88e6xxx_port_vlan_add(ds, port, vid, untagged))
+                       netdev_err(ds->ports[port], "failed to add VLAN %d%c\n",
+                                  vid, untagged ? 'u' : 't');
 
-       /* no PVID with ranges, otherwise it's a bug */
-       if (pvid)
-               err = _mv88e6xxx_port_pvid_set(ds, port, vlan->vid_end);
-unlock:
-       mutex_unlock(&ps->smi_mutex);
+       if (pvid && _mv88e6xxx_port_pvid_set(ds, port, vlan->vid_end))
+               netdev_err(ds->ports[port], "failed to set PVID %d\n",
+                          vlan->vid_end);
 
-       return err;
+       mutex_unlock(&ps->smi_mutex);
 }
 
 static int _mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port, u16 vid)
index a7dccbe229f236bd06ff83cd2579305f6760daba..236bcaa606e73d2e7dea13295c0570ead096ea8c 100644 (file)
@@ -503,9 +503,9 @@ int mv88e6xxx_port_vlan_filtering(struct dsa_switch *ds, int port,
 int mv88e6xxx_port_vlan_prepare(struct dsa_switch *ds, int port,
                                const struct switchdev_obj_port_vlan *vlan,
                                struct switchdev_trans *trans);
-int mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
-                           const struct switchdev_obj_port_vlan *vlan,
-                           struct switchdev_trans *trans);
+void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,
+                            const struct switchdev_obj_port_vlan *vlan,
+                            struct switchdev_trans *trans);
 int mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port,
                            const struct switchdev_obj_port_vlan *vlan);
 int mv88e6xxx_port_vlan_dump(struct dsa_switch *ds, int port,
index f1670a4daaebcb7aaefb04150b776cd2806751de..18d1be3ad62d702f36f3b1238bbfa8622f788762 100644 (file)
@@ -310,7 +310,7 @@ struct dsa_switch_driver {
        int     (*port_vlan_prepare)(struct dsa_switch *ds, int port,
                                     const struct switchdev_obj_port_vlan *vlan,
                                     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,
                                 struct switchdev_trans *trans);
        int     (*port_vlan_del)(struct dsa_switch *ds, int port,
index 90bc7442c44f68dc45f93687bfeaf26244e48e00..2dae0d06435982a795c4cdb26992304e7d86b99e 100644 (file)
@@ -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_switch *ds = p->parent;
-       int err;
 
        if (switchdev_trans_ph_prepare(trans)) {
                if (!ds->drv->port_vlan_prepare || !ds->drv->port_vlan_add)
                        return -EOPNOTSUPP;
 
-               err = 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;
+               return ds->drv->port_vlan_prepare(ds, p->port, vlan, trans);
        }
 
+       ds->drv->port_vlan_add(ds, p->port, vlan, trans);
+
        return 0;
 }