From nobody Sun Sep 27 00:39:13 2026 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C508447D920; Thu, 27 Aug 2026 14:38:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787841498; cv=none; b=q3fnYh+aQPLcuh24M42PfZvlMmAl35cPcIiBU62/Ky+p6EwiN82I+NaG4r9kGAoKYhDw3n4LJUYXQIolzwDvnfpyQZvtnVrt3fBiH/9RbQVycXUY1rZO7vkAuDabWGCP6C35HXozXfc/7OqpcCL8aZ5KE5RGzl50zKmkh9Lh9dA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787841498; c=relaxed/simple; bh=DNcUsC4frMri/5zOYTJa2QEgpJjJ52EexLoD2ilgcO4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gXvtSrlbMgmGSgWlnh1Erwmrvm79+mlPxj/6vaeF1v7rS5NYxIO6/Cz1YXGsQeutcs9p9xIn7M35itTFqngx/kH+KU02Yovl7ztpFgYmBvH0wb1SuJTTllgC0V2YsacNyEwyqOFz+OeX5JmuMfEUcU/J10xmbF4ttqzOQg/plis= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=cXPwFIBv; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="cXPwFIBv" Received: by linux.microsoft.com (Postfix, from userid 1186) id A118C20B7168; Thu, 27 Aug 2026 07:37:36 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com A118C20B7168 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1787841456; bh=yzQ/bLJpGIBRN2IoX/veAFxwm5xHoRpPqeAb4sd1cPo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cXPwFIBvVfxarNTKC8kWVyb3NJDBw6GSeIIPcmeNqmTjtQ/dq2/AyBA9AuJ49wvjG e0iz1nlnBGSU6uC9nkVTBVHrdjE9eFvw4snllgiNepk6AG061j4pxbZjMBGqLj0nJA xBPsaI4h3gWzqBCrzILbr1c4F+7KTdkjRAboJBOE= From: Konstantin Taranov To: kotaranov@microsoft.com, snsanghvi@microsoft.com, longli@microsoft.com, jgg@ziepe.ca, leon@kernel.org Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH rdma-next v2 1/3] RDMA/mana_ib: Extend RC QP udata request and response Date: Thu, 27 Aug 2026 07:37:34 -0700 Message-ID: <20260827143736.2013093-2-kotaranov@linux.microsoft.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260827143736.2013093-1-kotaranov@linux.microsoft.com> References: <20260827143736.2013093-1-kotaranov@linux.microsoft.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Konstantin Taranov Extend the RC QP creation UAPI to support optional fixed-size WQEs and an MMQ. Add a compatibility mask to the request, return the MMQ ID in the response, and advertise the extended ABI through ucontext capabilities. Use compatibility-aware udata validation so existing userspace remains supported. Rename the legacy FMR queue definitions to MMQ and add the corresponding hardware creation flags. Signed-off-by: Konstantin Taranov --- v1->v2: use << instead of BIT() in the mana-abi.h drivers/infiniband/hw/mana/main.c | 1 + drivers/infiniband/hw/mana/mana_ib.h | 6 ++++-- drivers/infiniband/hw/mana/qp.c | 10 +++++----- include/uapi/rdma/mana-abi.h | 11 +++++++++++ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana= /main.c index e4414d208..9d043f48e 100644 --- a/drivers/infiniband/hw/mana/main.c +++ b/drivers/infiniband/hw/mana/main.c @@ -247,6 +247,7 @@ int mana_ib_alloc_ucontext(struct ib_ucontext *ibcontex= t, =20 ucontext->doorbell =3D doorbell_page; ucmd_resp.comp_mask =3D MANA_IB_UCNTX_ALLOC_PDN_SUPPORT; + ucmd_resp.comp_mask |=3D MANA_IB_UCNTX_RC_EXT_SUPPORT; ret =3D ib_respond_udata(udata, ucmd_resp); if (ret) return ret; diff --git a/drivers/infiniband/hw/mana/mana_ib.h b/drivers/infiniband/hw/m= ana/mana_ib.h index f69866696..547ddf9dd 100644 --- a/drivers/infiniband/hw/mana/mana_ib.h +++ b/drivers/infiniband/hw/mana/mana_ib.h @@ -172,7 +172,7 @@ struct mana_ib_cq { enum mana_rc_queue_type { MANA_RC_SEND_QUEUE_REQUESTER =3D 0, MANA_RC_SEND_QUEUE_RESPONDER, - MANA_RC_SEND_QUEUE_FMR, + MANA_RC_SEND_QUEUE_MMQ, MANA_RC_RECV_QUEUE_REQUESTER, MANA_RC_RECV_QUEUE_RESPONDER, MANA_RC_QUEUE_TYPE_MAX, @@ -372,7 +372,9 @@ struct mana_rnic_destroy_cq_resp { }; /* HW Data */ =20 enum mana_rnic_create_rc_flags { - MANA_RC_FLAG_NO_FMR =3D 2, + MANA_RC_FLAG_NO_MMQ =3D BIT(1), + MANA_RC_FLAG_FIXED_SIZE_WQE =3D BIT(3), + MANA_RC_FLAG_MSN_IN_WQE =3D BIT(4), }; =20 struct mana_rnic_create_qp_req { diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/q= p.c index 8b7be1255..aa5f8c607 100644 --- a/drivers/infiniband/hw/mana/qp.c +++ b/drivers/infiniband/hw/mana/qp.c @@ -549,14 +549,14 @@ static int mana_ib_create_rc_qp(struct ib_qp *ibqp, s= truct ib_pd *ibpd, =20 mana_ucontext =3D rdma_udata_to_drv_context(udata, struct mana_ib_ucontex= t, ibucontext); doorbell =3D mana_ucontext->doorbell; - flags =3D MANA_RC_FLAG_NO_FMR; - err =3D ib_copy_validate_udata_in(udata, ucmd, queue_size); + flags =3D MANA_RC_FLAG_NO_MMQ; + err =3D ib_copy_validate_udata_in_cm(udata, ucmd, queue_size, + MANA_IB_RC_QP_FIXED_WQE | MANA_IB_RC_MMQ_CREATE); if (err) return err; =20 for (i =3D 0, j =3D 0; i < MANA_RC_QUEUE_TYPE_MAX; ++i) { - /* skip FMR for user-level RC QPs */ - if (i =3D=3D MANA_RC_SEND_QUEUE_FMR) { + if (i =3D=3D MANA_RC_SEND_QUEUE_MMQ) { qp->rc_qp.queues[i].id =3D INVALID_QUEUE_ID; qp->rc_qp.queues[i].gdma_region =3D GDMA_INVALID_DMA_REGION; continue; @@ -580,7 +580,7 @@ static int mana_ib_create_rc_qp(struct ib_qp *ibqp, str= uct ib_pd *ibpd, =20 if (udata) { for (i =3D 0, j =3D 0; i < MANA_RC_QUEUE_TYPE_MAX; ++i) { - if (i =3D=3D MANA_RC_SEND_QUEUE_FMR) + if (i =3D=3D MANA_RC_SEND_QUEUE_MMQ) continue; resp.queue_id[j] =3D qp->rc_qp.queues[i].id; j++; diff --git a/include/uapi/rdma/mana-abi.h b/include/uapi/rdma/mana-abi.h index 32cbbfc80..c9a241766 100644 --- a/include/uapi/rdma/mana-abi.h +++ b/include/uapi/rdma/mana-abi.h @@ -48,13 +48,23 @@ struct mana_ib_create_qp_resp { __u32 reserved; }; =20 +enum mana_ib_create_rc_qp_flags { + MANA_IB_RC_QP_FIXED_WQE =3D 1 << 0, + MANA_IB_RC_MMQ_CREATE =3D 1 << 1, +}; + struct mana_ib_create_rc_qp { __aligned_u64 queue_buf[4]; __u32 queue_size[4]; + __aligned_u64 mmq_buf; + __u32 mmq_size; + __u32 comp_mask; }; =20 struct mana_ib_create_rc_qp_resp { __u32 queue_id[4]; + __u32 mmq_id; + __u32 reserved; }; =20 struct mana_ib_create_uc_qp { @@ -100,6 +110,7 @@ struct mana_ib_create_qp_rss_resp { =20 enum mana_ib_ucontext_support { MANA_IB_UCNTX_ALLOC_PDN_SUPPORT =3D 1 << 0, + MANA_IB_UCNTX_RC_EXT_SUPPORT =3D 1 << 1, }; =20 struct mana_ib_alloc_ucontext_resp { --=20 2.43.0 From nobody Sun Sep 27 00:39:13 2026 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 341E847D93A; Thu, 27 Aug 2026 14:38:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787841503; cv=none; b=vGl7S7E8TXwSWZuxvMdANdHBEw83B4K8J4j5192Yv+Mz9tVtOxLe1ptR8YBYyiTTWKbJ3FpZDgEkrlTuKpIVnf7EhtQGHAWLg6XOhXEKVCWE/ksduNlHbrsCuLJvTp6OsyTXuLxhRU1H5eJpZ4isIxx0Y1rDxUA670C3S2EqW2s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787841503; c=relaxed/simple; bh=8tT8cocZEH4jipb2q0BI2cZkAU5cF2zvVWxAW9JS5+g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BwT3B40WQMEBhDafRC40W+BrL48RLOhRWoefhrkV83URsLxAwh4jRADBcATKVA3iztonGFfe3lvm14duL9a4dBcRokFv8h4zof4+4e1H5ql/dq8pSVN2CNMq6yai/6CsKtTEGi6PNuxgGTqgAzBzPbSC064fQJO5K5FsMhCXjuY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=JOrKMACK; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="JOrKMACK" Received: by linux.microsoft.com (Postfix, from userid 1186) id ADABA20B710C; Thu, 27 Aug 2026 07:37:36 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com ADABA20B710C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1787841456; bh=Ak/gdFhRIeBvpQ1j2e2By2BfjknmQchfoWiwthddXwU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JOrKMACKsP2/8JSIlAGC5K0Qf/5jShawUQncKJd9XLl1XOHNDbvjr227rCcwk8TGz v9TSO8IIZR/SFtNF5cm9uBQQNnTxbjDkN9r9HnQvI6EJZZpRdOlVIaZK3C9qwVTnJj EW+3HDS1CKYXoH2xb90pk6iZdVnV07nEdKUsFwuU= From: Konstantin Taranov To: kotaranov@microsoft.com, snsanghvi@microsoft.com, longli@microsoft.com, jgg@ziepe.ca, leon@kernel.org Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH rdma-next v2 2/3] RDMA/mana_ib: MMQ creation for RC QPs Date: Thu, 27 Aug 2026 07:37:35 -0700 Message-ID: <20260827143736.2013093-3-kotaranov@linux.microsoft.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260827143736.2013093-1-kotaranov@linux.microsoft.com> References: <20260827143736.2013093-1-kotaranov@linux.microsoft.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Konstantin Taranov Create an MMQ for an RC QP when userspace sets the corresponding compatibility-mask flag. Register the userspace MMQ buffer and pass the queue to hardware instead of setting the NO_MMQ creation flag. Keep the MMQ disabled for applications that do not request it, preserving the existing behavior. Return the created MMQ ID to userspace in the extended RC QP response. Signed-off-by: Konstantin Taranov --- drivers/infiniband/hw/mana/qp.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/q= p.c index aa5f8c607..c6821ae5f 100644 --- a/drivers/infiniband/hw/mana/qp.c +++ b/drivers/infiniband/hw/mana/qp.c @@ -557,16 +557,22 @@ static int mana_ib_create_rc_qp(struct ib_qp *ibqp, s= truct ib_pd *ibpd, =20 for (i =3D 0, j =3D 0; i < MANA_RC_QUEUE_TYPE_MAX; ++i) { if (i =3D=3D MANA_RC_SEND_QUEUE_MMQ) { - qp->rc_qp.queues[i].id =3D INVALID_QUEUE_ID; - qp->rc_qp.queues[i].gdma_region =3D GDMA_INVALID_DMA_REGION; + if (ucmd.comp_mask & MANA_IB_RC_MMQ_CREATE) { + flags &=3D ~MANA_RC_FLAG_NO_MMQ; + err =3D mana_ib_create_queue(mdev, ucmd.mmq_buf, ucmd.mmq_size, + &qp->rc_qp.queues[i]); + if (err) + goto destroy_queues; + } else { + qp->rc_qp.queues[i].id =3D INVALID_QUEUE_ID; + qp->rc_qp.queues[i].gdma_region =3D GDMA_INVALID_DMA_REGION; + } continue; } err =3D mana_ib_create_queue(mdev, ucmd.queue_buf[j], ucmd.queue_size[j], &qp->rc_qp.queues[i]); - if (err) { - ibdev_err(&mdev->ib_dev, "Failed to create queue %d, err %d\n", i, err); + if (err) goto destroy_queues; - } j++; } =20 @@ -580,8 +586,10 @@ static int mana_ib_create_rc_qp(struct ib_qp *ibqp, st= ruct ib_pd *ibpd, =20 if (udata) { for (i =3D 0, j =3D 0; i < MANA_RC_QUEUE_TYPE_MAX; ++i) { - if (i =3D=3D MANA_RC_SEND_QUEUE_MMQ) + if (i =3D=3D MANA_RC_SEND_QUEUE_MMQ) { + resp.mmq_id =3D qp->rc_qp.queues[i].id; continue; + } resp.queue_id[j] =3D qp->rc_qp.queues[i].id; j++; } --=20 2.43.0 From nobody Sun Sep 27 00:39:13 2026 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 17E0447D92D; Thu, 27 Aug 2026 14:38:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787841502; cv=none; b=q9uBhT1TYOCcZ+1rdhbwbGeB386vJO1fZRfZqgZKKOIdfxQoq708BDIvQE8zuPjRDHclcIufN0lRDkHWDD7UUb3FAL/ApfYO2uIAmEqaWC4MYC4cMUihzn74+IP+suyFYQcG1R/6qTTJQvfREtt+A1r7NMTnSUgXeTULe3yoPtQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787841502; c=relaxed/simple; bh=+AQVj0DHmwJ4lXH2/80JCwdp5xzgGHv+Z8WyfXY2AEg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AV7SqQiacs1U7Xw+pSIsiDiOdxzL30bSPgRy73EpMDC2OODTVnY8IKXZsNLdp8Rc6viKIpUQyfs1zRRtRz4ZVQEjejUpWCF5dpej+QgtkOpZq9RD12Gudlm+nvKwKw54Bb1wuVIDoz9sC8l9rKDPGJ8fNj5t0eBqsxWMN3MFqWk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b=d2wVGB0u; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.microsoft.com header.i=@linux.microsoft.com header.b="d2wVGB0u" Received: by linux.microsoft.com (Postfix, from userid 1186) id BA7B720B7128; Thu, 27 Aug 2026 07:37:36 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com BA7B720B7128 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1787841456; bh=rtNZKK9c3kxVe1/fuCoyNrVgTgZcyR3ViP5DXM1y5Vw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d2wVGB0un7diIHZkfA/oc2xS3M3VNkQdahOwn2vpHYyr8OB7i4/NaLIp3hiLcJppk nicCjKF9rFj5a7C/lIOlJEFGMq4htq0TxFURoF63VpyECKp+lFsqtafMUwPP64/dvG MpXF+nf5z1gCmzYEM7Rhg8egszFkqlmbgggrtaJY= From: Konstantin Taranov To: kotaranov@microsoft.com, snsanghvi@microsoft.com, longli@microsoft.com, jgg@ziepe.ca, leon@kernel.org Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH rdma-next v2 3/3] RDMA/mana_ib: fixed send wqe size support for RC QPs Date: Thu, 27 Aug 2026 07:37:36 -0700 Message-ID: <20260827143736.2013093-4-kotaranov@linux.microsoft.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260827143736.2013093-1-kotaranov@linux.microsoft.com> References: <20260827143736.2013093-1-kotaranov@linux.microsoft.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Konstantin Taranov Support fixed-size send WQEs for RC QPs when requested by userspace. Calculate the WQE size from the maximum send SGE count and the 32-byte inline OOB size, round it up to a power of two, and pass the size to hardware in basic units. When supported by the adapter, also enable placing the message sequence number in the WQE. Preserve the existing variable-size WQE behavior when userspace does not request fixed-size WQEs. Signed-off-by: Konstantin Taranov --- drivers/infiniband/hw/mana/main.c | 3 +++ drivers/infiniband/hw/mana/mana_ib.h | 5 ++++- drivers/infiniband/hw/mana/qp.c | 14 ++++++++++++++ include/net/mana/gdma.h | 1 + 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana= /main.c index 9d043f48e..57c6d9faa 100644 --- a/drivers/infiniband/hw/mana/main.c +++ b/drivers/infiniband/hw/mana/main.c @@ -1060,6 +1060,9 @@ int mana_ib_gd_create_rc_qp(struct mana_ib_dev *mdev,= struct mana_ib_qp *qp, req.max_recv_sge =3D attr->cap.max_recv_sge; req.flags =3D flags; =20 + if (flags & MANA_RC_FLAG_FIXED_SIZE_WQE) + req.wqe_size_in_bu =3D qp->rc_qp.wqe_size_in_bu; + err =3D mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); if (err) return err; diff --git a/drivers/infiniband/hw/mana/mana_ib.h b/drivers/infiniband/hw/m= ana/mana_ib.h index 547ddf9dd..828ca75fd 100644 --- a/drivers/infiniband/hw/mana/mana_ib.h +++ b/drivers/infiniband/hw/mana/mana_ib.h @@ -180,6 +180,7 @@ enum mana_rc_queue_type { =20 struct mana_ib_rc_qp { struct mana_ib_queue queues[MANA_RC_QUEUE_TYPE_MAX]; + u32 wqe_size_in_bu; }; =20 enum mana_uc_queue_type { @@ -262,6 +263,7 @@ enum mana_ib_adapter_features { MANA_IB_FEATURE_CLIENT_ERROR_CQE_SUPPORT =3D BIT(4), MANA_IB_FEATURE_DEV_COUNTERS_SUPPORT =3D BIT(5), MANA_IB_FEATURE_MULTI_PORTS_SUPPORT =3D BIT(6), + MANA_IB_FEATURE_MSN_IN_WQE_SUPPORT =3D BIT(7), }; =20 struct mana_ib_query_adapter_caps_resp { @@ -391,7 +393,8 @@ struct mana_rnic_create_qp_req { u32 max_recv_wr; u32 max_send_sge; u32 max_recv_sge; - u32 reserved; + u8 wqe_size_in_bu; + u8 reserved[3]; }; /* HW Data */ =20 struct mana_rnic_create_qp_resp { diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/q= p.c index c6821ae5f..29bfee9ac 100644 --- a/drivers/infiniband/hw/mana/qp.c +++ b/drivers/infiniband/hw/mana/qp.c @@ -422,6 +422,11 @@ static u32 mana_ib_wqe_size(u32 sge, u32 oob_size) return ALIGN(wqe_size, GDMA_WQE_BU_SIZE); } =20 +static u32 mana_ib_fixed_wqe_size(u32 sge, u32 oob_size) +{ + return roundup_pow_of_two(mana_ib_wqe_size(sge, oob_size)); +} + static u32 mana_ib_queue_size(struct ib_qp_init_attr *attr, u32 queue_type) { u32 queue_size; @@ -576,6 +581,15 @@ static int mana_ib_create_rc_qp(struct ib_qp *ibqp, st= ruct ib_pd *ibpd, j++; } =20 + if (ucmd.comp_mask & MANA_IB_RC_QP_FIXED_WQE) { + u32 wqe_size =3D mana_ib_fixed_wqe_size(attr->cap.max_send_sge, + INLINE_OOB_EXTRA_LARGE_SIZE); + flags |=3D MANA_RC_FLAG_FIXED_SIZE_WQE; + if (mdev->adapter_caps.feature_flags & MANA_IB_FEATURE_MSN_IN_WQE_SUPPOR= T) + flags |=3D MANA_RC_FLAG_MSN_IN_WQE; + qp->rc_qp.wqe_size_in_bu =3D wqe_size / GDMA_WQE_BU_SIZE; + } + err =3D mana_ib_gd_create_rc_qp(mdev, qp, attr, doorbell, flags); if (err) { ibdev_err(&mdev->ib_dev, "Failed to create rc qp %d\n", err); diff --git a/include/net/mana/gdma.h b/include/net/mana/gdma.h index de17c9bba..f3601ca78 100644 --- a/include/net/mana/gdma.h +++ b/include/net/mana/gdma.h @@ -522,6 +522,7 @@ struct gdma_wqe { =20 #define INLINE_OOB_SMALL_SIZE 8 #define INLINE_OOB_LARGE_SIZE 24 +#define INLINE_OOB_EXTRA_LARGE_SIZE 32 =20 #define MANA_MAX_TX_WQE_SGL_ENTRIES 30 =20 --=20 2.43.0