IB/mlx5: Report mlx5 CQE compression capabilities when querying device
Subsystems (2)
PATCH 1/2 IB/mlx5: Report mlx5 CQE compression capabilities when querying device
From: Bodong Wang <bodong-VPRAkNaXOzVWk0Htik3J/[email protected]>
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.
--- drivers/infiniband/hw/mlx5/main.c | 10 ++++++++++ include/uapi/rdma/mlx5-abi.h | 12 ++++++++++++ 2 files changed, 22 insertions(+)
drivers/infiniband/hw/mlx5/main.c +10 -0
@@ -669,6 +669,16 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,1 <<MLX5_CAP_GEN (dev->mdev, log_max_rq); } +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) { err =ib_copy_to_udata (uhw, &resp, resp.response_length);
include/uapi/rdma/mlx5-abi.h +12 -0
@@ -124,11 +124,23 @@ struct mlx5_ib_rss_caps {__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 {__u32 comp_mask;__u32 response_length;struct mlx5_ib_tso_caps tso_caps;struct mlx5_ib_rss_caps rss_caps; +struct mlx5_ib_cqe_comp_caps cqe_comp_caps; };struct mlx5_ib_create_cq {
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 1477909005-12867-1-git-send-email-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
PATCH 2/2 IB/mlx5: Add support for CQE compressing
From: Bodong Wang <bodong-VPRAkNaXOzVWk0Htik3J/[email protected]>
CQE compressing reduces PCI overhead by coalescing and compressing multiple CQEs into a single merged CQE. Successful compressing improves message rate especially for small packet traffic.
CQE compressing is supported for all 64B CQE formats (with certain limitations) generated by RQ/Responder or by SQ/Requestor.
--- drivers/infiniband/hw/mlx5/cq.c | 30 +++++++++++++++++++++++++++++- include/uapi/rdma/mlx5-abi.h | 4 +++- 2 files changed, 32 insertions(+), 2 deletions(-)
drivers/infiniband/hw/mlx5/cq.c +29 -1
@@ -731,7 +731,7 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct ib_udata *udata, int entries, u32 **cqb, int *cqe_size, int *index, int *inlen) { - struct mlx5_ib_create_cq ucmd; + struct mlx5_ib_create_cq ucmd = {};size_t ucmdlen;int page_shift;__be64 *pas;
@@ -792,8 +792,36 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct ib_udata *udata, *index =to_mucontext (context)->uuari.uars[0 ].index; +if (ucmd.cqe_comp_en ==1 ) { +if (unlikely ((*cqe_size !=64 ) || + !MLX5_CAP_GEN (dev->mdev, cqe_compression))) { + err = -EOPNOTSUPP ; +mlx5_ib_warn (dev,"CQE compression is not supported for size %d!\n" , + *cqe_size); + goto err_cqb; + } + +if (unlikely (!ucmd.cqe_comp_res_format || + !(ucmd.cqe_comp_res_format < +MLX5_IB_CQE_RES_RESERVED ) || + (ucmd.cqe_comp_res_format & + (ucmd.cqe_comp_res_format -1 )))) { + err = -EOPNOTSUPP ; +mlx5_ib_warn (dev,"CQE compression res format %d is not supported!\n" , + ucmd.cqe_comp_res_format); + goto err_cqb; + } + +MLX5_SET (cqc, cqc, cqe_comp_en,1 ); +MLX5_SET (cqc, cqc, mini_cqe_res_format, +ilog2 (ucmd.cqe_comp_res_format)); + } +return 0 ; +err_cqb: +kfree (cqb); + err_db:mlx5_ib_db_unmap_user (to_mucontext (context), &cq->db);
include/uapi/rdma/mlx5-abi.h +3 -1
@@ -147,7 +147,9 @@ struct mlx5_ib_create_cq {__u64 buf_addr;__u64 db_addr;__u32 cqe_size; -__u32 reserved;/* explicit padding (optional on i386) */ +__u8 cqe_comp_en; +__u8 cqe_comp_res_format; +__u16 reserved;/* explicit padding (optional on i386) */ };struct mlx5_ib_create_cq_resp {
Signature · 6 lines
2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html