From nobody Thu Apr 2 22:08:48 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 3A04D35292B; Fri, 13 Feb 2026 10:59:21 +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=1770980362; cv=none; b=PbCOJ42LkQB2XRKCrYLVF8fKbuCq76QML4UaxWs6HWfnYE8J+5P6DMRGs2cTYE0U85pIRxFbtyBTpNdjVq/HDbYEk6StwwXVOeV6cryvWY8XjV5n/dHVEaSgIDIGL5kd2Wbv+GiKlSVBG7gUHohKlKydbfMsoq+auWVMMTnp/GY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770980362; c=relaxed/simple; bh=ZILxVEto2dj+Iffa0Sa1Wb70T82yzlvYw9kGejs6jBw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=c5yWmNfTmqj3PZaBp4XVWYVUWwncAdnHz76yGiJki6abNKjhuLyBOGezCGnuep/S3Gr5JTFKEfqBq5FgNKlm7NqXz4Mqg+7If1aGL3LoeSH6nVJRpxWrwkJgIv7Ggd6Jb4d29T1dalarINAz1rIqTgUMNoFZW5xinrXCEqJkHoU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fTwv9NGD; 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="fTwv9NGD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F05CEC19424; Fri, 13 Feb 2026 10:59:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1770980361; bh=ZILxVEto2dj+Iffa0Sa1Wb70T82yzlvYw9kGejs6jBw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fTwv9NGDFfVLOYoBNBJOs+KZpr8/U1GDQ1r7U98CpZCpf/Lr/e/YHay2cCb8lGwK+ QSEkenAemqrc3AhuytwHLzSP9qgWxKZOOMTjp0cXPoWI7LddISHaQgk/4Af+h9BEBv SUABRjCsF9DwOumCW3rclXWW1pfVBndubJKGZvw4ARvURMZAVwzKU+APxnUx/gfzka Bm9jN2rKuRbiFsJH7lL4F+YLNWRSsHBoOHTcen1XXOjhuCn1RnDrmHX4mMsMyvXRqL UEvrbADxyFpjJJO3XCbmK2H/ZIN4iVYKt7Mv4wZszKK333eFdxeiqxAh+C80mPkOmP zswM2t4SfIGZw== 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 08/50] RDMA/core: Reject zero CQE count Date: Fri, 13 Feb 2026 12:57:44 +0200 Message-ID: <20260213-refactor-umem-v1-8-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 All drivers already ensure that the number of CQEs is at least 1. Add this validation to the core so drivers no longer need to repeat it. Future patches converting to the .create_user_cq() interface will remove the per=E2=80=91driver checks. Signed-off-by: Leon Romanovsky --- drivers/infiniband/core/cq.c | 3 +++ drivers/infiniband/core/uverbs_cmd.c | 3 +++ drivers/infiniband/core/uverbs_std_types_cq.c | 15 +++++++++------ drivers/infiniband/core/verbs.c | 3 +++ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/drivers/infiniband/core/cq.c b/drivers/infiniband/core/cq.c index 584537c71545..7e0b54ec4141 100644 --- a/drivers/infiniband/core/cq.c +++ b/drivers/infiniband/core/cq.c @@ -220,6 +220,9 @@ struct ib_cq *__ib_alloc_cq(struct ib_device *dev, void= *private, int nr_cqe, struct ib_cq *cq; int ret =3D -ENOMEM; =20 + if (WARN_ON_ONCE(!nr_cqe)) + return ERR_PTR(-EINVAL); + cq =3D rdma_zalloc_drv_obj(dev, ib_cq); if (!cq) return ERR_PTR(ret); diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core= /uverbs_cmd.c index c7be592f60e8..041bed7a43b4 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c @@ -1032,6 +1032,9 @@ static int create_cq(struct uverbs_attr_bundle *attrs, if (cmd->comp_vector >=3D attrs->ufile->device->num_comp_vectors) return -EINVAL; =20 + if (!cmd->cqe) + return -EINVAL; + obj =3D (struct ib_ucq_object *)uobj_alloc(UVERBS_OBJECT_CQ, attrs, &ib_dev); if (IS_ERR(obj)) diff --git a/drivers/infiniband/core/uverbs_std_types_cq.c b/drivers/infini= band/core/uverbs_std_types_cq.c index b999d8d62694..d2c8f71f934c 100644 --- a/drivers/infiniband/core/uverbs_std_types_cq.c +++ b/drivers/infiniband/core/uverbs_std_types_cq.c @@ -84,12 +84,15 @@ static int UVERBS_HANDLER(UVERBS_METHOD_CQ_CREATE)( =20 ret =3D uverbs_copy_from(&attr.comp_vector, attrs, UVERBS_ATTR_CREATE_CQ_COMP_VECTOR); - if (!ret) - ret =3D uverbs_copy_from(&attr.cqe, attrs, - UVERBS_ATTR_CREATE_CQ_CQE); - if (!ret) - ret =3D uverbs_copy_from(&user_handle, attrs, - UVERBS_ATTR_CREATE_CQ_USER_HANDLE); + if (ret) + return ret; + + ret =3D uverbs_copy_from(&attr.cqe, attrs, UVERBS_ATTR_CREATE_CQ_CQE); + if (ret || !attr.cqe) + return ret ? : -EINVAL; + + ret =3D uverbs_copy_from(&user_handle, attrs, + UVERBS_ATTR_CREATE_CQ_USER_HANDLE); if (ret) return ret; =20 diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verb= s.c index d0880346ebe2..9d075eeda463 100644 --- a/drivers/infiniband/core/verbs.c +++ b/drivers/infiniband/core/verbs.c @@ -2203,6 +2203,9 @@ struct ib_cq *__ib_create_cq(struct ib_device *device, if (!cq) return ERR_PTR(-ENOMEM); =20 + if (WARN_ON_ONCE(!cq_attr->cqe)) + return ERR_PTR(-EINVAL); + cq->device =3D device; cq->comp_handler =3D comp_handler; cq->event_handler =3D event_handler; --=20 2.52.0