@@ -175,15 +175,12 @@ static int arfs_add_default_rule(struct mlx5e_priv *priv,
175
175
{
176
176
struct arfs_table * arfs_t = & priv -> fs .arfs .arfs_tables [type ];
177
177
struct mlx5_flow_destination dest ;
178
- u8 match_criteria_enable = 0 ;
179
178
struct mlx5e_tir * tir = priv -> indir_tir ;
180
- u32 * match_criteria ;
181
- u32 * match_value ;
179
+ struct mlx5_flow_spec * spec ;
182
180
int err = 0 ;
183
181
184
- match_value = mlx5_vzalloc (MLX5_ST_SZ_BYTES (fte_match_param ));
185
- match_criteria = mlx5_vzalloc (MLX5_ST_SZ_BYTES (fte_match_param ));
186
- if (!match_value || !match_criteria ) {
182
+ spec = mlx5_vzalloc (sizeof (* spec ));
183
+ if (!spec ) {
187
184
netdev_err (priv -> netdev , "%s: alloc failed\n" , __func__ );
188
185
err = - ENOMEM ;
189
186
goto out ;
@@ -208,8 +205,7 @@ static int arfs_add_default_rule(struct mlx5e_priv *priv,
208
205
goto out ;
209
206
}
210
207
211
- arfs_t -> default_rule = mlx5_add_flow_rule (arfs_t -> ft .t , match_criteria_enable ,
212
- match_criteria , match_value ,
208
+ arfs_t -> default_rule = mlx5_add_flow_rule (arfs_t -> ft .t , spec ,
213
209
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST ,
214
210
MLX5_FS_DEFAULT_FLOW_TAG ,
215
211
& dest );
@@ -220,8 +216,7 @@ static int arfs_add_default_rule(struct mlx5e_priv *priv,
220
216
__func__ , type );
221
217
}
222
218
out :
223
- kvfree (match_criteria );
224
- kvfree (match_value );
219
+ kvfree (spec );
225
220
return err ;
226
221
}
227
222
@@ -475,23 +470,20 @@ static struct mlx5_flow_rule *arfs_add_rule(struct mlx5e_priv *priv,
475
470
struct mlx5_flow_rule * rule = NULL ;
476
471
struct mlx5_flow_destination dest ;
477
472
struct arfs_table * arfs_table ;
478
- u8 match_criteria_enable = 0 ;
473
+ struct mlx5_flow_spec * spec ;
479
474
struct mlx5_flow_table * ft ;
480
- u32 * match_criteria ;
481
- u32 * match_value ;
482
475
int err = 0 ;
483
476
484
- match_value = mlx5_vzalloc (MLX5_ST_SZ_BYTES (fte_match_param ));
485
- match_criteria = mlx5_vzalloc (MLX5_ST_SZ_BYTES (fte_match_param ));
486
- if (!match_value || !match_criteria ) {
477
+ spec = mlx5_vzalloc (sizeof (* spec ));
478
+ if (!spec ) {
487
479
netdev_err (priv -> netdev , "%s: alloc failed\n" , __func__ );
488
480
err = - ENOMEM ;
489
481
goto out ;
490
482
}
491
- match_criteria_enable = MLX5_MATCH_OUTER_HEADERS ;
492
- MLX5_SET_TO_ONES (fte_match_param , match_criteria ,
483
+ spec -> match_criteria_enable = MLX5_MATCH_OUTER_HEADERS ;
484
+ MLX5_SET_TO_ONES (fte_match_param , spec -> match_criteria ,
493
485
outer_headers .ethertype );
494
- MLX5_SET (fte_match_param , match_value , outer_headers .ethertype ,
486
+ MLX5_SET (fte_match_param , spec -> match_value , outer_headers .ethertype ,
495
487
ntohs (tuple -> etype ));
496
488
arfs_table = arfs_get_table (arfs , tuple -> ip_proto , tuple -> etype );
497
489
if (!arfs_table ) {
@@ -501,59 +493,58 @@ static struct mlx5_flow_rule *arfs_add_rule(struct mlx5e_priv *priv,
501
493
502
494
ft = arfs_table -> ft .t ;
503
495
if (tuple -> ip_proto == IPPROTO_TCP ) {
504
- MLX5_SET_TO_ONES (fte_match_param , match_criteria ,
496
+ MLX5_SET_TO_ONES (fte_match_param , spec -> match_criteria ,
505
497
outer_headers .tcp_dport );
506
- MLX5_SET_TO_ONES (fte_match_param , match_criteria ,
498
+ MLX5_SET_TO_ONES (fte_match_param , spec -> match_criteria ,
507
499
outer_headers .tcp_sport );
508
- MLX5_SET (fte_match_param , match_value , outer_headers .tcp_dport ,
500
+ MLX5_SET (fte_match_param , spec -> match_value , outer_headers .tcp_dport ,
509
501
ntohs (tuple -> dst_port ));
510
- MLX5_SET (fte_match_param , match_value , outer_headers .tcp_sport ,
502
+ MLX5_SET (fte_match_param , spec -> match_value , outer_headers .tcp_sport ,
511
503
ntohs (tuple -> src_port ));
512
504
} else {
513
- MLX5_SET_TO_ONES (fte_match_param , match_criteria ,
505
+ MLX5_SET_TO_ONES (fte_match_param , spec -> match_criteria ,
514
506
outer_headers .udp_dport );
515
- MLX5_SET_TO_ONES (fte_match_param , match_criteria ,
507
+ MLX5_SET_TO_ONES (fte_match_param , spec -> match_criteria ,
516
508
outer_headers .udp_sport );
517
- MLX5_SET (fte_match_param , match_value , outer_headers .udp_dport ,
509
+ MLX5_SET (fte_match_param , spec -> match_value , outer_headers .udp_dport ,
518
510
ntohs (tuple -> dst_port ));
519
- MLX5_SET (fte_match_param , match_value , outer_headers .udp_sport ,
511
+ MLX5_SET (fte_match_param , spec -> match_value , outer_headers .udp_sport ,
520
512
ntohs (tuple -> src_port ));
521
513
}
522
514
if (tuple -> etype == htons (ETH_P_IP )) {
523
- memcpy (MLX5_ADDR_OF (fte_match_param , match_value ,
515
+ memcpy (MLX5_ADDR_OF (fte_match_param , spec -> match_value ,
524
516
outer_headers .src_ipv4_src_ipv6 .ipv4_layout .ipv4 ),
525
517
& tuple -> src_ipv4 ,
526
518
4 );
527
- memcpy (MLX5_ADDR_OF (fte_match_param , match_value ,
519
+ memcpy (MLX5_ADDR_OF (fte_match_param , spec -> match_value ,
528
520
outer_headers .dst_ipv4_dst_ipv6 .ipv4_layout .ipv4 ),
529
521
& tuple -> dst_ipv4 ,
530
522
4 );
531
- MLX5_SET_TO_ONES (fte_match_param , match_criteria ,
523
+ MLX5_SET_TO_ONES (fte_match_param , spec -> match_criteria ,
532
524
outer_headers .src_ipv4_src_ipv6 .ipv4_layout .ipv4 );
533
- MLX5_SET_TO_ONES (fte_match_param , match_criteria ,
525
+ MLX5_SET_TO_ONES (fte_match_param , spec -> match_criteria ,
534
526
outer_headers .dst_ipv4_dst_ipv6 .ipv4_layout .ipv4 );
535
527
} else {
536
- memcpy (MLX5_ADDR_OF (fte_match_param , match_value ,
528
+ memcpy (MLX5_ADDR_OF (fte_match_param , spec -> match_value ,
537
529
outer_headers .src_ipv4_src_ipv6 .ipv6_layout .ipv6 ),
538
530
& tuple -> src_ipv6 ,
539
531
16 );
540
- memcpy (MLX5_ADDR_OF (fte_match_param , match_value ,
532
+ memcpy (MLX5_ADDR_OF (fte_match_param , spec -> match_value ,
541
533
outer_headers .dst_ipv4_dst_ipv6 .ipv6_layout .ipv6 ),
542
534
& tuple -> dst_ipv6 ,
543
535
16 );
544
- memset (MLX5_ADDR_OF (fte_match_param , match_criteria ,
536
+ memset (MLX5_ADDR_OF (fte_match_param , spec -> match_criteria ,
545
537
outer_headers .src_ipv4_src_ipv6 .ipv6_layout .ipv6 ),
546
538
0xff ,
547
539
16 );
548
- memset (MLX5_ADDR_OF (fte_match_param , match_criteria ,
540
+ memset (MLX5_ADDR_OF (fte_match_param , spec -> match_criteria ,
549
541
outer_headers .dst_ipv4_dst_ipv6 .ipv6_layout .ipv6 ),
550
542
0xff ,
551
543
16 );
552
544
}
553
545
dest .type = MLX5_FLOW_DESTINATION_TYPE_TIR ;
554
546
dest .tir_num = priv -> direct_tir [arfs_rule -> rxq ].tirn ;
555
- rule = mlx5_add_flow_rule (ft , match_criteria_enable , match_criteria ,
556
- match_value , MLX5_FLOW_CONTEXT_ACTION_FWD_DEST ,
547
+ rule = mlx5_add_flow_rule (ft , spec , MLX5_FLOW_CONTEXT_ACTION_FWD_DEST ,
557
548
MLX5_FS_DEFAULT_FLOW_TAG ,
558
549
& dest );
559
550
if (IS_ERR (rule )) {
@@ -563,8 +554,7 @@ static struct mlx5_flow_rule *arfs_add_rule(struct mlx5e_priv *priv,
563
554
}
564
555
565
556
out :
566
- kvfree (match_criteria );
567
- kvfree (match_value );
557
+ kvfree (spec );
568
558
return err ? ERR_PTR (err ) : rule ;
569
559
}
570
560
0 commit comments