From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-vk1-f225.google.com (mail-vk1-f225.google.com [209.85.221.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C7B23DBD49 for ; Fri, 27 Mar 2026 09:26:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.225 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774603622; cv=none; b=ohsr73Q1PH80UQIb9avbUr5PNqt/dc0r/YWE9mzevUjFYtqum9wIxoZLBmKek6RJ48idOF+5vZWss4gm9fKbmHG9CkEX06sB9VeNHYBipqlFSAW3/VdNU5uLxwrkE7qT8cZBWjzJbOEoN4ZZK/gEqOWiXVRpAR/m8+lMQRj/P9E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774603622; c=relaxed/simple; bh=QlRSxZPlep2TEXujG7Q+X9as1JuV/bZuFev+UHkko4k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LWebeQ7L6snLQqevQQxpd8VOCWonvWsRxUlz7LDoZ14JX3UB+Rt9AUyfIveTlO79N5V/9YyEWzej/Drc8XXmVYAggr4qLZ08mBQPKDICl3Sxttmzb3NZnNmkRuNEuEfWo0GY4XmhtdN9sELau0bKXj7L2I8VeEl0qg3waNmz1iM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=UPEMCxbH; arc=none smtp.client-ip=209.85.221.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="UPEMCxbH" Received: by mail-vk1-f225.google.com with SMTP id 71dfb90a1353d-56d3fa1ea69so453180e0c.3 for ; Fri, 27 Mar 2026 02:26:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774603618; x=1775208418; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uDAifMkXnehEa87ZgXss+I8/a2DS6R67VaVYARmF8vg=; b=tKf8hUP6Oe1xhoruJ3LxaqHBGUwptiGtXdBPcnBqPS5aaxsbmga26LXtckOd1XRp8n XrF0B8SLlew6b5FEic/M58azzEc7Y9+TgRaZTIqMc7I4JNRip60e4ohhZt37bAFJ79mR I/l+aOW9vecBZMp1vSn4Ob2OvTSOPGSAK27xukh2PnE8Z6bsj2nqNFhefL5rn7gCBXsR x0IBe8m5Z1pnMsKFrO/VwcYcj5zrsSEfMm8U7R85xVDRJdCoCp7cBkTzmf8m8geDhH5E cn4Zi/2aNfDm2YUYjq90fr1jwLEn9MpdnVV9dQm62S9mt9z7uBE/AtSxuEURWXxcpft2 FtEA== X-Gm-Message-State: AOJu0YyoNY/XtgxwzjCvU0bFpHCi7BjYFj4jp+8GjVX13ymthpnPQ7Th HlX9DBZnP3loxlzg3Ji95MfkvSsmn4U64vN3EpfuNmJITsoFRpIECyBTxNAxGqJa/rWGUeitQOa 8FntSPWs5l6ImVe62Ipkn7sBqrkIT7sifIuIRY5HfYU/qCd92hivFBRMVllNWd7bQ4stwaeWpM3 c23ZAJxsbNcS2ns7sp3oCmewfQIepOnrQGBH/7JTNdr4Ap8WzKcgSGedV8Q4HD2AV5t93/kEJig BVZ1wjH1ArsDhHbwiXxuM5JbRgU X-Gm-Gg: ATEYQzy6yAfDd5O56of9yoiWpfAgd1tZfhbF4YgIGkwnUEYCpRKETYiITpsCFVcdGzw OlLUuGMRY9COpLW3i1hLKZwW8b7Nvk+83HsQ6T0MhJ6O01M5WwuUhme35kQwDXhQU4p5PBNkz+g bL9Q4r6kG0mHswE54XV+hgdEGA6c2CJXE/QfARCRxiflAU6OrV/jNA3jzkWaLIxC7znJ68bAdNo LQJ3xERkHbIwoyS9kAiHTW8GWw98Jopjvwti54UIEPAQkl+Yv2A/kIaqIJPSweoQz3ploPax69r hUhMX+FHugs4m7L9As25l1SOkWNPwNdM+teAGdKX7+UGzVyJjHZwBDFvehMkN2yfjqSNQ+kfx/H 1rFpQw2oenOCng/9qey9LSL4rv1Ga/QBmP5/mx+x5ZTqi7/g21BTCNiyzkOdLa9D8cY96SqJjUq dUfxKonsSJ9xyS5dpoYIpqhJlYSENEDOkG1ZEUxPDfQI5k93ucSQjvbyYVDkWGU9DXf+KM X-Received: by 2002:a05:6122:31a4:b0:56a:e0e2:69b3 with SMTP id 71dfb90a1353d-56d4a0d9af2mr615363e0c.0.1774603617647; Fri, 27 Mar 2026 02:26:57 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-25.dlp.protect.broadcom.com. [144.49.247.25]) by smtp-relay.gmail.com with ESMTPS id 71dfb90a1353d-56d44da82absm471718e0c.2.2026.03.27.02.26.56 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Mar 2026 02:26:57 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-yw1-f199.google.com with SMTP id 00721157ae682-798531a0f58so41584877b3.0 for ; Fri, 27 Mar 2026 02:26:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1774603616; x=1775208416; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uDAifMkXnehEa87ZgXss+I8/a2DS6R67VaVYARmF8vg=; b=UPEMCxbHh9EzyCWGpK1HArL7HCQLFmW6sfkjcDp3oB2ZELSPy3sXFEl3V/UuMjUpu/ 30bqoRzf7Bn5F54XoEr2TqqWpMpNk12dPjnc/nq5iMre13jCFV4eL0eAORL6S/Ct1kqX jZ8Y0HdlKNcGnHuxlHHxCqymM9Bxrg/Pa/7a0= X-Received: by 2002:a05:690c:60ca:b0:79a:dc28:fbf8 with SMTP id 00721157ae682-79bde0a0920mr15103557b3.55.1774603615844; Fri, 27 Mar 2026 02:26:55 -0700 (PDT) X-Received: by 2002:a05:690c:60ca:b0:79a:dc28:fbf8 with SMTP id 00721157ae682-79bde0a0920mr15103367b3.55.1774603615371; Fri, 27 Mar 2026 02:26:55 -0700 (PDT) Received: from dhcp-10-123-157-187.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id 00721157ae682-79b17e4a0absm25718307b3.22.2026.03.27.02.26.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Mar 2026 02:26:54 -0700 (PDT) From: Sriharsha Basavapatna To: leon@kernel.org, jgg@ziepe.ca Cc: linux-rdma@vger.kernel.org, andrew.gospodarek@broadcom.com, selvin.xavier@broadcom.com, kalesh-anakkur.purayil@broadcom.com, Sriharsha Basavapatna Subject: [PATCH rdma-next v2 1/8] RDMA/bnxt_re: Refactor bnxt_re_init_user_qp() Date: Fri, 27 Mar 2026 14:47:48 +0530 Message-ID: <20260327091755.47754-2-sriharsha.basavapatna@broadcom.com> X-Mailer: git-send-email 2.51.2.636.ga99f379adf In-Reply-To: <20260327091755.47754-1-sriharsha.basavapatna@broadcom.com> References: <20260327091755.47754-1-sriharsha.basavapatna@broadcom.com> Precedence: bulk X-Mailing-List: linux-rdma@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e The umem changes for CQ added a helper - bnxt_re_setup_sginfo(). Use the same helper for QP creation since we support only 4K pages for QP ring memory too. Add a new helper function bnxt_re_get_psn_bytes() to improve readability as this code will be updated in subsequent patches. Signed-off-by: Sriharsha Basavapatna Reviewed-by: Selvin Xavier --- drivers/infiniband/hw/bnxt_re/ib_verbs.c | 127 +++++++++++++---------- 1 file changed, 73 insertions(+), 54 deletions(-) diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c index e63780c78781..2c7b1cfb7b1e 100644 --- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c @@ -1136,34 +1136,64 @@ static int bnxt_re_setup_swqe_size(struct bnxt_re_qp *qp, return 0; } +static int bnxt_re_setup_sginfo(struct bnxt_re_dev *rdev, + struct ib_umem *umem, + struct bnxt_qplib_sg_info *sginfo) +{ + unsigned long page_size; + + if (!umem) + return -EINVAL; + + page_size = ib_umem_find_best_pgsz(umem, SZ_4K, 0); + if (!page_size || page_size != SZ_4K) + return -EINVAL; + + sginfo->umem = umem; + sginfo->npages = ib_umem_num_dma_blocks(umem, page_size); + sginfo->pgsize = page_size; + sginfo->pgshft = __builtin_ctz(page_size); + return 0; +} + +static int bnxt_re_get_psn_bytes(struct bnxt_re_dev *rdev, + struct bnxt_re_ucontext *cntx, + struct bnxt_qplib_qp *qplib_qp, + struct bnxt_re_qp_req *ureq) +{ + int psn_sz, psn_nume; + + psn_sz = bnxt_qplib_is_chip_gen_p5_p7(rdev->chip_ctx) ? + sizeof(struct sq_psn_search_ext) : + sizeof(struct sq_psn_search); + if (cntx && bnxt_re_is_var_size_supported(rdev, cntx)) { + psn_nume = ureq->sq_slots; + } else { + psn_nume = (qplib_qp->wqe_mode == BNXT_QPLIB_WQE_MODE_STATIC) ? + qplib_qp->sq.max_wqe : ((qplib_qp->sq.max_wqe * qplib_qp->sq.wqe_size) / + sizeof(struct bnxt_qplib_sge)); + } + if (_is_host_msn_table(rdev->qplib_res.dattr->dev_cap_flags2)) + psn_nume = roundup_pow_of_two(psn_nume); + + return psn_nume * psn_sz; +} + static int bnxt_re_init_user_qp(struct bnxt_re_dev *rdev, struct bnxt_re_pd *pd, struct bnxt_re_qp *qp, struct bnxt_re_ucontext *cntx, struct bnxt_re_qp_req *ureq) { struct bnxt_qplib_qp *qplib_qp; - int bytes = 0, psn_sz; struct ib_umem *umem; - int psn_nume; + int bytes; + int rc; qplib_qp = &qp->qplib_qp; bytes = (qplib_qp->sq.max_wqe * qplib_qp->sq.wqe_size); /* Consider mapping PSN search memory only for RC QPs. */ - if (qplib_qp->type == CMDQ_CREATE_QP_TYPE_RC) { - psn_sz = bnxt_qplib_is_chip_gen_p5_p7(rdev->chip_ctx) ? - sizeof(struct sq_psn_search_ext) : - sizeof(struct sq_psn_search); - if (cntx && bnxt_re_is_var_size_supported(rdev, cntx)) { - psn_nume = ureq->sq_slots; - } else { - psn_nume = (qplib_qp->wqe_mode == BNXT_QPLIB_WQE_MODE_STATIC) ? - qplib_qp->sq.max_wqe : ((qplib_qp->sq.max_wqe * qplib_qp->sq.wqe_size) / - sizeof(struct bnxt_qplib_sge)); - } - if (_is_host_msn_table(rdev->qplib_res.dattr->dev_cap_flags2)) - psn_nume = roundup_pow_of_two(psn_nume); - bytes += (psn_nume * psn_sz); - } + if (qplib_qp->type == CMDQ_CREATE_QP_TYPE_RC) + bytes += bnxt_re_get_psn_bytes(rdev, cntx, qplib_qp, ureq); bytes = PAGE_ALIGN(bytes); umem = ib_umem_get(&rdev->ibdev, ureq->qpsva, bytes, @@ -1172,33 +1202,42 @@ static int bnxt_re_init_user_qp(struct bnxt_re_dev *rdev, struct bnxt_re_pd *pd, return PTR_ERR(umem); qp->sumem = umem; - qplib_qp->sq.sg_info.umem = umem; - qplib_qp->sq.sg_info.pgsize = PAGE_SIZE; - qplib_qp->sq.sg_info.pgshft = PAGE_SHIFT; - qplib_qp->qp_handle = ureq->qp_handle; + rc = bnxt_re_setup_sginfo(rdev, qp->sumem, &qplib_qp->sq.sg_info); + if (rc) + goto fail; + + if (qp->qplib_qp.srq) + goto done; - if (!qp->qplib_qp.srq) { - bytes = (qplib_qp->rq.max_wqe * qplib_qp->rq.wqe_size); - bytes = PAGE_ALIGN(bytes); - umem = ib_umem_get(&rdev->ibdev, ureq->qprva, bytes, - IB_ACCESS_LOCAL_WRITE); - if (IS_ERR(umem)) - goto rqfail; - qp->rumem = umem; - qplib_qp->rq.sg_info.umem = umem; - qplib_qp->rq.sg_info.pgsize = PAGE_SIZE; - qplib_qp->rq.sg_info.pgshft = PAGE_SHIFT; + bytes = (qplib_qp->rq.max_wqe * qplib_qp->rq.wqe_size); + bytes = PAGE_ALIGN(bytes); + umem = ib_umem_get(&rdev->ibdev, ureq->qprva, bytes, + IB_ACCESS_LOCAL_WRITE); + if (IS_ERR(umem)) { + rc = PTR_ERR(umem); + goto fail; } + qp->rumem = umem; + rc = bnxt_re_setup_sginfo(rdev, qp->rumem, &qplib_qp->rq.sg_info); + if (rc) + goto rqfail; + +done: + qplib_qp->qp_handle = ureq->qp_handle; qplib_qp->dpi = &cntx->dpi; qplib_qp->is_user = true; return 0; + rqfail: + ib_umem_release(qp->rumem); + qp->rumem = NULL; + memset(&qplib_qp->rq.sg_info, 0, sizeof(qplib_qp->rq.sg_info)); +fail: ib_umem_release(qp->sumem); qp->sumem = NULL; memset(&qplib_qp->sq.sg_info, 0, sizeof(qplib_qp->sq.sg_info)); - - return PTR_ERR(umem); + return rc; } static struct bnxt_re_ah *bnxt_re_create_shadow_qp_ah @@ -3345,26 +3384,6 @@ int bnxt_re_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata) return ib_respond_empty_udata(udata); } -static int bnxt_re_setup_sginfo(struct bnxt_re_dev *rdev, - struct ib_umem *umem, - struct bnxt_qplib_sg_info *sginfo) -{ - unsigned long page_size; - - if (!umem) - return -EINVAL; - - page_size = ib_umem_find_best_pgsz(umem, SZ_4K, 0); - if (!page_size || page_size != SZ_4K) - return -EINVAL; - - sginfo->umem = umem; - sginfo->npages = ib_umem_num_dma_blocks(umem, page_size); - sginfo->pgsize = page_size; - sginfo->pgshft = __builtin_ctz(page_size); - return 0; -} - int bnxt_re_create_user_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr, struct uverbs_attr_bundle *attrs) { -- 2.51.2.636.ga99f379adf