From nobody Wed Sep 16 14:12:43 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hlLSW6DWZz6rWKj for ; Wed, 16 Sep 2026 14:12:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hlLSW4xLxz3M4m for ; Wed, 16 Sep 2026 14:12:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789567963; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=5bdRjkYw8Hv/Y9gIy3fk7qTy2Q546iq7AUeke6N+l+4=; b=tct+WSTO5oBO+0n8gCbeh74LgS4Zxf81TvpxhNbvdBquQEgfAB7RTPG054jLLkVmLwKWGT q1aZ+DNseUYq0d2T7oWyCafStQeoTcIVBJUGaIWXSUAirdRWTgkeEo752yvuX8TmYEDX2U WfJl8gmxUyIJfvlQzKUwRUtnym7YDAHFhNCV3tQw+jiJnwICkkpdfYlRsOoH8Sygt6Gsw0 pm3sxKi6WxoIaWjks8RBfdzWR4F7Uf8dWRGX8kGCOFu80yvjenn3HXO++Qrzv88/HEBTu3 sY+fsEp0pm+bob+JnALj0NGQwgjHZAKk3hbdAVgSorOL1mQOSStTC6xXSoDfMQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789567963; b=TViwC3qD3f0EtyrMWRJo4PoDHxgc32NaytnJDv6Q+PnV0rAej+QX5+UGx6gW7D5ktu01Hp RuCbil13x/Ydf+8YtF50Jk9dRojSOOlZCKit9zEnVHl+BvtOm3gM1zLEUMqlwrXcTQDw2L OmNdmqX+5jZyCVdtv4m8mEZf+7ksraPq7NQfuFlEGQr+bzhSHF6ZjZZ6/wZYwM/S7e1JQX 1FG7pa3Tp6aebVNCbCKuSaSSHcUWIyOtmLzdo2X40ThmytV/oUfHC4nNUziPr9NxwRFtXI jjSBrmnTkchSe8nKGBSBPW5cIVmiZvBxRkkLxdeQaDGBhyubkxbamXC8+U7vnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789567963; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=5bdRjkYw8Hv/Y9gIy3fk7qTy2Q546iq7AUeke6N+l+4=; b=SgSbdmf32m7fqWiM3h7GoveeGiMlo9ggbm7Ray3jYXiFqj7t2wZTsVDq6Ij2YOJm0JC/sS IMrt3HO6tM03csU8g/AqzPl6bM3aPBd5fBnEgZJ4wIeF/DAUuIZORPoNZ3o8pcX8U+b/M2 Hh8849GGx4X1aH9JSW5QIY1xpg+FxWN+kIRqlq7Mns4MC1WK11Eg+BAjed1af74hJPj7kR dYfgxxxEfQ9dpv+mQjkB/Q16oqioWpxJUkt0qZYVgz6/C8fIBmd8JfritwLzwBuqMD2Mwg gyBtW9SvI9rY2Y4c8Z2k/+9nsBNvKNmNSoaZUCcoauzxQdf/K5O7PIGy/VslMA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hlLSW40RGzqnc for ; Wed, 16 Sep 2026 14:12:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 37525 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 16 Sep 2026 14:12:43 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Vag Singh From: Konstantin Belousov Subject: git: 5096c87b4435 - main - IB/mlx5: Add support for CQE compressing List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5096c87b4435657c471b6d5ba86b4c4ee15f252b Auto-Submitted: auto-generated Date: Wed, 16 Sep 2026 14:12:43 +0000 Message-Id: <6aaaa3db.37525.38e15c0e@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=5096c87b4435657c471b6d5ba86b4c4ee15f252b commit 5096c87b4435657c471b6d5ba86b4c4ee15f252b Author: Vag Singh AuthorDate: 2025-08-12 03:07:38 +0000 Commit: Konstantin Belousov CommitDate: 2026-09-16 14:12:06 +0000 IB/mlx5: Add support for CQE compressing [PATCH 06/31] FreeBSD OFED support for DPDK MLX5 PMD 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. IB/mlx5: Report mlx5 CQE compression capabilities when querying device 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. Differential revision: https://reviews.freebsd.org/D32180 MFC after: 1 month --- sys/dev/mlx5/mlx5_en/mlx5_en_main.c | 2 +- sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c | 25 +++++++++++++++++++++++++ sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c | 10 ++++++++++ sys/dev/mlx5/mlx5_ifc.h | 2 +- sys/ofed/include/uapi/rdma/mlx5-abi.h | 13 +++++++++++++ 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c index ed1b59da1049..4d94ddf6a391 100644 --- a/sys/dev/mlx5/mlx5_en/mlx5_en_main.c +++ b/sys/dev/mlx5/mlx5_en/mlx5_en_main.c @@ -2460,7 +2460,7 @@ mlx5e_build_rx_cq_param(struct mlx5e_priv *priv, */ if (priv->params.cqe_zipping_en) { MLX5_SET(cqc, cqc, mini_cqe_res_format, MLX5_CQE_FORMAT_HASH); - MLX5_SET(cqc, cqc, cqe_compression_en, 1); + MLX5_SET(cqc, cqc, cqe_comp_en, 1); } MLX5_SET(cqc, cqc, log_cq_size, priv->params.log_rq_size); diff --git a/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c b/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c index 28fcc7b648e5..213b8705b6f3 100644 --- a/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c +++ b/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c @@ -814,6 +814,31 @@ static int create_cq_user(struct mlx5_ib_dev *dev, struct ib_udata *udata, *index = context->bfregi.sys_pages[0]; } + 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)); + } + MLX5_SET(create_cq_in, *cqb, uid, context->devx_uid); return 0; diff --git a/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c b/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c index b959e0d92a83..aa010a4c88bc 100644 --- a/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c +++ b/sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c @@ -818,6 +818,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); diff --git a/sys/dev/mlx5/mlx5_ifc.h b/sys/dev/mlx5/mlx5_ifc.h index 1906b670f013..a42fd920dc6c 100644 --- a/sys/dev/mlx5/mlx5_ifc.h +++ b/sys/dev/mlx5/mlx5_ifc.h @@ -3482,7 +3482,7 @@ struct mlx5_ifc_cqc_bits { u8 scqe_break_moderation_en[0x1]; u8 oi[0x1]; u8 cq_period_mode[0x2]; - u8 cqe_compression_en[0x1]; + u8 cqe_comp_en[0x1]; u8 mini_cqe_res_format[0x2]; u8 st[0x4]; u8 reserved_2[0x8]; diff --git a/sys/ofed/include/uapi/rdma/mlx5-abi.h b/sys/ofed/include/uapi/rdma/mlx5-abi.h index 91af500c9a61..52d6f061970a 100644 --- a/sys/ofed/include/uapi/rdma/mlx5-abi.h +++ b/sys/ofed/include/uapi/rdma/mlx5-abi.h @@ -145,11 +145,24 @@ 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; }; enum mlx5_ib_create_cq_flags {