Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp2901080pxv; Sun, 18 Jul 2021 05:02:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxAaBCWfqEkqq3VxfLKgd6+9T2ClPHMhlQZkSLBqXXdpt/Nm8xilguNBHxLOOCh5l0Kkngn X-Received: by 2002:a02:93a7:: with SMTP id z36mr16692819jah.112.1626609753839; Sun, 18 Jul 2021 05:02:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626609753; cv=none; d=google.com; s=arc-20160816; b=LS0eQRrfA3rQl1kq7RAYVy4xR4qaXwZJw8Bbi2u0jYseFhxPc1x0nJQjXehfsFlPKQ S9cV/zjuq11DsjKZZj3/CCghwCA3WgB+G9oJnrlW69igK3QMJoryOjQ/mkRlyuEb11Yc aQL1sw5NvggUwiXDbFrKB72ojLSLJK7kEw2n2s5e2cRh+hQHK+xtBeaxLCwtHw7241zz UbnZJtTkj/qOt+wJMaK5vwidqHwyeD0MI9QYmzRGO6NB2JUptggYuJG9kr5r2LkQpJDO rGOMFp4vW1c7TcqsCOF5eyQZtRwbBtXCBy+c7NexcAfx5locmbbeBj8h4XvWqWQ2E4Zp V9hg== 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=ichiu/mRs5qkqRmUYGgbKIo+nFSAg/PuPFYuxeorfLI=; b=x5w4vJrmYVMyERwir7QnyPQGFmiOXrG+gtvGEjud2K7tAcmxxqS+tAqnlwvpQNRwfF 0btaU+yMWi0CqbPtbaYwSHWA/NVDbtZfZx3oZGuloI+0nZ7rrfcCAwdEcvJvgFU+fB4H FULtMbv+J7o568ZGFtmLUrdWzYeSYy1oJdRcPlX4ppH+f1ByH4aqunZSa+tAylH5WsHP /5yCV/S+hgw2X6tZcXsfCIXIr0oHFS/QFqu96aOg7IeMIFliQFDk7zvjmheLzjADqnNu T+Aq//cm5Qf49tgdQGueSJM4OBg6pOY8XYovuv6RO79NaANGHb+j7knckkswExhf+x0X sENQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=q7b7uYt3; 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 i13si18244053iov.29.2021.07.18.05.02.22; Sun, 18 Jul 2021 05:02:33 -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=q7b7uYt3; 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 S233613AbhGRME1 (ORCPT + 99 others); Sun, 18 Jul 2021 08:04:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:44118 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233610AbhGRMEW (ORCPT ); Sun, 18 Jul 2021 08:04:22 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A2B7B610D1; Sun, 18 Jul 2021 12:01:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1626609684; bh=1T2Lt3llebp8CxVs54EHp5DqZdBD5AMfGku58BYeKo0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q7b7uYt34XGEG9ScFw7J3gIUYp1731YJZyO0nT21bAkc72DdrpZZW2f84NKR1jVFR PXHFp3a198lCzn9rkbuWSK/E9ewYoWJAxTPGcLiOjFQA2ELW1T//mhQ2vjDcD25QX4 Rp6xY53K/usdHlB9AW8ln+bFuR8403XSbx+cxyNu6vRsnB8edkilEtIpolpNVEZb4K JCh7E3NShuzS4kLnvteFuk1FPwNCACQ+GwRtFwbOGD8bmpOd5ijZqJyXR2B+3iu4iB spKcyQaX3qXWi1PoTWdkPkFkLtUlVRXi6c+GFRQ6E3usS+ViWwxbCLinZEBideUPhW dKVQ4qi/f3fMg== From: Leon Romanovsky To: Doug Ledford , Jason Gunthorpe Cc: Leon Romanovsky , Adit Ranadive , Ariel Elior , Bernard Metzler , Christian Benvenuti , Dennis Dalessandro , Gal Pressman , linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, Michal Kalderon , Mike Marciniszyn , Mustafa Ismail , Naresh Kumar PBS , Nelson Escobar , Potnuri Bharat Teja , Selvin Xavier , Shiraz Saleem , Steve Wise , VMware PV-Drivers , Weihang Li , Wenpeng Liang , Yishai Hadas , Zhu Yanjun Subject: [PATCH rdma-next 7/9] RDMA/rdmavt: Decouple QP and SGE lists allocations Date: Sun, 18 Jul 2021 15:00:57 +0300 Message-Id: <9769d1288bb1b132ad33c6dcff648b91a6bb1d2a.1626609283.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 rdmavt QP has fields that are both needed for the control and data path. Such mixed declaration caused to the very specific allocation flow with kzalloc_node and SGE list embedded into the struct rvt_qp. This patch separates QP creation to two: regular memory allocation for the control path and specific code for the SGE list, while the access to the later is performed through derefenced pointer. Such pointer and its context are expected to be in the cache, so performance difference is expected to be negligible, if any exists. Signed-off-by: Leon Romanovsky --- drivers/infiniband/sw/rdmavt/qp.c | 13 ++++++++----- include/rdma/rdmavt_qp.h | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c index e9f3d356b361..14900860985c 100644 --- a/drivers/infiniband/sw/rdmavt/qp.c +++ b/drivers/infiniband/sw/rdmavt/qp.c @@ -1078,7 +1078,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd, int err; struct rvt_swqe *swq = NULL; size_t sz; - size_t sg_list_sz; + size_t sg_list_sz = 0; struct ib_qp *ret = ERR_PTR(-ENOMEM); struct rvt_dev_info *rdi = ib_to_rvt(ibpd->device); void *priv = NULL; @@ -1126,8 +1126,6 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd, if (!swq) return ERR_PTR(-ENOMEM); - sz = sizeof(*qp); - sg_list_sz = 0; if (init_attr->srq) { struct rvt_srq *srq = ibsrq_to_rvtsrq(init_attr->srq); @@ -1137,10 +1135,13 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd, } else if (init_attr->cap.max_recv_sge > 1) sg_list_sz = sizeof(*qp->r_sg_list) * (init_attr->cap.max_recv_sge - 1); - qp = kzalloc_node(sz + sg_list_sz, GFP_KERNEL, - rdi->dparms.node); + qp = kzalloc_node(sizeof(*qp), GFP_KERNEL, rdi->dparms.node); if (!qp) goto bail_swq; + qp->r_sg_list = + kzalloc_node(sg_list_sz, GFP_KERNEL, rdi->dparms.node); + if (!qp->r_sg_list) + goto bail_qp; qp->allowed_ops = get_allowed_ops(init_attr->qp_type); RCU_INIT_POINTER(qp->next, NULL); @@ -1328,6 +1329,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd, bail_qp: kfree(qp->s_ack_queue); + kfree(qp->r_sg_list); kfree(qp); bail_swq: @@ -1762,6 +1764,7 @@ int rvt_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata) kvfree(qp->r_rq.kwq); rdi->driver_f.qp_priv_free(rdi, qp); kfree(qp->s_ack_queue); + kfree(qp->r_sg_list); rdma_destroy_ah_attr(&qp->remote_ah_attr); rdma_destroy_ah_attr(&qp->alt_ah_attr); free_ud_wq_attr(qp); diff --git a/include/rdma/rdmavt_qp.h b/include/rdma/rdmavt_qp.h index 8275954f5ce6..2e58d5e6ac0e 100644 --- a/include/rdma/rdmavt_qp.h +++ b/include/rdma/rdmavt_qp.h @@ -444,7 +444,7 @@ struct rvt_qp { /* * This sge list MUST be last. Do not add anything below here. */ - struct rvt_sge r_sg_list[] /* verified SGEs */ + struct rvt_sge *r_sg_list /* verified SGEs */ ____cacheline_aligned_in_smp; }; -- 2.31.1