@@ -317,10 +317,8 @@ mlx5e_rx_reporter_diagnose_common_ptp_config(struct mlx5e_priv *priv, struct mlx
317317}
318318
319319static void
320- mlx5e_rx_reporter_diagnose_common_config (struct devlink_health_reporter * reporter ,
321- struct devlink_fmsg * fmsg )
320+ mlx5e_rx_reporter_diagnose_common_config (struct mlx5e_priv * priv , struct devlink_fmsg * fmsg )
322321{
323- struct mlx5e_priv * priv = devlink_health_reporter_priv (reporter );
324322 struct mlx5e_rq * generic_rq = & priv -> channels .c [0 ]-> rq ;
325323 struct mlx5e_ptp * ptp_ch = priv -> channels .ptp ;
326324
@@ -340,20 +338,100 @@ static void mlx5e_rx_reporter_build_diagnose_output_ptp_rq(struct mlx5e_rq *rq,
340338 devlink_fmsg_obj_nest_end (fmsg );
341339}
342340
343- static int mlx5e_rx_reporter_diagnose (struct devlink_health_reporter * reporter ,
344- struct devlink_fmsg * fmsg ,
345- struct netlink_ext_ack * extack )
341+ static void mlx5e_rx_reporter_diagnose_rx_res_dir_tirns (struct mlx5e_rx_res * rx_res ,
342+ struct devlink_fmsg * fmsg )
346343{
347- struct mlx5e_priv * priv = devlink_health_reporter_priv (reporter );
348- struct mlx5e_ptp * ptp_ch = priv -> channels .ptp ;
344+ unsigned int max_nch = mlx5e_rx_res_get_max_nch (rx_res );
349345 int i ;
350346
351- mutex_lock ( & priv -> state_lock );
347+ devlink_fmsg_arr_pair_nest_start ( fmsg , "Direct TIRs" );
352348
353- if (!test_bit (MLX5E_STATE_OPENED , & priv -> state ))
354- goto unlock ;
349+ for (i = 0 ; i < max_nch ; i ++ ) {
350+ devlink_fmsg_obj_nest_start (fmsg );
351+
352+ devlink_fmsg_u32_pair_put (fmsg , "ix" , i );
353+ devlink_fmsg_u32_pair_put (fmsg , "tirn" , mlx5e_rx_res_get_tirn_direct (rx_res , i ));
354+ devlink_fmsg_u32_pair_put (fmsg , "rqtn" , mlx5e_rx_res_get_rqtn_direct (rx_res , i ));
355+
356+ devlink_fmsg_obj_nest_end (fmsg );
357+ }
358+
359+ devlink_fmsg_arr_pair_nest_end (fmsg );
360+ }
361+
362+ static void mlx5e_rx_reporter_diagnose_rx_res_rss_tirn (struct mlx5e_rss * rss , bool inner ,
363+ struct devlink_fmsg * fmsg )
364+ {
365+ bool found_valid_tir = false;
366+ int tt ;
367+
368+ for (tt = 0 ; tt < MLX5E_NUM_INDIR_TIRS ; tt ++ ) {
369+ if (!mlx5e_rss_valid_tir (rss , tt , inner ))
370+ continue ;
371+
372+ if (!found_valid_tir ) {
373+ char * tir_msg = inner ? "Inner TIRs Numbers" : "TIRs Numbers" ;
374+
375+ found_valid_tir = true;
376+ devlink_fmsg_arr_pair_nest_start (fmsg , tir_msg );
377+ }
378+
379+ devlink_fmsg_obj_nest_start (fmsg );
380+ devlink_fmsg_string_pair_put (fmsg , "tt" , mlx5_ttc_get_name (tt ));
381+ devlink_fmsg_u32_pair_put (fmsg , "tirn" , mlx5e_rss_get_tirn (rss , tt , inner ));
382+ devlink_fmsg_obj_nest_end (fmsg );
383+ }
384+
385+ if (found_valid_tir )
386+ devlink_fmsg_arr_pair_nest_end (fmsg );
387+ }
388+
389+ static void mlx5e_rx_reporter_diagnose_rx_res_rss_ix (struct mlx5e_rx_res * rx_res , u32 rss_idx ,
390+ struct devlink_fmsg * fmsg )
391+ {
392+ struct mlx5e_rss * rss = mlx5e_rx_res_rss_get (rx_res , rss_idx );
393+
394+ if (!rss )
395+ return ;
396+
397+ devlink_fmsg_obj_nest_start (fmsg );
398+
399+ devlink_fmsg_u32_pair_put (fmsg , "Index" , rss_idx );
400+ devlink_fmsg_u32_pair_put (fmsg , "rqtn" , mlx5e_rss_get_rqtn (rss ));
401+ mlx5e_rx_reporter_diagnose_rx_res_rss_tirn (rss , false, fmsg );
402+ if (mlx5e_rss_get_inner_ft_support (rss ))
403+ mlx5e_rx_reporter_diagnose_rx_res_rss_tirn (rss , true, fmsg );
404+
405+ devlink_fmsg_obj_nest_end (fmsg );
406+ }
407+
408+ static void mlx5e_rx_reporter_diagnose_rx_res_rss (struct mlx5e_rx_res * rx_res ,
409+ struct devlink_fmsg * fmsg )
410+ {
411+ int rss_ix ;
412+
413+ devlink_fmsg_arr_pair_nest_start (fmsg , "RSS" );
414+ for (rss_ix = 0 ; rss_ix < MLX5E_MAX_NUM_RSS ; rss_ix ++ )
415+ mlx5e_rx_reporter_diagnose_rx_res_rss_ix (rx_res , rss_ix , fmsg );
416+ devlink_fmsg_arr_pair_nest_end (fmsg );
417+ }
418+
419+ static void mlx5e_rx_reporter_diagnose_rx_res (struct mlx5e_priv * priv ,
420+ struct devlink_fmsg * fmsg )
421+ {
422+ struct mlx5e_rx_res * rx_res = priv -> rx_res ;
423+
424+ mlx5e_health_fmsg_named_obj_nest_start (fmsg , "RX resources" );
425+ mlx5e_rx_reporter_diagnose_rx_res_dir_tirns (rx_res , fmsg );
426+ mlx5e_rx_reporter_diagnose_rx_res_rss (rx_res , fmsg );
427+ mlx5e_health_fmsg_named_obj_nest_end (fmsg );
428+ }
429+
430+ static void mlx5e_rx_reporter_diagnose_rqs (struct mlx5e_priv * priv , struct devlink_fmsg * fmsg )
431+ {
432+ struct mlx5e_ptp * ptp_ch = priv -> channels .ptp ;
433+ int i ;
355434
356- mlx5e_rx_reporter_diagnose_common_config (reporter , fmsg );
357435 devlink_fmsg_arr_pair_nest_start (fmsg , "RQs" );
358436
359437 for (i = 0 ; i < priv -> channels .num ; i ++ ) {
@@ -367,7 +445,24 @@ static int mlx5e_rx_reporter_diagnose(struct devlink_health_reporter *reporter,
367445 }
368446 if (ptp_ch && test_bit (MLX5E_PTP_STATE_RX , ptp_ch -> state ))
369447 mlx5e_rx_reporter_build_diagnose_output_ptp_rq (& ptp_ch -> rq , fmsg );
448+
370449 devlink_fmsg_arr_pair_nest_end (fmsg );
450+ }
451+
452+ static int mlx5e_rx_reporter_diagnose (struct devlink_health_reporter * reporter ,
453+ struct devlink_fmsg * fmsg ,
454+ struct netlink_ext_ack * extack )
455+ {
456+ struct mlx5e_priv * priv = devlink_health_reporter_priv (reporter );
457+
458+ mutex_lock (& priv -> state_lock );
459+
460+ if (!test_bit (MLX5E_STATE_OPENED , & priv -> state ))
461+ goto unlock ;
462+
463+ mlx5e_rx_reporter_diagnose_common_config (priv , fmsg );
464+ mlx5e_rx_reporter_diagnose_rqs (priv , fmsg );
465+ mlx5e_rx_reporter_diagnose_rx_res (priv , fmsg );
371466unlock :
372467 mutex_unlock (& priv -> state_lock );
373468 return 0 ;
0 commit comments