Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp5312437pxv; Wed, 21 Jul 2021 02:23:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJybiRJZmunc3fh0aroDbElGccxm+VS+FTFNJh68kvGOymwkLFFdMgCZsbXfgG5iTMwkmnsf X-Received: by 2002:aa7:c1cc:: with SMTP id d12mr47178902edp.282.1626859397941; Wed, 21 Jul 2021 02:23:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626859397; cv=none; d=google.com; s=arc-20160816; b=zEH1XIhQiUHrfEVCFeczWt8ibYao37OEIoowB05lDRxfaOo2UtutqEVeupAr98G42Q MdZgcg/7YlvDbpp3f6wfjpsIU9YY9js9LpOfmBe908XLEd4F2Xy1JVhnHmwid1yUGCKd 7G36tNcSF5Hsh5VLrx0fE7VytXhE47fM884ka7Nxit80p6mY/kvb0L3mkN59r1a812+6 bk5E0wgl/28i/lb7KNsS4dJr6+iERVU3Vw/y0fG22MFhPUpgNFkNey4KJ0xav/8oJ4GK oiGy6dppd17hPjJYkyVFH7XScJWAYK+wpbaYvOhfOGC6F1kY/86YInx7JS5l9sq5fuCt o8vQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=++d4F2aixX6WuqpVrqrvgXPy6HOmDRTqsNG74soZsfI=; b=c5D4ILttQorsAwexc2NCRtKsiBV+eXe04BEVa4tkgPLJkt32dSpvzKF4IuX/+LimMT 2hdtArLY2o9oRTVOSvJ1U/KMY4O/a9PbaLUkFUwE2lVnPLSqMiNOdvY6to83+QowXT3b cE7iRd9NykiYnJ5gbhVCGJlMpUac7yeC7vqoAp0wvyXY6IWSNBuq3AxdqcIEHT/icTms 3kI40zzUQfjRwAhnPDIeeVVs2lGIHu6xlFcjYaZ+Gg4WY9hX39L8msOJAKmeJBZEJiFR SkmKuZPD2q01hJzP3rqYa5sVHxtHWP6BwWr1k/aVoVl+j90ufaVVIvsixsPetDkoSMAL Uqgg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Xre9dMYm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s10si27426310edr.36.2021.07.21.02.22.54; Wed, 21 Jul 2021 02:23:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Xre9dMYm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237498AbhGUIhq (ORCPT + 99 others); Wed, 21 Jul 2021 04:37:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:56390 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236745AbhGUI0v (ORCPT ); Wed, 21 Jul 2021 04:26:51 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 2C76961175; Wed, 21 Jul 2021 09:07:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1626858448; bh=S5dvdLz5NYOFsg/JDRUYpB0n90tnNDpombc9o4k6X7Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Xre9dMYm54KBkdCyP6faK7Ge1cPzQ2a1YVuYOlsAGTSbDYVouA5gE1PY3r/VSUEhZ a1qBtWJQ9oJrBsH4fWz4BmtcqTEzCanc8TZxDXKUpjOMmkQWmvX9ifxiLdEBBAoGoz cziYQAfufBjmwvvwTVVC9HuH9atXNHAa+/Yyp5G2OD4W2QyCw0XrSbetWmqOqHu4kD 7MgEResn21fl3mFIAOxTC5f1vcz6CDbgJhP3vGv2qGKwt8urtc6zg7S3MqyIO+xN5o X1/4ZOMU8+LDx+RvU+r1cPvUZQRsaUv3Psz7O7z5bwSORdth8i5aRmXTwehRpSw0fV eY85/HUMgTb5A== From: Leon Romanovsky To: Doug Ledford , Jason Gunthorpe Cc: Leon Romanovsky , linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, Mark Zhang , Christoph Hellwig Subject: [PATCH rdma-next v1 4/7] RDMA/core: Reorganize create QP low-level functions Date: Wed, 21 Jul 2021 12:07:07 +0300 Message-Id: <7649b3ed0e8a1b2f05c1bb02b02d0f1af11ab060.1626857976.git.leonro@nvidia.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Leon Romanovsky The low-level create QP function grew to be larger than any sensible inline function should be. The inline attribute is not really needed for that function and can be implemented as exported symbol. Signed-off-by: Leon Romanovsky --- drivers/infiniband/core/core_priv.h | 59 ++--------------------- drivers/infiniband/core/verbs.c | 75 +++++++++++++++++++++++++---- include/rdma/ib_verbs.h | 16 ++++-- 3 files changed, 82 insertions(+), 68 deletions(-) diff --git a/drivers/infiniband/core/core_priv.h b/drivers/infiniband/core/core_priv.h index cc54d74930d6..d28ced053222 100644 --- a/drivers/infiniband/core/core_priv.h +++ b/drivers/infiniband/core/core_priv.h @@ -316,61 +316,10 @@ struct ib_device *ib_device_get_by_index(const struct net *net, u32 index); void nldev_init(void); void nldev_exit(void); -static inline struct ib_qp * -_ib_create_qp(struct ib_device *dev, struct ib_pd *pd, - struct ib_qp_init_attr *attr, struct ib_udata *udata, - struct ib_uqp_object *uobj, const char *caller) -{ - struct ib_qp *qp; - int ret; - - if (!dev->ops.create_qp) - return ERR_PTR(-EOPNOTSUPP); - - qp = rdma_zalloc_drv_obj_numa(dev, ib_qp); - if (!qp) - return ERR_PTR(-ENOMEM); - - qp->device = dev; - qp->pd = pd; - qp->uobject = uobj; - qp->real_qp = qp; - - qp->qp_type = attr->qp_type; - qp->rwq_ind_tbl = attr->rwq_ind_tbl; - qp->srq = attr->srq; - qp->rwq_ind_tbl = attr->rwq_ind_tbl; - qp->event_handler = attr->event_handler; - qp->port = attr->port_num; - qp->qp_context = attr->qp_context; - - spin_lock_init(&qp->mr_lock); - INIT_LIST_HEAD(&qp->rdma_mrs); - INIT_LIST_HEAD(&qp->sig_mrs); - - rdma_restrack_new(&qp->res, RDMA_RESTRACK_QP); - WARN_ONCE(!udata && !caller, "Missing kernel QP owner"); - rdma_restrack_set_name(&qp->res, udata ? NULL : caller); - ret = dev->ops.create_qp(qp, attr, udata); - if (ret) - goto err_create; - - /* - * TODO: The mlx4 internally overwrites send_cq and recv_cq. - * Unfortunately, it is not an easy task to fix that driver. - */ - qp->send_cq = attr->send_cq; - qp->recv_cq = attr->recv_cq; - - rdma_restrack_add(&qp->res); - return qp; - -err_create: - rdma_restrack_put(&qp->res); - kfree(qp); - return ERR_PTR(ret); - -} +struct ib_qp *_ib_create_qp(struct ib_device *dev, struct ib_pd *pd, + struct ib_qp_init_attr *attr, + struct ib_udata *udata, struct ib_uqp_object *uobj, + const char *caller); struct rdma_dev_addr; int rdma_resolve_ip_route(struct sockaddr *src_addr, diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c index 2090f3c9f689..7ee4daa72934 100644 --- a/drivers/infiniband/core/verbs.c +++ b/drivers/infiniband/core/verbs.c @@ -1201,19 +1201,76 @@ static struct ib_qp *create_xrc_qp_user(struct ib_qp *qp, } /** - * ib_create_named_qp - Creates a kernel QP associated with the specified protection - * domain. + * _ib_create_qp - Creates a QP associated with the specified protection domain + * @dev: IB device * @pd: The protection domain associated with the QP. - * @qp_init_attr: A list of initial attributes required to create the + * @attr: A list of initial attributes required to create the * QP. If QP creation succeeds, then the attributes are updated to * the actual capabilities of the created QP. + * @udata: User data + * @uobj: uverbs obect * @caller: caller's build-time module name - * - * NOTE: for user qp use ib_create_qp_user with valid udata! */ -struct ib_qp *ib_create_named_qp(struct ib_pd *pd, - struct ib_qp_init_attr *qp_init_attr, - const char *caller) +struct ib_qp *_ib_create_qp(struct ib_device *dev, struct ib_pd *pd, + struct ib_qp_init_attr *attr, + struct ib_udata *udata, struct ib_uqp_object *uobj, + const char *caller) +{ + struct ib_qp *qp; + int ret; + + if (!dev->ops.create_qp) + return ERR_PTR(-EOPNOTSUPP); + + qp = rdma_zalloc_drv_obj_numa(dev, ib_qp); + if (!qp) + return ERR_PTR(-ENOMEM); + + qp->device = dev; + qp->pd = pd; + qp->uobject = uobj; + qp->real_qp = qp; + + qp->qp_type = attr->qp_type; + qp->rwq_ind_tbl = attr->rwq_ind_tbl; + qp->srq = attr->srq; + qp->rwq_ind_tbl = attr->rwq_ind_tbl; + qp->event_handler = attr->event_handler; + qp->port = attr->port_num; + qp->qp_context = attr->qp_context; + + spin_lock_init(&qp->mr_lock); + INIT_LIST_HEAD(&qp->rdma_mrs); + INIT_LIST_HEAD(&qp->sig_mrs); + + rdma_restrack_new(&qp->res, RDMA_RESTRACK_QP); + WARN_ONCE(!udata && !caller, "Missing kernel QP owner"); + rdma_restrack_set_name(&qp->res, udata ? NULL : caller); + ret = dev->ops.create_qp(qp, attr, udata); + if (ret) + goto err_create; + + /* + * TODO: The mlx4 internally overwrites send_cq and recv_cq. + * Unfortunately, it is not an easy task to fix that driver. + */ + qp->send_cq = attr->send_cq; + qp->recv_cq = attr->recv_cq; + + rdma_restrack_add(&qp->res); + return qp; + +err_create: + rdma_restrack_put(&qp->res); + kfree(qp); + return ERR_PTR(ret); + +} +EXPORT_SYMBOL(_ib_create_qp); + +struct ib_qp *ib_create_qp_kernel(struct ib_pd *pd, + struct ib_qp_init_attr *qp_init_attr, + const char *caller) { struct ib_device *device = pd ? pd->device : qp_init_attr->xrcd->device; struct ib_qp *qp; @@ -1280,7 +1337,7 @@ struct ib_qp *ib_create_named_qp(struct ib_pd *pd, return ERR_PTR(ret); } -EXPORT_SYMBOL(ib_create_named_qp); +EXPORT_SYMBOL(ib_create_qp_kernel); static const struct { int valid; diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 8cd7d1fc719f..4b50d9a3018a 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -3688,13 +3688,21 @@ static inline int ib_post_srq_recv(struct ib_srq *srq, bad_recv_wr ? : &dummy); } -struct ib_qp *ib_create_named_qp(struct ib_pd *pd, - struct ib_qp_init_attr *qp_init_attr, - const char *caller); +struct ib_qp *ib_create_qp_kernel(struct ib_pd *pd, + struct ib_qp_init_attr *qp_init_attr, + const char *caller); +/** + * ib_create_qp - Creates a kernel QP associated with the specific protection + * domain. + * @pd: The protection domain associated with the QP. + * @init_attr: A list of initial attributes required to create the + * QP. If QP creation succeeds, then the attributes are updated to + * the actual capabilities of the created QP. + */ static inline struct ib_qp *ib_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *init_attr) { - return ib_create_named_qp(pd, init_attr, KBUILD_MODNAME); + return ib_create_qp_kernel(pd, init_attr, KBUILD_MODNAME); } /** -- 2.31.1