@@ -5586,6 +5586,27 @@ static int mlx5_ib_get_hw_stats(struct ib_device *ibdev,
55865586 return num_counters ;
55875587}
55885588
5589+ static struct rdma_hw_stats *
5590+ mlx5_ib_counter_alloc_stats (struct rdma_counter * counter )
5591+ {
5592+ struct mlx5_ib_dev * dev = to_mdev (counter -> device );
5593+ struct mlx5_ib_port * port = & dev -> port [counter -> port - 1 ];
5594+
5595+ /* Q counters are in the beginning of all counters */
5596+ return rdma_alloc_hw_stats_struct (port -> cnts .names ,
5597+ port -> cnts .num_q_counters ,
5598+ RDMA_HW_STATS_DEFAULT_LIFESPAN );
5599+ }
5600+
5601+ static int mlx5_ib_counter_update_stats (struct rdma_counter * counter )
5602+ {
5603+ struct mlx5_ib_dev * dev = to_mdev (counter -> device );
5604+ struct mlx5_ib_port * port = & dev -> port [counter -> port - 1 ];
5605+
5606+ return mlx5_ib_query_q_counters (dev -> mdev , port ,
5607+ counter -> stats , counter -> id );
5608+ }
5609+
55895610static int mlx5_ib_counter_bind_qp (struct rdma_counter * counter ,
55905611 struct ib_qp * qp )
55915612{
@@ -6553,6 +6574,8 @@ static const struct ib_device_ops mlx5_ib_dev_hw_stats_ops = {
65536574 .counter_bind_qp = mlx5_ib_counter_bind_qp ,
65546575 .counter_unbind_qp = mlx5_ib_counter_unbind_qp ,
65556576 .counter_dealloc = mlx5_ib_counter_dealloc ,
6577+ .counter_alloc_stats = mlx5_ib_counter_alloc_stats ,
6578+ .counter_update_stats = mlx5_ib_counter_update_stats ,
65566579};
65576580
65586581static int mlx5_ib_stage_counters_init (struct mlx5_ib_dev * dev )
0 commit comments