Skip to content

Commit

Permalink
mlxsw: spectrum: Iterate over all ports in gap during unsplit create
Browse files Browse the repository at this point in the history
During recreation of original unsplit ports, just simply iterate over
the whole gap and recreate whatever originally existed.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Shalom Toledo <shalomt@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jiri Pirko authored and David S. Miller committed Oct 31, 2019
1 parent c3a64b5 commit fbbeea3
Showing 1 changed file with 8 additions and 13 deletions.
21 changes: 8 additions & 13 deletions drivers/net/ethernet/mellanox/mlxsw/spectrum.c
Original file line number Diff line number Diff line change
Expand Up @@ -4136,23 +4136,18 @@ mlxsw_sp_port_split_create(struct mlxsw_sp *mlxsw_sp, u8 base_port,
}

static void mlxsw_sp_port_unsplit_create(struct mlxsw_sp *mlxsw_sp,
u8 base_port, unsigned int count)
u8 base_port,
unsigned int count, u8 offset)
{
struct mlxsw_sp_port_mapping *port_mapping;
u8 local_port;
int i;

/* Split by four means we need to re-create two ports, otherwise
* only one.
*/
count = count / 2;

for (i = 0; i < count; i++) {
local_port = base_port + i * 2;
port_mapping = mlxsw_sp->port_mapping[local_port];
/* Go over original unsplit ports in the gap and recreate them. */
for (i = 0; i < count * offset; i++) {
port_mapping = mlxsw_sp->port_mapping[base_port + i];
if (!port_mapping)
continue;
mlxsw_sp_port_create(mlxsw_sp, local_port, 0, port_mapping);
mlxsw_sp_port_create(mlxsw_sp, base_port + i, 0, port_mapping);
}
}

Expand Down Expand Up @@ -4270,7 +4265,7 @@ static int mlxsw_sp_port_split(struct mlxsw_core *mlxsw_core, u8 local_port,
return 0;

err_port_split_create:
mlxsw_sp_port_unsplit_create(mlxsw_sp, base_port, count);
mlxsw_sp_port_unsplit_create(mlxsw_sp, base_port, count, offset);
return err;
}

Expand Down Expand Up @@ -4322,7 +4317,7 @@ static int mlxsw_sp_port_unsplit(struct mlxsw_core *mlxsw_core, u8 local_port,
if (mlxsw_sp_port_created(mlxsw_sp, base_port + i * offset))
mlxsw_sp_port_remove(mlxsw_sp, base_port + i * offset);

mlxsw_sp_port_unsplit_create(mlxsw_sp, base_port, count);
mlxsw_sp_port_unsplit_create(mlxsw_sp, base_port, count, offset);

return 0;
}
Expand Down

0 comments on commit fbbeea3

Please sign in to comment.