From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC19DC54FCB for ; Thu, 23 Apr 2020 19:03:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ADCF920728 for ; Thu, 23 Apr 2020 19:03:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587668631; bh=qDqQ5oaAI4oclqv2WYUFA9x+YbBzlVHNIpjuUDIscvY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=jvpsGhwN8zfvz5HcRQLuchk/i1spXZH93wpaATpF4RQ0INvu08LtEh5AHkHyxIS7S eqJAiedWK5WsNhlPFCrDqwBanWuDDZ6KdWb1fsnp3eP1jpQhdF/BjhUtt/+i+PVE6S /6AUxEq9QDdTl41C8LF5mLEBClHY5o0GRRbpYHoc= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730374AbgDWTDv (ORCPT ); Thu, 23 Apr 2020 15:03:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:41908 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727877AbgDWTDu (ORCPT ); Thu, 23 Apr 2020 15:03:50 -0400 Received: from localhost (unknown [213.57.247.131]) (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 A89302076C; Thu, 23 Apr 2020 19:03:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587668630; bh=qDqQ5oaAI4oclqv2WYUFA9x+YbBzlVHNIpjuUDIscvY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y4Vgz9A3wK+UDT9XUOd3nB4oXDlBAmU9PQN4zQjapnnlLAxBtXL7xB8FCZJTzwYZg VWf4u225kqLX9BC9h6UiHsgJW6UT09io+0b2go9KtIFu7WewYcHC0Co5A/IYlvjHW9 zmm5UynddonOpIGP/hzJznCmtPwIlczGxe2NYjMU= From: Leon Romanovsky To: Doug Ledford , Jason Gunthorpe Cc: Leon Romanovsky , linux-rdma@vger.kernel.org, Maor Gottlieb Subject: [PATCH rdma-next 11/18] RDMA/mlx5: Reduce amount of duplication in QP destroy Date: Thu, 23 Apr 2020 22:02:56 +0300 Message-Id: <20200423190303.12856-12-leon@kernel.org> X-Mailer: git-send-email 2.25.3 In-Reply-To: <20200423190303.12856-1-leon@kernel.org> References: <20200423190303.12856-1-leon@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Leon Romanovsky Delete both PD argument and checks if udata was provided, in favour of unified destroy QP functions. Reviewed-by: Maor Gottlieb Signed-off-by: Leon Romanovsky --- drivers/infiniband/hw/mlx5/qp.c | 70 +++++++++++++++------------------ 1 file changed, 31 insertions(+), 39 deletions(-) diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c index f667abf3f461..78c34737ae2f 100644 --- a/drivers/infiniband/hw/mlx5/qp.c +++ b/drivers/infiniband/hw/mlx5/qp.c @@ -1038,25 +1038,36 @@ static int _create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd, return err; } -static void destroy_qp_user(struct mlx5_ib_dev *dev, struct ib_pd *pd, - struct mlx5_ib_qp *qp, struct mlx5_ib_qp_base *base, - struct ib_udata *udata) +static void destroy_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, + struct mlx5_ib_qp_base *base, struct ib_udata *udata) { - struct mlx5_ib_ucontext *context = - rdma_udata_to_drv_context( - udata, - struct mlx5_ib_ucontext, - ibucontext); + struct mlx5_ib_ucontext *context = rdma_udata_to_drv_context( + udata, struct mlx5_ib_ucontext, ibucontext); - mlx5_ib_db_unmap_user(context, &qp->db); - ib_umem_release(base->ubuffer.umem); + if (udata) { + /* User QP */ + mlx5_ib_db_unmap_user(context, &qp->db); + ib_umem_release(base->ubuffer.umem); - /* - * Free only the BFREGs which are handled by the kernel. - * BFREGs of UARs allocated dynamically are handled by user. - */ - if (qp->bfregn != MLX5_IB_INVALID_BFREG) - mlx5_ib_free_bfreg(dev, &context->bfregi, qp->bfregn); + /* + * Free only the BFREGs which are handled by the kernel. + * BFREGs of UARs allocated dynamically are handled by user. + */ + if (qp->bfregn != MLX5_IB_INVALID_BFREG) + mlx5_ib_free_bfreg(dev, &context->bfregi, qp->bfregn); + return; + } + + /* Kernel QP */ + kvfree(qp->sq.wqe_head); + kvfree(qp->sq.w_list); + kvfree(qp->sq.wrid); + kvfree(qp->sq.wr_data); + kvfree(qp->rq.wrid); + if (qp->db.db) + mlx5_db_free(dev->mdev, &qp->db); + if (qp->buf.frags) + mlx5_frag_buf_free(dev->mdev, &qp->buf); } /* get_sq_edge - Get the next nearby edge. @@ -1202,19 +1213,6 @@ static int _create_kernel_qp(struct mlx5_ib_dev *dev, return err; } -static void destroy_qp_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp) -{ - kvfree(qp->sq.wqe_head); - kvfree(qp->sq.w_list); - kvfree(qp->sq.wrid); - kvfree(qp->sq.wr_data); - kvfree(qp->rq.wrid); - if (qp->db.db) - mlx5_db_free(dev->mdev, &qp->db); - if (qp->buf.frags) - mlx5_frag_buf_free(dev->mdev, &qp->buf); -} - static u32 get_rx_type(struct mlx5_ib_qp *qp, struct ib_qp_init_attr *attr) { if (attr->srq || (qp->type == IB_QPT_XRC_TGT) || @@ -1972,7 +1970,7 @@ static int create_xrc_tgt_qp(struct mlx5_ib_dev *dev, err = mlx5_core_create_qp(dev, &base->mqp, in, inlen); kvfree(in); if (err) { - destroy_qp_user(dev, NULL, qp, base, udata); + destroy_qp(dev, qp, base, udata); return err; } @@ -2170,10 +2168,7 @@ static int create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd, return 0; err_create: - if (udata) - destroy_qp_user(dev, pd, qp, base, udata); - else - destroy_qp_kernel(dev, qp); + destroy_qp(dev, qp, base, udata); return err; } @@ -2300,7 +2295,7 @@ static int create_kernel_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd, return 0; err_create: - destroy_qp_kernel(dev, qp); + destroy_qp(dev, qp, base, NULL); return err; } @@ -2470,10 +2465,7 @@ static void destroy_qp_common(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp, base->mqp.qpn); } - if (udata) - destroy_qp_user(dev, &get_pd(qp)->ibpd, qp, base, udata); - else - destroy_qp_kernel(dev, qp); + destroy_qp(dev, qp, base, udata); } static int create_dct(struct ib_pd *pd, struct mlx5_ib_qp *qp, -- 2.25.3