@@ -13,6 +13,9 @@ struct mlx5e_rx_res {
1313 unsigned int max_nch ;
1414 u32 drop_rqn ;
1515
16+ struct mlx5e_packet_merge_param pkt_merge_param ;
17+ struct rw_semaphore pkt_merge_param_sem ;
18+
1619 struct mlx5e_rss * rss [MLX5E_MAX_NUM_RSS ];
1720 bool rss_active ;
1821 u32 rss_rqns [MLX5E_INDIR_RQT_SIZE ];
@@ -392,6 +395,7 @@ static int mlx5e_rx_res_ptp_init(struct mlx5e_rx_res *res)
392395 if (err )
393396 goto out ;
394397
398+ /* Separated from the channels RQs, does not share pkt_merge state with them */
395399 mlx5e_tir_builder_build_rqt (builder , res -> mdev -> mlx5e_res .hw_objs .td .tdn ,
396400 mlx5e_rqt_get_rqtn (& res -> ptp .rqt ),
397401 inner_ft_support );
@@ -447,6 +451,9 @@ int mlx5e_rx_res_init(struct mlx5e_rx_res *res, struct mlx5_core_dev *mdev,
447451 res -> max_nch = max_nch ;
448452 res -> drop_rqn = drop_rqn ;
449453
454+ res -> pkt_merge_param = * init_pkt_merge_param ;
455+ init_rwsem (& res -> pkt_merge_param_sem );
456+
450457 err = mlx5e_rx_res_rss_init_def (res , init_pkt_merge_param , init_nch );
451458 if (err )
452459 goto err_out ;
@@ -513,7 +520,7 @@ u32 mlx5e_rx_res_get_tirn_ptp(struct mlx5e_rx_res *res)
513520 return mlx5e_tir_get_tirn (& res -> ptp .tir );
514521}
515522
516- u32 mlx5e_rx_res_get_rqtn_direct (struct mlx5e_rx_res * res , unsigned int ix )
523+ static u32 mlx5e_rx_res_get_rqtn_direct (struct mlx5e_rx_res * res , unsigned int ix )
517524{
518525 return mlx5e_rqt_get_rqtn (& res -> channels [ix ].direct_rqt );
519526}
@@ -656,6 +663,9 @@ int mlx5e_rx_res_packet_merge_set_param(struct mlx5e_rx_res *res,
656663 if (!builder )
657664 return - ENOMEM ;
658665
666+ down_write (& res -> pkt_merge_param_sem );
667+ res -> pkt_merge_param = * pkt_merge_param ;
668+
659669 mlx5e_tir_builder_build_packet_merge (builder , pkt_merge_param );
660670
661671 final_err = 0 ;
@@ -681,6 +691,7 @@ int mlx5e_rx_res_packet_merge_set_param(struct mlx5e_rx_res *res,
681691 }
682692 }
683693
694+ up_write (& res -> pkt_merge_param_sem );
684695 mlx5e_tir_builder_free (builder );
685696 return final_err ;
686697}
@@ -689,3 +700,31 @@ struct mlx5e_rss_params_hash mlx5e_rx_res_get_current_hash(struct mlx5e_rx_res *
689700{
690701 return mlx5e_rss_get_hash (res -> rss [0 ]);
691702}
703+
704+ int mlx5e_rx_res_tls_tir_create (struct mlx5e_rx_res * res , unsigned int rxq ,
705+ struct mlx5e_tir * tir )
706+ {
707+ bool inner_ft_support = res -> features & MLX5E_RX_RES_FEATURE_INNER_FT ;
708+ struct mlx5e_tir_builder * builder ;
709+ u32 rqtn ;
710+ int err ;
711+
712+ builder = mlx5e_tir_builder_alloc (false);
713+ if (!builder )
714+ return - ENOMEM ;
715+
716+ rqtn = mlx5e_rx_res_get_rqtn_direct (res , rxq );
717+
718+ mlx5e_tir_builder_build_rqt (builder , res -> mdev -> mlx5e_res .hw_objs .td .tdn , rqtn ,
719+ inner_ft_support );
720+ mlx5e_tir_builder_build_direct (builder );
721+ mlx5e_tir_builder_build_tls (builder );
722+ down_read (& res -> pkt_merge_param_sem );
723+ mlx5e_tir_builder_build_packet_merge (builder , & res -> pkt_merge_param );
724+ err = mlx5e_tir_init (tir , builder , res -> mdev , false);
725+ up_read (& res -> pkt_merge_param_sem );
726+
727+ mlx5e_tir_builder_free (builder );
728+
729+ return err ;
730+ }
0 commit comments