Browse Source

IB/mlx5: Report mlx5 CQE compression caps during query

The capabilities include:
- Max number of compressed and aggregated CQEs in a single session,
  while zero means unsupported.
- For Responder, there are two formats of mini CQE: mini CQE with Rx
  hash and mini CQE with checksum. They're mutual exclusive.

Signed-off-by: Bodong Wang <bodong@mellanox.com>
Reviewed-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Bodong Wang 8 years ago
parent
commit
7e43a2a5ba
2 changed files with 22 additions and 0 deletions
  1. 10 0
      drivers/infiniband/hw/mlx5/main.c
  2. 12 0
      include/uapi/rdma/mlx5-abi.h

+ 10 - 0
drivers/infiniband/hw/mlx5/main.c

@@ -683,6 +683,16 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
 	if (field_avail(typeof(resp), reserved, uhw->outlen))
 	if (field_avail(typeof(resp), reserved, uhw->outlen))
 		resp.response_length += sizeof(resp.reserved);
 		resp.response_length += sizeof(resp.reserved);
 
 
+	if (field_avail(typeof(resp), cqe_comp_caps, uhw->outlen)) {
+		resp.cqe_comp_caps.max_num =
+			MLX5_CAP_GEN(dev->mdev, cqe_compression) ?
+			MLX5_CAP_GEN(dev->mdev, cqe_compression_max_num) : 0;
+		resp.cqe_comp_caps.supported_format =
+			MLX5_IB_CQE_RES_FORMAT_HASH |
+			MLX5_IB_CQE_RES_FORMAT_CSUM;
+		resp.response_length += sizeof(resp.cqe_comp_caps);
+	}
+
 	if (uhw->outlen) {
 	if (uhw->outlen) {
 		err = ib_copy_to_udata(uhw, &resp, resp.response_length);
 		err = ib_copy_to_udata(uhw, &resp, resp.response_length);
 
 

+ 12 - 0
include/uapi/rdma/mlx5-abi.h

@@ -124,11 +124,23 @@ struct mlx5_ib_rss_caps {
 	__u8 reserved[7];
 	__u8 reserved[7];
 };
 };
 
 
+enum mlx5_ib_cqe_comp_res_format {
+	MLX5_IB_CQE_RES_FORMAT_HASH	= 1 << 0,
+	MLX5_IB_CQE_RES_FORMAT_CSUM	= 1 << 1,
+	MLX5_IB_CQE_RES_RESERVED	= 1 << 2,
+};
+
+struct mlx5_ib_cqe_comp_caps {
+	__u32 max_num;
+	__u32 supported_format; /* enum mlx5_ib_cqe_comp_res_format */
+};
+
 struct mlx5_ib_query_device_resp {
 struct mlx5_ib_query_device_resp {
 	__u32	comp_mask;
 	__u32	comp_mask;
 	__u32	response_length;
 	__u32	response_length;
 	struct	mlx5_ib_tso_caps tso_caps;
 	struct	mlx5_ib_tso_caps tso_caps;
 	struct	mlx5_ib_rss_caps rss_caps;
 	struct	mlx5_ib_rss_caps rss_caps;
+	struct	mlx5_ib_cqe_comp_caps cqe_comp_caps;
 	__u32	mlx5_ib_support_multi_pkt_send_wqes;
 	__u32	mlx5_ib_support_multi_pkt_send_wqes;
 	__u32	reserved;
 	__u32	reserved;
 };
 };