mlxsw: spectrum: Make port flood update more generic
authorNogah Frankel <nogahf@mellanox.com>
Thu, 9 Feb 2017 13:54:44 +0000 (14:54 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 10 Feb 2017 16:46:39 +0000 (11:46 -0500)
Currently, there is a per port flood update function only for the UC
table. Make the function  more generic by changing the table type to be
an input.

Signed-off-by: Nogah Frankel <nogahf@mellanox.com>
Signed-off-by: Yotam Gigi <yotamg@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_switchdev.c

index 2bd5ffe36a8e1253bd74a0ba7ed4bc1bb37abcb6..b1e2ec121886e8095e255d03288de6c4420e0b27 100644 (file)
@@ -219,8 +219,9 @@ err_flood_bm_set:
        return err;
 }
 
-static int mlxsw_sp_port_uc_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
-                                     bool set)
+static int mlxsw_sp_port_flood_table_set(struct mlxsw_sp_port *mlxsw_sp_port,
+                                        enum mlxsw_sp_flood_table table,
+                                        bool set)
 {
        struct net_device *dev = mlxsw_sp_port->dev;
        u16 vid, last_visited_vid;
@@ -231,15 +232,12 @@ static int mlxsw_sp_port_uc_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
                u16 vfid = mlxsw_sp_fid_to_vfid(fid);
 
                return __mlxsw_sp_port_flood_table_set(mlxsw_sp_port, vfid,
-                                                      vfid,
-                                                      MLXSW_SP_FLOOD_TABLE_UC,
-                                                      set);
+                                                      vfid, table, set);
        }
 
        for_each_set_bit(vid, mlxsw_sp_port->active_vlans, VLAN_N_VID) {
                err = __mlxsw_sp_port_flood_table_set(mlxsw_sp_port, vid, vid,
-                                                     MLXSW_SP_FLOOD_TABLE_UC,
-                                                     set);
+                                                     table, set);
                if (err) {
                        last_visited_vid = vid;
                        goto err_port_flood_set;
@@ -250,8 +248,8 @@ static int mlxsw_sp_port_uc_flood_set(struct mlxsw_sp_port *mlxsw_sp_port,
 
 err_port_flood_set:
        for_each_set_bit(vid, mlxsw_sp_port->active_vlans, last_visited_vid)
-               __mlxsw_sp_port_flood_table_set(mlxsw_sp_port, vid, vid,
-                                               MLXSW_SP_FLOOD_TABLE_UC, !set);
+               __mlxsw_sp_port_flood_table_set(mlxsw_sp_port, vid, vid, table,
+                                               !set);
        netdev_err(dev, "Failed to configure unicast flooding\n");
        return err;
 }
@@ -311,8 +309,9 @@ static int mlxsw_sp_port_attr_br_flags_set(struct mlxsw_sp_port *mlxsw_sp_port,
                return 0;
 
        if ((uc_flood ^ brport_flags) & BR_FLOOD) {
-               err = mlxsw_sp_port_uc_flood_set(mlxsw_sp_port,
-                                                !mlxsw_sp_port->uc_flood);
+               err = mlxsw_sp_port_flood_table_set(mlxsw_sp_port,
+                                                   MLXSW_SP_FLOOD_TABLE_UC,
+                                                   !mlxsw_sp_port->uc_flood);
                if (err)
                        return err;
        }
@@ -332,8 +331,9 @@ static int mlxsw_sp_port_attr_br_flags_set(struct mlxsw_sp_port *mlxsw_sp_port,
 
 err_port_learning_set:
        if ((uc_flood ^ brport_flags) & BR_FLOOD)
-               mlxsw_sp_port_uc_flood_set(mlxsw_sp_port,
-                                          mlxsw_sp_port->uc_flood);
+               mlxsw_sp_port_flood_table_set(mlxsw_sp_port,
+                                             MLXSW_SP_FLOOD_TABLE_UC,
+                                             mlxsw_sp_port->uc_flood);
        return err;
 }