From nobody Thu Apr 2 22:08:40 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 9C5193590B9; Fri, 13 Feb 2026 11:01:46 +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=1770980506; cv=none; b=rnbyfHco1a9NAsxlBYZfgcyoO5gEo/iiEhTmmJ/OndglfqNTxCOvI0NIi609u7MSN/DlpGLnryflFwGvhzpYPmylmYtK30pvosXGFQuyiDWIu9aoTurVW/5RTZovmmJVsv8kDrE44a01DghTirKtvunMtY+zrXsNhLqveOh43OA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770980506; c=relaxed/simple; bh=f6V1fjY9WirwAECtXhaEuYokIqrMGjYjGYMTtnDJg58=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qIEmJXP/QitmVUtm6gJDVzrXYWg2kJ4CSIgpCHWGqkCyZQGDrEHvSw6v/+ZXVdtRo3kPM84XnhsLKDX7pReP7vhm4PQmEtI/+Qila1duIa9+/RGQvK+wgM5OpnxD4TfpfnLMnEWbC0fuSTBDGvmQiLZ5f8Onr2K7xp6GIoqGjmw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sjUw6VIJ; 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="sjUw6VIJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 850A6C116C6; Fri, 13 Feb 2026 11:01:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1770980506; bh=f6V1fjY9WirwAECtXhaEuYokIqrMGjYjGYMTtnDJg58=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sjUw6VIJrOM7FaQeUGj5yRGevXgJSzJv+XxWkvFaaCJZh9KW8Wb048OyGGDrmQ56S 8ENf+YR2sD/FshaildMlvyeBf4KpZbZzBS48wScVLWixlPMZcL+E5jIIBhqdSmv+6Q 0EIUp7H4taOwXzx/Ijnpk1wFqUWo3rDHtylsVczJTVLc/ODBWmVNnkVxpok47sQVKz suBX7DxP2TKzi1ejyBkG5RxSaN6PJ/+aNHpgdek4BK03n7qnD7ObU9l49Gu5pqCkSp 6cAgA+yjjTClBpjuU7G/aEinwMWvIJgwyP4s4IM7KRLn9bJ62FsVZ8ypkVktg8QbuH yFIAFn5emSFDg== 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: =?utf-8?q?=5BPATCH_rdma-next_46/50=5D_RDMA/mlx4=3A_Use_on=E2=80?= =?utf-8?q?=91stack_variables_instead_of_storing_them_in_the_CQ_object?= Date: Fri, 13 Feb 2026 12:58:22 +0200 Message-ID: <20260213-refactor-umem-v1-46-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 These variables do not need to persist for the lifetime of the CQ object. They can be safely allocated on the stack instead. Signed-off-by: Leon Romanovsky --- drivers/infiniband/hw/mlx4/cq.c | 81 +++++++++++++-------------------= ---- drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 - 2 files changed, 28 insertions(+), 54 deletions(-) diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/c= q.c index ffc3902dc329..6e8017ecf137 100644 --- a/drivers/infiniband/hw/mlx4/cq.c +++ b/drivers/infiniband/hw/mlx4/cq.c @@ -294,15 +294,29 @@ int mlx4_ib_create_cq(struct ib_cq *ibcq, const struc= t ib_cq_init_attr *attr, return err; } =20 -static int mlx4_alloc_resize_umem(struct mlx4_ib_dev *dev, struct mlx4_ib_= cq *cq, - int entries, struct ib_udata *udata) +int mlx4_ib_resize_cq(struct ib_cq *ibcq, unsigned int entries, + struct ib_udata *udata) { + struct mlx4_ib_dev *dev =3D to_mdev(ibcq->device); + struct mlx4_ib_cq *cq =3D to_mcq(ibcq); struct mlx4_ib_resize_cq ucmd; int cqe_size =3D dev->dev->caps.cqe_size; + struct ib_umem *umem; + struct mlx4_mtt mtt; int shift; int n; int err; =20 + if (entries > dev->dev->caps.max_cqes) + return -EINVAL; + + entries =3D roundup_pow_of_two(entries + 1); + if (entries =3D=3D ibcq->cqe + 1) + return 0; + + if (entries > dev->dev->caps.max_cqes + 1) + return -EINVAL; + if (ib_copy_from_udata(&ucmd, udata, sizeof ucmd)) return -EFAULT; =20 @@ -310,15 +324,14 @@ static int mlx4_alloc_resize_umem(struct mlx4_ib_dev = *dev, struct mlx4_ib_cq *cq if (!cq->resize_buf) return -ENOMEM; =20 - 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); + umem =3D ib_umem_get(&dev->ib_dev, ucmd.buf_addr, + entries * cqe_size, IB_ACCESS_LOCAL_WRITE); + if (IS_ERR(umem)) { + err =3D PTR_ERR(umem); goto err_buf; } =20 - shift =3D mlx4_ib_umem_calc_optimal_mtt_size(cq->resize_umem, 0, &n); + shift =3D mlx4_ib_umem_calc_optimal_mtt_size(umem, 0, &n); if (shift < 0) { err =3D shift; goto err_umem; @@ -328,73 +341,35 @@ static int mlx4_alloc_resize_umem(struct mlx4_ib_dev = *dev, struct mlx4_ib_cq *cq if (err) goto err_umem; =20 - err =3D mlx4_ib_umem_write_mtt(dev, &cq->resize_buf->buf.mtt, - cq->resize_umem); + err =3D mlx4_ib_umem_write_mtt(dev, &cq->resize_buf->buf.mtt, umem); if (err) goto err_mtt; =20 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); - cq->resize_umem =3D NULL; -err_buf: - kfree(cq->resize_buf); - cq->resize_buf =3D NULL; - return err; -} - -int mlx4_ib_resize_cq(struct ib_cq *ibcq, unsigned int entries, - struct ib_udata *udata) -{ - struct mlx4_ib_dev *dev =3D to_mdev(ibcq->device); - struct mlx4_ib_cq *cq =3D to_mcq(ibcq); - struct mlx4_mtt mtt; - int err; - - if (entries > dev->dev->caps.max_cqes) - return -EINVAL; - - entries =3D roundup_pow_of_two(entries + 1); - if (entries =3D=3D ibcq->cqe + 1) - return 0; - - if (entries > dev->dev->caps.max_cqes + 1) - return -EINVAL; - - err =3D mlx4_alloc_resize_umem(dev, cq, entries, udata); - if (err) - return err; mtt =3D cq->buf.mtt; =20 err =3D mlx4_cq_resize(dev->dev, &cq->mcq, entries, &cq->resize_buf->buf.= mtt); if (err) - goto err_buf; + goto err_mtt; =20 mlx4_mtt_cleanup(dev->dev, &mtt); cq->buf =3D cq->resize_buf->buf; cq->ibcq.cqe =3D cq->resize_buf->cqe; ib_umem_release(cq->ibcq.umem); - cq->ibcq.umem =3D cq->resize_umem; + cq->ibcq.umem =3D umem; =20 kfree(cq->resize_buf); cq->resize_buf =3D NULL; - cq->resize_umem =3D NULL; return 0; =20 +err_mtt: + mlx4_mtt_cleanup(dev->dev, &cq->resize_buf->buf.mtt); =20 +err_umem: + ib_umem_release(umem); err_buf: - mlx4_mtt_cleanup(dev->dev, &cq->resize_buf->buf.mtt); kfree(cq->resize_buf); - cq->resize_buf =3D NULL; - - ib_umem_release(cq->resize_umem); - cq->resize_umem =3D NULL; return err; } =20 diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/m= lx4/mlx4_ib.h index 2f1043690554..4163a6cb32d0 100644 --- a/drivers/infiniband/hw/mlx4/mlx4_ib.h +++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h @@ -120,7 +120,6 @@ struct mlx4_ib_cq { struct mlx4_ib_cq_resize *resize_buf; struct mlx4_db db; spinlock_t lock; - struct ib_umem *resize_umem; /* List of qps that it serves.*/ struct list_head send_qp_list; struct list_head recv_qp_list; --=20 2.52.0