In the following patch, attempts to change the next/goto of a flexible action set from goto to next will be rejected for action sets that contain a trap_fwd action. Propagate extack to make it possible to communicate the issue to the user.
Signed-off-by: Petr Machata <pe...@nvidia.com> Reviewed-by: Jiri Pirko <j...@nvidia.com> Reviewed-by: Ido Schimmel <ido...@nvidia.com> --- .../net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c | 9 ++++++--- .../net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h | 3 ++- drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 3 ++- drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c | 2 +- drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c | 5 +++-- drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c | 2 +- drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c | 2 +- 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c index 78d9c0196f2b..faa90cc31376 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c +++ b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c @@ -264,7 +264,8 @@ static void mlxsw_afa_set_goto_set(struct mlxsw_afa_set *set, } static void mlxsw_afa_set_next_set(struct mlxsw_afa_set *set, - u32 next_set_kvdl_index) + u32 next_set_kvdl_index, + struct netlink_ext_ack *extack) { char *actions = set->ht_key.enc_actions; @@ -455,7 +456,8 @@ void mlxsw_afa_block_destroy(struct mlxsw_afa_block *block) } EXPORT_SYMBOL(mlxsw_afa_block_destroy); -int mlxsw_afa_block_commit(struct mlxsw_afa_block *block) +int mlxsw_afa_block_commit(struct mlxsw_afa_block *block, + struct netlink_ext_ack *extack) { struct mlxsw_afa_set *set = block->cur_set; struct mlxsw_afa_set *prev_set; @@ -479,7 +481,8 @@ int mlxsw_afa_block_commit(struct mlxsw_afa_block *block) return PTR_ERR(set); if (prev_set) { prev_set->next = set; - mlxsw_afa_set_next_set(prev_set, set->kvdl_index); + mlxsw_afa_set_next_set(prev_set, set->kvdl_index, + extack); set = prev_set; } } while (prev_set); diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h index b65bf98eb5ab..24350f9470f8 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h +++ b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h @@ -45,7 +45,8 @@ struct mlxsw_afa *mlxsw_afa_create(unsigned int max_acts_per_set, void mlxsw_afa_destroy(struct mlxsw_afa *mlxsw_afa); struct mlxsw_afa_block *mlxsw_afa_block_create(struct mlxsw_afa *mlxsw_afa); void mlxsw_afa_block_destroy(struct mlxsw_afa_block *block); -int mlxsw_afa_block_commit(struct mlxsw_afa_block *block); +int mlxsw_afa_block_commit(struct mlxsw_afa_block *block, + struct netlink_ext_ack *extack); char *mlxsw_afa_block_first_set(struct mlxsw_afa_block *block); char *mlxsw_afa_block_cur_set(struct mlxsw_afa_block *block); u32 mlxsw_afa_block_first_kvdl_index(struct mlxsw_afa_block *block); diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h index f99db88ee884..d74fc7ff8083 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h @@ -920,7 +920,8 @@ struct mlxsw_sp_acl_rule_info * mlxsw_sp_acl_rulei_create(struct mlxsw_sp_acl *acl, struct mlxsw_afa_block *afa_block); void mlxsw_sp_acl_rulei_destroy(struct mlxsw_sp_acl_rule_info *rulei); -int mlxsw_sp_acl_rulei_commit(struct mlxsw_sp_acl_rule_info *rulei); +int mlxsw_sp_acl_rulei_commit(struct mlxsw_sp_acl_rule_info *rulei, + struct netlink_ext_ack *extack); void mlxsw_sp_acl_rulei_priority(struct mlxsw_sp_acl_rule_info *rulei, unsigned int priority); void mlxsw_sp_acl_rulei_keymask_u32(struct mlxsw_sp_acl_rule_info *rulei, diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c index 3a636f753607..cda04bc4453f 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum1_acl_tcam.c @@ -75,7 +75,7 @@ mlxsw_sp1_acl_ctcam_region_catchall_add(struct mlxsw_sp *mlxsw_sp, err = mlxsw_sp_acl_rulei_act_continue(rulei); if (WARN_ON(err)) goto err_rulei_act_continue; - err = mlxsw_sp_acl_rulei_commit(rulei); + err = mlxsw_sp_acl_rulei_commit(rulei, NULL); if (err) goto err_rulei_commit; err = mlxsw_sp_acl_ctcam_entry_add(mlxsw_sp, ®ion->cregion, diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c index 67cedfa76f78..b9c4c1feba6d 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c @@ -341,9 +341,10 @@ void mlxsw_sp_acl_rulei_destroy(struct mlxsw_sp_acl_rule_info *rulei) kfree(rulei); } -int mlxsw_sp_acl_rulei_commit(struct mlxsw_sp_acl_rule_info *rulei) +int mlxsw_sp_acl_rulei_commit(struct mlxsw_sp_acl_rule_info *rulei, + struct netlink_ext_ack *extack) { - return mlxsw_afa_block_commit(rulei->act_block); + return mlxsw_afa_block_commit(rulei->act_block, extack); } void mlxsw_sp_acl_rulei_priority(struct mlxsw_sp_acl_rule_info *rulei, diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c index be3791ca6069..936788f741dd 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c @@ -611,7 +611,7 @@ int mlxsw_sp_flower_replace(struct mlxsw_sp *mlxsw_sp, if (err) goto err_flower_parse; - err = mlxsw_sp_acl_rulei_commit(rulei); + err = mlxsw_sp_acl_rulei_commit(rulei, f->common.extack); if (err) goto err_rulei_commit; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c index 221aa6a474eb..f81e8d25987b 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c @@ -241,7 +241,7 @@ mlxsw_sp_mr_tcam_afa_block_create(struct mlxsw_sp *mlxsw_sp, goto err; } - err = mlxsw_afa_block_commit(afa_block); + err = mlxsw_afa_block_commit(afa_block, NULL); if (err) goto err; return afa_block; -- 2.26.2