]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/mlx5: Report packet pacing capabilities when querying device
authorMaher Sanalla <msanalla@nvidia.com>
Sun, 24 May 2026 15:38:06 +0000 (18:38 +0300)
committerLeon Romanovsky <leon@kernel.org>
Thu, 11 Jun 2026 11:02:05 +0000 (07:02 -0400)
When querying device, report packet pacing capabilities for UD and
UC QPs when device supports it.

Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Signed-off-by: Edward Srouji <edwards@nvidia.com>
Link: https://patch.msgid.link/20260524-packet-pacing-v1-5-3d79439f8d08@nvidia.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/mlx5/main.c

index a558ac5bb219dee5a3150fd24f0314485151a6da..38b2481aaae188938b8061b309d96c834f85fe2d 100644 (file)
@@ -1214,20 +1214,29 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
                }
        }
 
-       if (offsetofend(typeof(resp), packet_pacing_caps) <= uhw_outlen &&
-           raw_support) {
-               if (MLX5_CAP_QOS(mdev, packet_pacing) &&
-                   MLX5_CAP_GEN(mdev, qos)) {
-                       resp.packet_pacing_caps.qp_rate_limit_max =
-                               MLX5_CAP_QOS(mdev, packet_pacing_max_rate);
-                       resp.packet_pacing_caps.qp_rate_limit_min =
-                               MLX5_CAP_QOS(mdev, packet_pacing_min_rate);
-                       resp.packet_pacing_caps.supported_qpts |=
-                               1 << IB_QPT_RAW_PACKET;
-                       if (MLX5_CAP_QOS(mdev, packet_pacing_burst_bound) &&
-                           MLX5_CAP_QOS(mdev, packet_pacing_typical_size))
-                               resp.packet_pacing_caps.cap_flags |=
-                                       MLX5_IB_PP_SUPPORT_BURST;
+       if (offsetofend(typeof(resp), packet_pacing_caps) <= uhw_outlen) {
+               if (MLX5_CAP_GEN(mdev, qos)) {
+                       if (MLX5_CAP_QOS(mdev, packet_pacing) && raw_support)
+                               resp.packet_pacing_caps.supported_qpts |=
+                                       BIT(IB_QPT_RAW_PACKET);
+                       if (MLX5_CAP_QOS(mdev, packet_pacing_req_ud))
+                               resp.packet_pacing_caps.supported_qpts |=
+                                       BIT(IB_QPT_UD);
+                       if (MLX5_CAP_QOS(mdev, packet_pacing_req_uc))
+                               resp.packet_pacing_caps.supported_qpts |=
+                                       BIT(IB_QPT_UC);
+
+                       if (resp.packet_pacing_caps.supported_qpts) {
+                               resp.packet_pacing_caps.qp_rate_limit_max =
+                                       MLX5_CAP_QOS(mdev, packet_pacing_max_rate);
+                               resp.packet_pacing_caps.qp_rate_limit_min =
+                                       MLX5_CAP_QOS(mdev, packet_pacing_min_rate);
+
+                               if (MLX5_CAP_QOS(mdev, packet_pacing_burst_bound) &&
+                                   MLX5_CAP_QOS(mdev, packet_pacing_typical_size))
+                                       resp.packet_pacing_caps.cap_flags |=
+                                               MLX5_IB_PP_SUPPORT_BURST;
+                       }
                }
                resp.response_length += sizeof(resp.packet_pacing_caps);
        }