@@ -96,6 +96,7 @@ struct mlx5e_tc_flow {
96
96
97
97
struct mlx5e_tc_flow_parse_attr {
98
98
struct ip_tunnel_info tun_info ;
99
+ struct net_device * filter_dev ;
99
100
struct mlx5_flow_spec spec ;
100
101
int num_mod_hdr_actions ;
101
102
void * mod_hdr_actions ;
@@ -3054,10 +3055,6 @@ mlx5e_alloc_flow(struct mlx5e_priv *priv, int attr_size,
3054
3055
flow -> flags = flow_flags ;
3055
3056
flow -> priv = priv ;
3056
3057
3057
- err = parse_cls_flower (priv , flow , & parse_attr -> spec , f );
3058
- if (err )
3059
- goto err_free ;
3060
-
3061
3058
* __flow = flow ;
3062
3059
* __parse_attr = parse_attr ;
3063
3060
@@ -3073,6 +3070,7 @@ static int
3073
3070
mlx5e_add_fdb_flow (struct mlx5e_priv * priv ,
3074
3071
struct tc_cls_flower_offload * f ,
3075
3072
u16 flow_flags ,
3073
+ struct net_device * filter_dev ,
3076
3074
struct mlx5e_tc_flow * * __flow )
3077
3075
{
3078
3076
struct netlink_ext_ack * extack = f -> common .extack ;
@@ -3086,6 +3084,11 @@ mlx5e_add_fdb_flow(struct mlx5e_priv *priv,
3086
3084
& parse_attr , & flow );
3087
3085
if (err )
3088
3086
goto out ;
3087
+ parse_attr -> filter_dev = filter_dev ;
3088
+ flow -> esw_attr -> parse_attr = parse_attr ;
3089
+ err = parse_cls_flower (flow -> priv , flow , & parse_attr -> spec , f );
3090
+ if (err )
3091
+ goto err_free ;
3089
3092
3090
3093
flow -> esw_attr -> chain = f -> common .chain_index ;
3091
3094
flow -> esw_attr -> prio = TC_H_MAJ (f -> common .prio ) >> 16 ;
@@ -3116,6 +3119,7 @@ static int
3116
3119
mlx5e_add_nic_flow (struct mlx5e_priv * priv ,
3117
3120
struct tc_cls_flower_offload * f ,
3118
3121
u16 flow_flags ,
3122
+ struct net_device * filter_dev ,
3119
3123
struct mlx5e_tc_flow * * __flow )
3120
3124
{
3121
3125
struct netlink_ext_ack * extack = f -> common .extack ;
@@ -3134,6 +3138,11 @@ mlx5e_add_nic_flow(struct mlx5e_priv *priv,
3134
3138
if (err )
3135
3139
goto out ;
3136
3140
3141
+ parse_attr -> filter_dev = filter_dev ;
3142
+ err = parse_cls_flower (flow -> priv , flow , & parse_attr -> spec , f );
3143
+ if (err )
3144
+ goto err_free ;
3145
+
3137
3146
err = parse_tc_nic_actions (priv , f -> exts , parse_attr , flow , extack );
3138
3147
if (err )
3139
3148
goto err_free ;
@@ -3159,6 +3168,7 @@ static int
3159
3168
mlx5e_tc_add_flow (struct mlx5e_priv * priv ,
3160
3169
struct tc_cls_flower_offload * f ,
3161
3170
int flags ,
3171
+ struct net_device * filter_dev ,
3162
3172
struct mlx5e_tc_flow * * flow )
3163
3173
{
3164
3174
struct mlx5_eswitch * esw = priv -> mdev -> priv .eswitch ;
@@ -3171,9 +3181,11 @@ mlx5e_tc_add_flow(struct mlx5e_priv *priv,
3171
3181
return - EOPNOTSUPP ;
3172
3182
3173
3183
if (esw && esw -> mode == SRIOV_OFFLOADS )
3174
- err = mlx5e_add_fdb_flow (priv , f , flow_flags , flow );
3184
+ err = mlx5e_add_fdb_flow (priv , f , flow_flags ,
3185
+ filter_dev , flow );
3175
3186
else
3176
- err = mlx5e_add_nic_flow (priv , f , flow_flags , flow );
3187
+ err = mlx5e_add_nic_flow (priv , f , flow_flags ,
3188
+ filter_dev , flow );
3177
3189
3178
3190
return err ;
3179
3191
}
@@ -3196,7 +3208,7 @@ int mlx5e_configure_flower(struct net_device *dev, struct mlx5e_priv *priv,
3196
3208
goto out ;
3197
3209
}
3198
3210
3199
- err = mlx5e_tc_add_flow (priv , f , flags , & flow );
3211
+ err = mlx5e_tc_add_flow (priv , f , flags , dev , & flow );
3200
3212
if (err )
3201
3213
goto out ;
3202
3214
0 commit comments