diff mbox

[rdma-next,1/3] IB/mlx5: Report mlx5 packet pacing capabilities when querying device

Message ID 1472383631-3494-2-git-send-email-leon@kernel.org (mailing list archive)
State Deferred
Headers show

Commit Message

Leon Romanovsky Aug. 28, 2016, 11:27 a.m. UTC
From: Bodong Wang <bodong@mellanox.com>

Enable mlx5 based hardware to report packet pacing capabilities
from kernel to user space. Packet pacing allows to limit the rate to any
number between the maximum and minimum, based on user settings.

The capabilities are exposed to user space through query_device by uhw.
The following capabilities are reported:

1. The maximum and minimum rate limit in kbps supported by packet pacing.
2. Bitmap showing which QP types are supported by packet pacing operation.

Signed-off-by: Bodong Wang <bodong@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
---
 drivers/infiniband/hw/mlx5/main.c | 12 ++++++++++++
 drivers/infiniband/hw/mlx5/user.h | 13 +++++++++++++
 2 files changed, 25 insertions(+)
diff mbox

Patch

diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index f02a975..26a4c85 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -594,6 +594,18 @@  static int mlx5_ib_query_device(struct ib_device *ibdev,
 	if (!mlx5_core_is_pf(mdev))
 		props->device_cap_flags |= IB_DEVICE_VIRTUAL_FUNCTION;
 
+	if (field_avail(typeof(resp), packet_pacing_caps, uhw->outlen)	&&
+	    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;
+		resp.response_length += sizeof(resp.packet_pacing_caps);
+	}
+
 	if (uhw->outlen) {
 		err = ib_copy_to_udata(uhw, &resp, resp.response_length);
 
diff --git a/drivers/infiniband/hw/mlx5/user.h b/drivers/infiniband/hw/mlx5/user.h
index 188dac4..071a9cc 100644
--- a/drivers/infiniband/hw/mlx5/user.h
+++ b/drivers/infiniband/hw/mlx5/user.h
@@ -121,10 +121,23 @@  struct mlx5_ib_tso_caps {
 	__u32 supported_qpts;
 };
 
+struct mlx5_packet_pacing_caps {
+	__u32 qp_rate_limit_min;
+	__u32 qp_rate_limit_max; /* In kpbs */
+
+	/* Corresponding bit will be set if qp type from
+	 * 'enum ib_qp_type' is supported, e.g.
+	 * supported_qpts |= 1 << IB_QPT_RAW_PACKET
+	 */
+	__u32 supported_qpts;
+	__u32 reserved;
+};
+
 struct mlx5_ib_query_device_resp {
 	__u32	comp_mask;
 	__u32	response_length;
 	struct	mlx5_ib_tso_caps tso_caps;
+	struct	mlx5_packet_pacing_caps packet_pacing_caps;
 };
 
 struct mlx5_ib_create_cq {