OSDN Git Service

mlxsw: spectrum: Use FID instead of vFID to setup flooding
authorIdo Schimmel <idosch@mellanox.com>
Mon, 20 Jun 2016 21:04:11 +0000 (23:04 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 21 Jun 2016 09:02:50 +0000 (05:02 -0400)
Use a FID index instead of vFID and ease the transition towards a
generic FID struct.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.h
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c

index 6df944b..7a75a45 100644 (file)
@@ -793,9 +793,9 @@ int mlxsw_sp_port_add_vid(struct net_device *dev, __be16 __always_unused proto,
                goto err_port_vport_create;
        }
 
+       fid = mlxsw_sp_vfid_to_fid(vfid->vfid);
        if (!vfid->nr_vports) {
-               err = mlxsw_sp_vport_flood_set(mlxsw_sp_vport, vfid->vfid,
-                                              true);
+               err = mlxsw_sp_vport_flood_set(mlxsw_sp_vport, fid, true);
                if (err) {
                        netdev_err(dev, "Failed to setup flooding for vFID=%d\n",
                                   vfid->vfid);
@@ -815,7 +815,6 @@ int mlxsw_sp_port_add_vid(struct net_device *dev, __be16 __always_unused proto,
                }
        }
 
-       fid = mlxsw_sp_vfid_to_fid(vfid->vfid);
        err = mlxsw_sp_vport_fid_map(mlxsw_sp_vport, fid, true);
        if (err) {
                netdev_err(dev, "Failed to map {Port, VID=%d} to vFID=%d\n",
@@ -858,7 +857,7 @@ err_vport_fid_map:
                mlxsw_sp_port_vlan_mode_trans(mlxsw_sp_port);
 err_port_vp_mode_trans:
        if (!vfid->nr_vports)
-               mlxsw_sp_vport_flood_set(mlxsw_sp_vport, vfid->vfid, false);
+               mlxsw_sp_vport_flood_set(mlxsw_sp_vport, fid, false);
 err_vport_flood_set:
        mlxsw_sp_port_vport_destroy(mlxsw_sp_vport);
 err_port_vport_create:
@@ -3260,7 +3259,7 @@ static void mlxsw_sp_vport_bridge_leave(struct mlxsw_sp_port *mlxsw_sp_vport,
                goto err_port_vid_learning_set;
        }
 
-       err = mlxsw_sp_vport_flood_set(mlxsw_sp_vport, vfid->vfid, false);
+       err = mlxsw_sp_vport_flood_set(mlxsw_sp_vport, fid, false);
        if (err) {
                netdev_err(dev, "Failed clear to clear flooding\n");
                goto err_vport_flood_set;
@@ -3320,7 +3319,8 @@ static int mlxsw_sp_vport_bridge_join(struct mlxsw_sp_port *mlxsw_sp_vport,
                }
        }
 
-       err = mlxsw_sp_vport_flood_set(mlxsw_sp_vport, vfid->vfid, true);
+       fid = mlxsw_sp_vfid_to_fid(vfid->vfid);
+       err = mlxsw_sp_vport_flood_set(mlxsw_sp_vport, fid, true);
        if (err) {
                netdev_err(dev, "Failed to setup flooding for vFID=%d\n",
                           vfid->vfid);
@@ -3344,7 +3344,6 @@ static int mlxsw_sp_vport_bridge_join(struct mlxsw_sp_port *mlxsw_sp_vport,
                goto err_vport_fid_unmap;
        }
 
-       fid = mlxsw_sp_vfid_to_fid(vfid->vfid);
        err = mlxsw_sp_vport_fid_map(mlxsw_sp_vport, fid, true);
        if (err) {
                netdev_err(dev, "Failed to map {Port, VID} to vFID=%d\n",
@@ -3371,7 +3370,7 @@ err_vport_fid_map:
 err_vport_fid_unmap:
        mlxsw_sp_port_vid_learning_set(mlxsw_sp_vport, vid, false);
 err_port_vid_learning_set:
-       mlxsw_sp_vport_flood_set(mlxsw_sp_vport, vfid->vfid, false);
+       mlxsw_sp_vport_flood_set(mlxsw_sp_vport, fid, false);
 err_port_flood_set:
        if (!vfid->nr_vports)
                mlxsw_sp_br_vfid_destroy(mlxsw_sp, vfid);
index 58a2a5d..0ae929e 100644 (file)
@@ -366,7 +366,7 @@ int mlxsw_sp_port_add_vid(struct net_device *dev, __be16 __always_unused proto,
                          u16 vid);
 int mlxsw_sp_port_kill_vid(struct net_device *dev,
                           __be16 __always_unused proto, u16 vid);
-int mlxsw_sp_vport_flood_set(struct mlxsw_sp_port *mlxsw_sp_vport, u16 vfid,
+int mlxsw_sp_vport_flood_set(struct mlxsw_sp_port *mlxsw_sp_vport, u16 fid,
                             bool set);
 void mlxsw_sp_port_active_vlans_del(struct mlxsw_sp_port *mlxsw_sp_port);
 int mlxsw_sp_port_pvid_set(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid);
index 02c126c..76f53c2 100644 (file)
@@ -260,12 +260,15 @@ err_port_flood_set:
        return err;
 }
 
-int mlxsw_sp_vport_flood_set(struct mlxsw_sp_port *mlxsw_sp_vport, u16 vfid,
+int mlxsw_sp_vport_flood_set(struct mlxsw_sp_port *mlxsw_sp_vport, u16 fid,
                             bool set)
 {
+       u16 vfid;
+
        /* In case of vFIDs, index into the flooding table is relative to
         * the start of the vFIDs range.
         */
+       vfid = mlxsw_sp_fid_to_vfid(fid);
        return __mlxsw_sp_port_flood_set(mlxsw_sp_vport, vfid, vfid, set,
                                         false);
 }