net/mlx5: E-Switch, Don't allow changing inline mode when flows are configured
Changing the eswitch inline mode can potentially cause already configured
flows not to match the policy. E.g. set policy L4, add some L4 rules,
set policy to L2 --> bad! Hence we disallow it.
Keep track of how many offloaded rules are now set and refuse
inline mode changes if this isn't zero.
Fixes: bffaa91658
("net/mlx5: E-Switch, Add control for inline mode")
Signed-off-by: Roi Dayan <roid@mellanox.com>
Reviewed-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d85cdccbb3
commit
375f51e2b5
@ -209,6 +209,7 @@ struct mlx5_esw_offload {
|
||||
struct mlx5_eswitch_rep *vport_reps;
|
||||
DECLARE_HASHTABLE(encap_tbl, 8);
|
||||
u8 inline_mode;
|
||||
u64 num_flows;
|
||||
};
|
||||
|
||||
struct mlx5_eswitch {
|
||||
|
@ -93,6 +93,8 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
|
||||
spec, &flow_act, dest, i);
|
||||
if (IS_ERR(rule))
|
||||
mlx5_fc_destroy(esw->dev, counter);
|
||||
else
|
||||
esw->offloads.num_flows++;
|
||||
|
||||
return rule;
|
||||
}
|
||||
@ -108,6 +110,7 @@ mlx5_eswitch_del_offloaded_rule(struct mlx5_eswitch *esw,
|
||||
counter = mlx5_flow_rule_counter(rule);
|
||||
mlx5_del_flow_rules(rule);
|
||||
mlx5_fc_destroy(esw->dev, counter);
|
||||
esw->offloads.num_flows--;
|
||||
}
|
||||
}
|
||||
|
||||
@ -922,6 +925,11 @@ int mlx5_devlink_eswitch_inline_mode_set(struct devlink *devlink, u8 mode)
|
||||
MLX5_CAP_INLINE_MODE_VPORT_CONTEXT)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (esw->offloads.num_flows > 0) {
|
||||
esw_warn(dev, "Can't set inline mode when flows are configured\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
err = esw_inline_mode_from_devlink(mode, &mlx5_mode);
|
||||
if (err)
|
||||
goto out;
|
||||
|
Loading…
Reference in New Issue
Block a user