mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
mlxsw: spectrum: Fix gact_ok offloading
For ok GACT action, TERMINATE binding_cmd should be used in action set
passed down to HW.
Fixes: b2925957ec
("mlxsw: spectrum_flower: Offload "ok" termination action")
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Reported-by: Alexander Petrovskiy <alexpe@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bcf34adc10
commit
49bae2f309
5 changed files with 19 additions and 1 deletions
|
@ -443,6 +443,17 @@ int mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id)
|
|||
}
|
||||
EXPORT_SYMBOL(mlxsw_afa_block_jump);
|
||||
|
||||
int mlxsw_afa_block_terminate(struct mlxsw_afa_block *block)
|
||||
{
|
||||
if (block->finished)
|
||||
return -EINVAL;
|
||||
mlxsw_afa_set_goto_set(block->cur_set,
|
||||
MLXSW_AFA_SET_GOTO_BINDING_CMD_TERM, 0);
|
||||
block->finished = true;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(mlxsw_afa_block_terminate);
|
||||
|
||||
static struct mlxsw_afa_fwd_entry *
|
||||
mlxsw_afa_fwd_entry_create(struct mlxsw_afa *mlxsw_afa, u8 local_port)
|
||||
{
|
||||
|
|
|
@ -65,6 +65,7 @@ char *mlxsw_afa_block_first_set(struct mlxsw_afa_block *block);
|
|||
u32 mlxsw_afa_block_first_set_kvdl_index(struct mlxsw_afa_block *block);
|
||||
int mlxsw_afa_block_continue(struct mlxsw_afa_block *block);
|
||||
int mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id);
|
||||
int mlxsw_afa_block_terminate(struct mlxsw_afa_block *block);
|
||||
int mlxsw_afa_block_append_drop(struct mlxsw_afa_block *block);
|
||||
int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block, u16 trap_id);
|
||||
int mlxsw_afa_block_append_trap_and_forward(struct mlxsw_afa_block *block,
|
||||
|
|
|
@ -553,6 +553,7 @@ void mlxsw_sp_acl_rulei_keymask_buf(struct mlxsw_sp_acl_rule_info *rulei,
|
|||
int mlxsw_sp_acl_rulei_act_continue(struct mlxsw_sp_acl_rule_info *rulei);
|
||||
int mlxsw_sp_acl_rulei_act_jump(struct mlxsw_sp_acl_rule_info *rulei,
|
||||
u16 group_id);
|
||||
int mlxsw_sp_acl_rulei_act_terminate(struct mlxsw_sp_acl_rule_info *rulei);
|
||||
int mlxsw_sp_acl_rulei_act_drop(struct mlxsw_sp_acl_rule_info *rulei);
|
||||
int mlxsw_sp_acl_rulei_act_trap(struct mlxsw_sp_acl_rule_info *rulei);
|
||||
int mlxsw_sp_acl_rulei_act_mirror(struct mlxsw_sp *mlxsw_sp,
|
||||
|
|
|
@ -528,6 +528,11 @@ int mlxsw_sp_acl_rulei_act_jump(struct mlxsw_sp_acl_rule_info *rulei,
|
|||
return mlxsw_afa_block_jump(rulei->act_block, group_id);
|
||||
}
|
||||
|
||||
int mlxsw_sp_acl_rulei_act_terminate(struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
return mlxsw_afa_block_terminate(rulei->act_block);
|
||||
}
|
||||
|
||||
int mlxsw_sp_acl_rulei_act_drop(struct mlxsw_sp_acl_rule_info *rulei)
|
||||
{
|
||||
return mlxsw_afa_block_append_drop(rulei->act_block);
|
||||
|
|
|
@ -65,7 +65,7 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
|
|||
tcf_exts_to_list(exts, &actions);
|
||||
list_for_each_entry(a, &actions, list) {
|
||||
if (is_tcf_gact_ok(a)) {
|
||||
err = mlxsw_sp_acl_rulei_act_continue(rulei);
|
||||
err = mlxsw_sp_acl_rulei_act_terminate(rulei);
|
||||
if (err)
|
||||
return err;
|
||||
} else if (is_tcf_gact_shot(a)) {
|
||||
|
|
Loading…
Reference in a new issue