IB/mlx5: Expose RoCE accelerator counters
authorAvihai Horon <avihaih@mellanox.com>
Wed, 15 Jan 2020 14:54:59 +0000 (16:54 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 16 Jan 2020 20:11:52 +0000 (16:11 -0400)
Introduce the following RoCE accelerator counters:
* roce_adp_retrans - number of adaptive retransmission for RoCE traffic.
* roce_adp_retrans_to - number of times RoCE traffic reached time out
  due to adaptive retransmission.
* roce_slow_restart - number of times RoCE slow restart was used.
* roce_slow_restart_cnps - number of times RoCE slow restart
  generate CNP packets.
* roce_slow_restart_trans - number of times RoCE slow restart change
  state to slow restart.

Link: https://lore.kernel.org/r/20200115145459.83280-3-leon@kernel.org
Signed-off-by: Avihai Horon <avihaih@mellanox.com>
Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/main.c

index 97bcf01..5d41a2c 100644 (file)
@@ -5370,6 +5370,14 @@ static const struct mlx5_ib_counter extended_err_cnts[] = {
        INIT_Q_COUNTER(req_cqe_flush_error),
 };
 
+static const struct mlx5_ib_counter roce_accl_cnts[] = {
+       INIT_Q_COUNTER(roce_adp_retrans),
+       INIT_Q_COUNTER(roce_adp_retrans_to),
+       INIT_Q_COUNTER(roce_slow_restart),
+       INIT_Q_COUNTER(roce_slow_restart_cnps),
+       INIT_Q_COUNTER(roce_slow_restart_trans),
+};
+
 #define INIT_EXT_PPCNT_COUNTER(_name)          \
        { .name = #_name, .offset =     \
        MLX5_BYTE_OFF(ppcnt_reg, \
@@ -5418,6 +5426,9 @@ static int __mlx5_ib_alloc_counters(struct mlx5_ib_dev *dev,
        if (MLX5_CAP_GEN(dev->mdev, enhanced_error_q_counters))
                num_counters += ARRAY_SIZE(extended_err_cnts);
 
+       if (MLX5_CAP_GEN(dev->mdev, roce_accl))
+               num_counters += ARRAY_SIZE(roce_accl_cnts);
+
        cnts->num_q_counters = num_counters;
 
        if (MLX5_CAP_GEN(dev->mdev, cc_query_allowed)) {
@@ -5478,6 +5489,13 @@ static void mlx5_ib_fill_counters(struct mlx5_ib_dev *dev,
                }
        }
 
+       if (MLX5_CAP_GEN(dev->mdev, roce_accl)) {
+               for (i = 0; i < ARRAY_SIZE(roce_accl_cnts); i++, j++) {
+                       names[j] = roce_accl_cnts[i].name;
+                       offsets[j] = roce_accl_cnts[i].offset;
+               }
+       }
+
        if (MLX5_CAP_GEN(dev->mdev, cc_query_allowed)) {
                for (i = 0; i < ARRAY_SIZE(cong_cnts); i++, j++) {
                        names[j] = cong_cnts[i].name;