@@ -75,23 +75,22 @@ struct mlx5e_rss {
7575 struct mlx5e_tir * inner_tir [MLX5E_NUM_INDIR_TIRS ];
7676 struct mlx5e_rqt rqt ;
7777 struct mlx5_core_dev * mdev ; /* primary */
78- u32 drop_rqn ;
79- bool inner_ft_support ;
78+ struct mlx5e_rss_params params ;
8079 bool enabled ;
8180 refcount_t refcnt ;
8281};
8382
8483bool mlx5e_rss_get_inner_ft_support (struct mlx5e_rss * rss )
8584{
86- return rss -> inner_ft_support ;
85+ return rss -> params . inner_ft_support ;
8786}
8887
8988void mlx5e_rss_params_indir_modify_actual_size (struct mlx5e_rss * rss , u32 num_channels )
9089{
9190 rss -> indir .actual_table_size = mlx5e_rqt_size (rss -> mdev , num_channels );
9291}
9392
94- int mlx5e_rss_params_indir_init (struct mlx5e_rss_params_indir * indir , struct mlx5_core_dev * mdev ,
93+ int mlx5e_rss_params_indir_init (struct mlx5e_rss_params_indir * indir ,
9594 u32 actual_table_size , u32 max_table_size )
9695{
9796 indir -> table = kvmalloc_array (max_table_size , sizeof (* indir -> table ), GFP_KERNEL );
@@ -139,7 +138,8 @@ static struct mlx5e_rss *mlx5e_rss_init_copy(const struct mlx5e_rss *from)
139138 if (!rss )
140139 return ERR_PTR (- ENOMEM );
141140
142- err = mlx5e_rss_params_indir_init (& rss -> indir , from -> mdev , from -> indir .actual_table_size ,
141+ err = mlx5e_rss_params_indir_init (& rss -> indir ,
142+ from -> indir .actual_table_size ,
143143 from -> indir .max_table_size );
144144 if (err )
145145 goto err_free_rss ;
@@ -192,19 +192,20 @@ mlx5e_rss_get_tt_config(struct mlx5e_rss *rss, enum mlx5_traffic_types tt)
192192 return rss_tt ;
193193}
194194
195- static int mlx5e_rss_create_tir ( struct mlx5e_rss * rss ,
196- enum mlx5_traffic_types tt ,
197- const struct mlx5e_packet_merge_param * init_pkt_merge_param ,
198- bool inner )
195+ static int
196+ mlx5e_rss_create_tir ( struct mlx5e_rss * rss , enum mlx5_traffic_types tt ,
197+ const struct mlx5e_packet_merge_param * pkt_merge_param ,
198+ bool inner )
199199{
200+ bool rss_inner = rss -> params .inner_ft_support ;
200201 struct mlx5e_rss_params_traffic_type rss_tt ;
201202 struct mlx5e_tir_builder * builder ;
202203 struct mlx5e_tir * * tir_p ;
203204 struct mlx5e_tir * tir ;
204205 u32 rqtn ;
205206 int err ;
206207
207- if (inner && !rss -> inner_ft_support ) {
208+ if (inner && !rss_inner ) {
208209 mlx5e_rss_warn (rss -> mdev ,
209210 "Cannot create inner indirect TIR[%d], RSS inner FT is not supported.\n" ,
210211 tt );
@@ -227,8 +228,8 @@ static int mlx5e_rss_create_tir(struct mlx5e_rss *rss,
227228
228229 rqtn = mlx5e_rqt_get_rqtn (& rss -> rqt );
229230 mlx5e_tir_builder_build_rqt (builder , rss -> mdev -> mlx5e_res .hw_objs .td .tdn ,
230- rqtn , rss -> inner_ft_support );
231- mlx5e_tir_builder_build_packet_merge (builder , init_pkt_merge_param );
231+ rqtn , rss_inner );
232+ mlx5e_tir_builder_build_packet_merge (builder , pkt_merge_param );
232233 rss_tt = mlx5e_rss_get_tt_config (rss , tt );
233234 mlx5e_tir_builder_build_rss (builder , & rss -> hash , & rss_tt , inner );
234235
@@ -264,15 +265,16 @@ static void mlx5e_rss_destroy_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types
264265 * tir_p = NULL ;
265266}
266267
267- static int mlx5e_rss_create_tirs (struct mlx5e_rss * rss ,
268- const struct mlx5e_packet_merge_param * init_pkt_merge_param ,
269- bool inner )
268+ static int
269+ mlx5e_rss_create_tirs (struct mlx5e_rss * rss ,
270+ const struct mlx5e_packet_merge_param * pkt_merge_param ,
271+ bool inner )
270272{
271273 enum mlx5_traffic_types tt , max_tt ;
272274 int err ;
273275
274276 for (tt = 0 ; tt < MLX5E_NUM_INDIR_TIRS ; tt ++ ) {
275- err = mlx5e_rss_create_tir (rss , tt , init_pkt_merge_param , inner );
277+ err = mlx5e_rss_create_tir (rss , tt , pkt_merge_param , inner );
276278 if (err )
277279 goto err_destroy_tirs ;
278280 }
@@ -335,7 +337,7 @@ static int mlx5e_rss_update_tirs(struct mlx5e_rss *rss)
335337 tt , err );
336338 }
337339
338- if (!rss -> inner_ft_support )
340+ if (!rss -> params . inner_ft_support )
339341 continue ;
340342
341343 err = mlx5e_rss_update_tir (rss , tt , true);
@@ -355,44 +357,48 @@ static int mlx5e_rss_init_no_tirs(struct mlx5e_rss *rss)
355357 refcount_set (& rss -> refcnt , 1 );
356358
357359 return mlx5e_rqt_init_direct (& rss -> rqt , rss -> mdev , true,
358- rss -> drop_rqn , rss -> indir .max_table_size );
360+ rss -> params .drop_rqn ,
361+ rss -> indir .max_table_size );
359362}
360363
361- struct mlx5e_rss * mlx5e_rss_init ( struct mlx5_core_dev * mdev , bool inner_ft_support , u32 drop_rqn ,
362- const struct mlx5e_packet_merge_param * init_pkt_merge_param ,
363- enum mlx5e_rss_init_type type , unsigned int nch ,
364- unsigned int max_nch )
364+ struct mlx5e_rss *
365+ mlx5e_rss_init ( struct mlx5_core_dev * mdev ,
366+ const struct mlx5e_rss_params * params ,
367+ const struct mlx5e_rss_init_params * init_params )
365368{
369+ u32 rqt_max_size , rqt_size ;
366370 struct mlx5e_rss * rss ;
367371 int err ;
368372
369373 rss = kvzalloc (sizeof (* rss ), GFP_KERNEL );
370374 if (!rss )
371375 return ERR_PTR (- ENOMEM );
372376
373- err = mlx5e_rss_params_indir_init ( & rss -> indir , mdev ,
374- mlx5e_rqt_size (mdev , nch ),
375- mlx5e_rqt_size ( mdev , max_nch ) );
377+ rqt_size = mlx5e_rqt_size ( mdev , init_params -> nch );
378+ rqt_max_size = mlx5e_rqt_size (mdev , init_params -> max_nch );
379+ err = mlx5e_rss_params_indir_init ( & rss -> indir , rqt_size , rqt_max_size );
376380 if (err )
377381 goto err_free_rss ;
378382
379383 rss -> mdev = mdev ;
380- rss -> inner_ft_support = inner_ft_support ;
381- rss -> drop_rqn = drop_rqn ;
384+ rss -> params = * params ;
382385
383386 err = mlx5e_rss_init_no_tirs (rss );
384387 if (err )
385388 goto err_free_indir ;
386389
387- if (type == MLX5E_RSS_INIT_NO_TIRS )
390+ if (init_params -> type == MLX5E_RSS_INIT_NO_TIRS )
388391 goto out ;
389392
390- err = mlx5e_rss_create_tirs (rss , init_pkt_merge_param , false);
393+ err = mlx5e_rss_create_tirs (rss , init_params -> pkt_merge_param ,
394+ false);
391395 if (err )
392396 goto err_destroy_rqt ;
393397
394- if (inner_ft_support ) {
395- err = mlx5e_rss_create_tirs (rss , init_pkt_merge_param , true);
398+ if (params -> inner_ft_support ) {
399+ err = mlx5e_rss_create_tirs (rss ,
400+ init_params -> pkt_merge_param ,
401+ true);
396402 if (err )
397403 goto err_destroy_tirs ;
398404 }
@@ -418,7 +424,7 @@ int mlx5e_rss_cleanup(struct mlx5e_rss *rss)
418424
419425 mlx5e_rss_destroy_tirs (rss , false);
420426
421- if (rss -> inner_ft_support )
427+ if (rss -> params . inner_ft_support )
422428 mlx5e_rss_destroy_tirs (rss , true);
423429
424430 mlx5e_rqt_destroy (& rss -> rqt );
@@ -448,7 +454,7 @@ u32 mlx5e_rss_get_tirn(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
448454{
449455 struct mlx5e_tir * tir ;
450456
451- WARN_ON (inner && !rss -> inner_ft_support );
457+ WARN_ON (inner && !rss -> params . inner_ft_support );
452458 tir = rss_get_tir (rss , tt , inner );
453459 WARN_ON (!tir );
454460
@@ -468,18 +474,18 @@ bool mlx5e_rss_valid_tir(struct mlx5e_rss *rss, enum mlx5_traffic_types tt, bool
468474/* Fill the "tirn" output parameter.
469475 * Create the requested TIR if it's its first usage.
470476 */
471- int mlx5e_rss_obtain_tirn ( struct mlx5e_rss * rss ,
472- enum mlx5_traffic_types tt ,
473- const struct mlx5e_packet_merge_param * init_pkt_merge_param ,
474- bool inner , u32 * tirn )
477+ int
478+ mlx5e_rss_obtain_tirn ( struct mlx5e_rss * rss , enum mlx5_traffic_types tt ,
479+ const struct mlx5e_packet_merge_param * pkt_merge_param ,
480+ bool inner , u32 * tirn )
475481{
476482 struct mlx5e_tir * tir ;
477483
478484 tir = rss_get_tir (rss , tt , inner );
479485 if (!tir ) { /* TIR doesn't exist, create one */
480486 int err ;
481487
482- err = mlx5e_rss_create_tir (rss , tt , init_pkt_merge_param , inner );
488+ err = mlx5e_rss_create_tir (rss , tt , pkt_merge_param , inner );
483489 if (err )
484490 return err ;
485491 tir = rss_get_tir (rss , tt , inner );
@@ -512,10 +518,11 @@ void mlx5e_rss_disable(struct mlx5e_rss *rss)
512518 int err ;
513519
514520 rss -> enabled = false;
515- err = mlx5e_rqt_redirect_direct (& rss -> rqt , rss -> drop_rqn , NULL );
521+ err = mlx5e_rqt_redirect_direct (& rss -> rqt , rss -> params . drop_rqn , NULL );
516522 if (err )
517523 mlx5e_rss_warn (rss -> mdev , "Failed to redirect RQT %#x to drop RQ %#x: err = %d\n" ,
518- mlx5e_rqt_get_rqtn (& rss -> rqt ), rss -> drop_rqn , err );
524+ mlx5e_rqt_get_rqtn (& rss -> rqt ),
525+ rss -> params .drop_rqn , err );
519526}
520527
521528int mlx5e_rss_packet_merge_set_param (struct mlx5e_rss * rss ,
@@ -548,7 +555,7 @@ int mlx5e_rss_packet_merge_set_param(struct mlx5e_rss *rss,
548555 }
549556
550557inner_tir :
551- if (!rss -> inner_ft_support )
558+ if (!rss -> params . inner_ft_support )
552559 continue ;
553560
554561 tir = rss_get_tir (rss , tt , true);
@@ -681,7 +688,7 @@ int mlx5e_rss_set_hash_fields(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
681688 return err ;
682689 }
683690
684- if (!(rss -> inner_ft_support ))
691+ if (!(rss -> params . inner_ft_support ))
685692 return 0 ;
686693
687694 err = mlx5e_rss_update_tir (rss , tt , true);
0 commit comments