@@ -4045,74 +4045,64 @@ parse_tc_actions(struct mlx5e_tc_act_parse_state *parse_state,
4045
4045
struct flow_action * flow_action )
4046
4046
{
4047
4047
struct netlink_ext_ack * extack = parse_state -> extack ;
4048
- struct mlx5e_tc_flow_action flow_action_reorder ;
4049
4048
struct mlx5e_tc_flow * flow = parse_state -> flow ;
4050
4049
struct mlx5e_tc_jump_state jump_state = {};
4051
4050
struct mlx5_flow_attr * attr = flow -> attr ;
4052
4051
enum mlx5_flow_namespace_type ns_type ;
4053
4052
struct mlx5e_priv * priv = flow -> priv ;
4054
- struct flow_action_entry * act , * * _act ;
4055
4053
struct mlx5_flow_attr * prev_attr ;
4054
+ struct flow_action_entry * act ;
4056
4055
struct mlx5e_tc_act * tc_act ;
4057
4056
bool is_missable ;
4058
4057
int err , i ;
4059
4058
4060
- flow_action_reorder .num_entries = flow_action -> num_entries ;
4061
- flow_action_reorder .entries = kcalloc (flow_action -> num_entries ,
4062
- sizeof (flow_action ), GFP_KERNEL );
4063
- if (!flow_action_reorder .entries )
4064
- return - ENOMEM ;
4065
-
4066
- mlx5e_tc_act_reorder_flow_actions (flow_action , & flow_action_reorder );
4067
-
4068
4059
ns_type = mlx5e_get_flow_namespace (flow );
4069
4060
list_add (& attr -> list , & flow -> attrs );
4070
4061
4071
- flow_action_for_each (i , _act , & flow_action_reorder ) {
4062
+ flow_action_for_each (i , act , flow_action ) {
4072
4063
jump_state .jump_target = false;
4073
- act = * _act ;
4074
4064
is_missable = false;
4075
4065
prev_attr = attr ;
4076
4066
4077
4067
tc_act = mlx5e_tc_act_get (act -> id , ns_type );
4078
4068
if (!tc_act ) {
4079
4069
NL_SET_ERR_MSG_MOD (extack , "Not implemented offload action" );
4080
4070
err = - EOPNOTSUPP ;
4081
- goto out_free ;
4071
+ goto out_free_post_acts ;
4082
4072
}
4083
4073
4084
4074
if (tc_act -> can_offload && !tc_act -> can_offload (parse_state , act , i , attr )) {
4085
4075
err = - EOPNOTSUPP ;
4086
- goto out_free ;
4076
+ goto out_free_post_acts ;
4087
4077
}
4088
4078
4089
4079
err = tc_act -> parse_action (parse_state , act , priv , attr );
4090
4080
if (err )
4091
- goto out_free ;
4081
+ goto out_free_post_acts ;
4092
4082
4093
4083
dec_jump_count (act , tc_act , attr , priv , & jump_state );
4094
4084
4095
4085
err = parse_branch_ctrl (act , tc_act , flow , attr , & jump_state , extack );
4096
4086
if (err )
4097
- goto out_free ;
4087
+ goto out_free_post_acts ;
4098
4088
4099
4089
parse_state -> actions |= attr -> action ;
4100
4090
4101
4091
/* Split attr for multi table act if not the last act. */
4102
4092
if (jump_state .jump_target ||
4103
4093
(tc_act -> is_multi_table_act &&
4104
4094
tc_act -> is_multi_table_act (priv , act , attr ) &&
4105
- i < flow_action_reorder . num_entries - 1 )) {
4095
+ i < flow_action -> num_entries - 1 )) {
4106
4096
is_missable = tc_act -> is_missable ? tc_act -> is_missable (act ) : false;
4107
4097
4108
4098
err = mlx5e_tc_act_post_parse (parse_state , flow_action , attr , ns_type );
4109
4099
if (err )
4110
- goto out_free ;
4100
+ goto out_free_post_acts ;
4111
4101
4112
4102
attr = mlx5e_clone_flow_attr_for_post_act (flow -> attr , ns_type );
4113
4103
if (!attr ) {
4114
4104
err = - ENOMEM ;
4115
- goto out_free ;
4105
+ goto out_free_post_acts ;
4116
4106
}
4117
4107
4118
4108
list_add (& attr -> list , & flow -> attrs );
@@ -4129,8 +4119,6 @@ parse_tc_actions(struct mlx5e_tc_act_parse_state *parse_state,
4129
4119
}
4130
4120
}
4131
4121
4132
- kfree (flow_action_reorder .entries );
4133
-
4134
4122
err = mlx5e_tc_act_post_parse (parse_state , flow_action , attr , ns_type );
4135
4123
if (err )
4136
4124
goto out_free_post_acts ;
@@ -4141,8 +4129,6 @@ parse_tc_actions(struct mlx5e_tc_act_parse_state *parse_state,
4141
4129
4142
4130
return 0 ;
4143
4131
4144
- out_free :
4145
- kfree (flow_action_reorder .entries );
4146
4132
out_free_post_acts :
4147
4133
free_flow_post_acts (flow );
4148
4134
0 commit comments