From nobody Thu Apr 2 22:12:31 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5466B355020; Fri, 13 Feb 2026 10:59:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770980388; cv=none; b=PLcREXbqFWyF4eJQPMaKsa1B+adJdkcSbRnEK4bR4VI/0lqUG9WE3TJ42YKWP21vfHLAGyAXzHAzn0NgAIp1FGfttr/+cECWC/42Nzj/UQ+zWKNl4l+nkCryxXjlc+6LfQuD6mFlim4kNda1o8JaDuieoyL63kA2OQs8WfUP4ec= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770980388; c=relaxed/simple; bh=AQVvvIH7DY2oowq/cNaZ9Og/FMsRdoik9sIHT+wgp/E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rQslAURO9GvFXt6DV33s+E3/ClKduCxhvndLWlPhlJP4O/TKNvqsbl74UWrnnM9ZqTNtuOHt/syC6J2XYgjlHSZxOajjFipmUCppaRZAMdyY81YRONEVEHkRQ3Zq4nyXBkX5UM0u1abh4UEklUNxrXRu7KkFsexkVSEBoVdEVjI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=U0YOypzT; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="U0YOypzT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 89170C19423; Fri, 13 Feb 2026 10:59:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1770980388; bh=AQVvvIH7DY2oowq/cNaZ9Og/FMsRdoik9sIHT+wgp/E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=U0YOypzTbix1qroBXmhxEWScAbtSr0lr6JKloJKtIhXM6xRLLICPbVH/KcWtNHLjb WjS+tNGbk0VsRt9slTUTgPxKF1d2fHPuoGHlQtYWFxfuVPKPHj/m8feGov+bsTb/Vi k7SDNtlYtTk53yJYXEeSddO0mXTwf8ulaPFYCHpAsKdyn4YSHxC7AKbgVke7A4bOH/ niKrnzbWGlA9MWttPR7hR3nKHkMV59SmISR1BxjYKC0XHCSzNJ/feeIxx3X8CuZowQ a8+oEC0DKFsLGlX+9nvZ9MAfZ6seiubLoXkl0AvdXAI3fuDF3QEoRfDdC7DJwW6xjO FPYXlXKL3709g== From: Leon Romanovsky To: Jason Gunthorpe , Leon Romanovsky , Selvin Xavier , Kalesh AP , Potnuri Bharat Teja , Michael Margolin , Gal Pressman , Yossi Leybovich , Cheng Xu , Kai Shen , Chengchang Tang , Junxian Huang , Abhijit Gangurde , Allen Hubbe , Krzysztof Czurylo , Tatyana Nikolova , Long Li , Konstantin Taranov , Yishai Hadas , Michal Kalderon , Bryan Tan , Vishnu Dasa , Broadcom internal kernel review list , Christian Benvenuti , Nelson Escobar , Dennis Dalessandro , Bernard Metzler , Zhu Yanjun Cc: linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, linux-hyperv@vger.kernel.org Subject: [PATCH rdma-next 12/50] RDMA/mlx4: Inline mlx4_ib_get_cq_umem into callers Date: Fri, 13 Feb 2026 12:57:48 +0200 Message-ID: <20260213-refactor-umem-v1-12-f3be85847922@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260213-refactor-umem-v1-0-f3be85847922@nvidia.com> References: <20260213-refactor-umem-v1-0-f3be85847922@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.15-dev-47773 Content-Transfer-Encoding: quoted-printable From: Leon Romanovsky Inline the mlx4_ib_get_cq_umem helper function into its two call sites (mlx4_ib_create_cq and mlx4_alloc_resize_umem) to prepare for the transition to modern CQ creation interface. Signed-off-by: Leon Romanovsky --- drivers/infiniband/hw/mlx4/cq.c | 108 ++++++++++++++++++++++--------------= ---- 1 file changed, 60 insertions(+), 48 deletions(-) diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/c= q.c index c592374f4a58..94e9ff45725a 100644 --- a/drivers/infiniband/hw/mlx4/cq.c +++ b/drivers/infiniband/hw/mlx4/cq.c @@ -135,45 +135,6 @@ static void mlx4_ib_free_cq_buf(struct mlx4_ib_dev *de= v, struct mlx4_ib_cq_buf * mlx4_buf_free(dev->dev, (cqe + 1) * buf->entry_size, &buf->buf); } =20 -static int mlx4_ib_get_cq_umem(struct mlx4_ib_dev *dev, - struct mlx4_ib_cq_buf *buf, - struct ib_umem **umem, u64 buf_addr, int cqe) -{ - int err; - int cqe_size =3D dev->dev->caps.cqe_size; - int shift; - int n; - - *umem =3D ib_umem_get(&dev->ib_dev, buf_addr, cqe * cqe_size, - IB_ACCESS_LOCAL_WRITE); - if (IS_ERR(*umem)) - return PTR_ERR(*umem); - - shift =3D mlx4_ib_umem_calc_optimal_mtt_size(*umem, 0, &n); - if (shift < 0) { - err =3D shift; - goto err_buf; - } - - err =3D mlx4_mtt_init(dev->dev, n, shift, &buf->mtt); - if (err) - goto err_buf; - - err =3D mlx4_ib_umem_write_mtt(dev, &buf->mtt, *umem); - if (err) - goto err_mtt; - - return 0; - -err_mtt: - mlx4_mtt_cleanup(dev->dev, &buf->mtt); - -err_buf: - ib_umem_release(*umem); - - return err; -} - #define CQ_CREATE_FLAGS_SUPPORTED IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION int mlx4_ib_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *at= tr, struct uverbs_attr_bundle *attrs) @@ -208,6 +169,9 @@ int mlx4_ib_create_cq(struct ib_cq *ibcq, const struct = ib_cq_init_attr *attr, =20 if (udata) { struct mlx4_ib_create_cq ucmd; + int cqe_size =3D dev->dev->caps.cqe_size; + int shift; + int n; =20 if (ib_copy_from_udata(&ucmd, udata, sizeof ucmd)) { err =3D -EFAULT; @@ -215,10 +179,28 @@ int mlx4_ib_create_cq(struct ib_cq *ibcq, const struc= t ib_cq_init_attr *attr, } =20 buf_addr =3D (void *)(unsigned long)ucmd.buf_addr; - err =3D mlx4_ib_get_cq_umem(dev, &cq->buf, &cq->umem, - ucmd.buf_addr, entries); - if (err) + + cq->umem =3D ib_umem_get(&dev->ib_dev, ucmd.buf_addr, + entries * cqe_size, + IB_ACCESS_LOCAL_WRITE); + if (IS_ERR(cq->umem)) { + err =3D PTR_ERR(cq->umem); goto err_cq; + } + + shift =3D mlx4_ib_umem_calc_optimal_mtt_size(cq->umem, 0, &n); + if (shift < 0) { + err =3D shift; + goto err_umem; + } + + err =3D mlx4_mtt_init(dev->dev, n, shift, &cq->buf.mtt); + if (err) + goto err_umem; + + err =3D mlx4_ib_umem_write_mtt(dev, &cq->buf.mtt, cq->umem); + if (err) + goto err_mtt; =20 err =3D mlx4_ib_db_map_user(udata, ucmd.db_addr, &cq->db); if (err) @@ -281,6 +263,7 @@ int mlx4_ib_create_cq(struct ib_cq *ibcq, const struct = ib_cq_init_attr *attr, err_mtt: mlx4_mtt_cleanup(dev->dev, &cq->buf.mtt); =20 +err_umem: ib_umem_release(cq->umem); if (!udata) mlx4_ib_free_cq_buf(dev, &cq->buf, cq->ibcq.cqe); @@ -320,6 +303,9 @@ static int mlx4_alloc_resize_umem(struct mlx4_ib_dev *d= ev, struct mlx4_ib_cq *cq int entries, struct ib_udata *udata) { struct mlx4_ib_resize_cq ucmd; + int cqe_size =3D dev->dev->caps.cqe_size; + int shift; + int n; int err; =20 if (cq->resize_umem) @@ -332,17 +318,43 @@ static int mlx4_alloc_resize_umem(struct mlx4_ib_dev = *dev, struct mlx4_ib_cq *cq if (!cq->resize_buf) return -ENOMEM; =20 - err =3D mlx4_ib_get_cq_umem(dev, &cq->resize_buf->buf, &cq->resize_umem, - ucmd.buf_addr, entries); - if (err) { - kfree(cq->resize_buf); - cq->resize_buf =3D NULL; - return err; + cq->resize_umem =3D ib_umem_get(&dev->ib_dev, ucmd.buf_addr, + entries * cqe_size, + IB_ACCESS_LOCAL_WRITE); + if (IS_ERR(cq->resize_umem)) { + err =3D PTR_ERR(cq->resize_umem); + goto err_buf; + } + + shift =3D mlx4_ib_umem_calc_optimal_mtt_size(cq->resize_umem, 0, &n); + if (shift < 0) { + err =3D shift; + goto err_umem; } =20 + err =3D mlx4_mtt_init(dev->dev, n, shift, &cq->resize_buf->buf.mtt); + if (err) + goto err_umem; + + err =3D mlx4_ib_umem_write_mtt(dev, &cq->resize_buf->buf.mtt, + cq->resize_umem); + if (err) + goto err_mtt; + cq->resize_buf->cqe =3D entries - 1; =20 return 0; + +err_mtt: + mlx4_mtt_cleanup(dev->dev, &cq->resize_buf->buf.mtt); + +err_umem: + ib_umem_release(cq->resize_umem); + +err_buf: + kfree(cq->resize_buf); + cq->resize_buf =3D NULL; + return err; } =20 static int mlx4_ib_get_outstanding_cqes(struct mlx4_ib_cq *cq) --=20 2.52.0