From patchwork Sun Jan 20 13:05:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leon Romanovsky X-Patchwork-Id: 10772393 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0CD21746 for ; Sun, 20 Jan 2019 13:06:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F0BBF2A6F1 for ; Sun, 20 Jan 2019 13:06:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E562B2AA7D; Sun, 20 Jan 2019 13:06:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 839E62A6F1 for ; Sun, 20 Jan 2019 13:06:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730585AbfATNGT (ORCPT ); Sun, 20 Jan 2019 08:06:19 -0500 Received: from mail.kernel.org ([198.145.29.99]:36402 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730542AbfATNGT (ORCPT ); Sun, 20 Jan 2019 08:06:19 -0500 Received: from localhost (unknown [193.47.165.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9A4AC214C6; Sun, 20 Jan 2019 13:06:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1547989578; bh=OKwomUQNOARQ5fFCeBLBPQNmtk+Famt/NC7tdFYYO88=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CajSfC6BoHnFUIjA4JxAmhHxe4xWXy8Ip5xOBP8m9BALd68MgHtpgj8RlTutnN+ZA 3CoHWg4eHWjEcUJRz0BTExJz3Q7+Gcyrct3xFe70WSIm1DiAOFh9bVmXCvbEDGSqWK hCxI1QDRmUtYEAdWxbTLGkCwj1cgm8HpJyw9iSNQ= From: Leon Romanovsky To: Doug Ledford , Jason Gunthorpe Cc: Leon Romanovsky , RDMA mailing list Subject: [PATCH rdma-next v1 4/6] RDMA/mlx5: Use HW variant restrack QP ID allocation mode Date: Sun, 20 Jan 2019 15:05:58 +0200 Message-Id: <20190120130600.8788-5-leon@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190120130600.8788-1-leon@kernel.org> References: <20190120130600.8788-1-leon@kernel.org> MIME-Version: 1.0 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Leon Romanovsky Adapt mlx5 to use restrack automatic QP allocation scheme and open create_qp callback to track all QP types except XRC. Signed-off-by: Leon Romanovsky --- drivers/infiniband/core/core_priv.h | 3 ++- drivers/infiniband/hw/mlx5/gsi.c | 5 ++++- drivers/infiniband/hw/mlx5/main.c | 2 ++ drivers/infiniband/hw/mlx5/qp.c | 17 +++++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/core/core_priv.h b/drivers/infiniband/core/core_priv.h index cda2db1add39..fc068f80f566 100644 --- a/drivers/infiniband/core/core_priv.h +++ b/drivers/infiniband/core/core_priv.h @@ -299,7 +299,8 @@ static inline struct ib_qp *_ib_create_qp(struct ib_device *dev, * see mlx5 create_dev_resources() as an example. */ rdma_rt_set_type(&qp->res, RDMA_RESTRACK_QP); - if (attr->qp_type < IB_QPT_XRC_INI) { + if (attr->qp_type != IB_QPT_XRC_INI && + attr->qp_type != IB_QPT_XRC_TGT) { if (uobj) rdma_restrack_uadd(&qp->res); else diff --git a/drivers/infiniband/hw/mlx5/gsi.c b/drivers/infiniband/hw/mlx5/gsi.c index 4950df3f71b6..0aeff7e3dbf6 100644 --- a/drivers/infiniband/hw/mlx5/gsi.c +++ b/drivers/infiniband/hw/mlx5/gsi.c @@ -193,9 +193,12 @@ struct ib_qp *mlx5_ib_gsi_create_qp(struct ib_pd *pd, } dev->devr.ports[init_attr->port_num - 1].gsi = gsi; - mutex_unlock(&dev->devr.mutex); + gsi->ibqp.device = &dev->ib_dev; + rdma_rt_set_type(&gsi->ibqp.res, RDMA_RESTRACK_QP); + rdma_rt_set_id(&gsi->ibqp.res, gsi->ibqp.qp_num); + return &gsi->ibqp; err_destroy_cq: diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c index 3e1fb9d57724..12a038146105 100644 --- a/drivers/infiniband/hw/mlx5/main.c +++ b/drivers/infiniband/hw/mlx5/main.c @@ -6529,6 +6529,8 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev) rdma_rt_set_id_range(&dev->ib_dev, RDMA_RESTRACK_PD, 0, 0); /* CQ ID managed by FW */ rdma_rt_set_id_range(&dev->ib_dev, RDMA_RESTRACK_CQ, 0, 0); + /* QP ID managed by HW */ + rdma_rt_set_id_range(&dev->ib_dev, RDMA_RESTRACK_QP, 0, 0); dev->mdev = mdev; dev->num_ports = max(MLX5_CAP_GEN(mdev, num_ports), diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c index 44bde8dfebf6..d18e2156d395 100644 --- a/drivers/infiniband/hw/mlx5/qp.c +++ b/drivers/infiniband/hw/mlx5/qp.c @@ -2444,6 +2444,13 @@ static struct ib_qp *mlx5_ib_create_dct(struct ib_pd *pd, qp->state = IB_QPS_RESET; + qp->ibqp.device = pd->device; + rdma_rt_set_type(&qp->ibqp.res, RDMA_RESTRACK_QP); + rdma_rt_set_id(&qp->ibqp.res, qp->ibqp.qp_num); + err = rdma_restrack_add(&qp->ibqp.res); + if (err) + goto err_free; + return &qp->ibqp; err_free: kfree(qp); @@ -2607,6 +2614,15 @@ struct ib_qp *mlx5_ib_create_qp(struct ib_pd *pd, if (verbs_init_attr->qp_type == IB_QPT_DRIVER) qp->qp_sub_type = init_attr->qp_type; + qp->ibqp.device = &dev->ib_dev; + rdma_rt_set_type(&qp->ibqp.res, RDMA_RESTRACK_QP); + rdma_rt_set_id(&qp->ibqp.res, qp->ibqp.qp_num); + err = rdma_restrack_add(&qp->ibqp.res); + if (err) { + kfree(qp); + return ERR_PTR(err); + } + return &qp->ibqp; } @@ -2637,6 +2653,7 @@ int mlx5_ib_destroy_qp(struct ib_qp *qp) if (unlikely(qp->qp_type == IB_QPT_GSI)) return mlx5_ib_gsi_destroy_qp(qp); + rdma_restrack_del(&qp->res); if (mqp->qp_sub_type == MLX5_IB_QPT_DCT) return mlx5_ib_destroy_dct(mqp);