From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 06FF03DDDD7 for ; Mon, 4 May 2026 13:57:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777903076; cv=none; b=R+ENFJ19Q/2DkEIbEiMqj7ySJ38Sc6MtZdS1Z7CDg+fKNRiCb+dKiVtHFOFS5xd7p37+UrN25JzZYJqWeUfDSB1NZc8OhTPJsGFN0dIMom0LBYSyL8gPn7SFk6ENyw43txkkRP1moKFwCDiNDUXE0Ya+Z/WkkXcTS4zEKtf5MgM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777903076; c=relaxed/simple; bh=+8R7aaMMa7pWDBJg3jNABtAT06FpnkwLiglCp/tfUZc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Kb+nFTUN1f5rfpl/0CtiTAWvJcc5Mi1ksn6zzb/egTn+CNVflGFfAwnMvrtfU1FSqU6BdHtZ15wevMD9QxrVeZcf0OlgQqb2oos4ltHzsDkeoof0yvZ98GWpJEWBlTZpXYgCT81lr4qX4aVyk9AVcTethfI9+eV91rOdw28XhVI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=resnulli.us; spf=none smtp.mailfrom=resnulli.us; dkim=pass (2048-bit key) header.d=resnulli-us.20251104.gappssmtp.com header.i=@resnulli-us.20251104.gappssmtp.com header.b=cjPDddM+; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=resnulli.us Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=resnulli.us Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=resnulli-us.20251104.gappssmtp.com header.i=@resnulli-us.20251104.gappssmtp.com header.b="cjPDddM+" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-48d102471a4so7579725e9.2 for ; Mon, 04 May 2026 06:57:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20251104.gappssmtp.com; s=20251104; t=1777903073; x=1778507873; 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=KM8J3dwDrt2LUcO6M6DOcNvFtMPeFBMeHtYnSOecjXU=; b=cjPDddM+zHA74gKRkI1K6P3tTRe8bwQ44OQEoVhFmNb1e6GvsMS3uwUm0pYXkJTMee MRMNDaVp8qwZjrWMr1xJZQ3unb5HCHB00do+KJ04BbKM412Eo2rh+viNvk4npx4LG5l7 +tiwx2IUKElQWRrdeT7uRcwpvoEqWYLxtMYmeC1cRnGuH9SaQ07B0XmmTZLFsWC0aV5C gzdCR13G7Zzr3kbFIWm8JooLHG54OzfjU7k0Hhhp3vgDW0tU9F4vop3tgeWsBF89ADDp f6qaeJfEDBD/wTjm1Ih4dnb3+PYVfyD0ySzCYQ57ZX5O7UATvKMTKYerxTZ2gKDHnAgY KP9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777903073; x=1778507873; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=KM8J3dwDrt2LUcO6M6DOcNvFtMPeFBMeHtYnSOecjXU=; b=b2Ot0zwFx5avd6PDLxJ2L1b+JQ0Fi10MY+rn+2Gixrl1Ht34OQfpLKjffE6lYudddI dSURqlJgsymKzGrRRbT9aplkdFZWeVbJ9E8RQbgpJqIZEcMl4M1N3ZsTc8QEEJqPaA4p NGz/eLTLU9nnQ21YxqpFWbd2K3Q8zrTEpQYEwJdauUzdCMPM+AnKXzsnQ0mKCJuxUQxt nlwunCVq7vu4towo+CgsFZZhxYrDf20Bj8Xj+AwsIOnvcSwv2bHbU2F7nKexLSlgvZNt 5fr1gO8nrr0s54GvuRLRFs3WAW1LsObubS4qnN1+p+OniTiuxpL74iTYxehBO6+cmJiA QfTg== X-Gm-Message-State: AOJu0YxQfbHKTShOKcigxlTyj3Z7ycOYA5wexveKKBFgO2kv7M6dKVq+ WJgqid5r1rHgvDa/Nun2SBrhZu/MhP6VZmtM9Zchuw0ZV3eHIp/KwDS1KhJMjdraCbbRM4UZlgK wxTbJtYM= X-Gm-Gg: AeBDietvubZO5Z/Stgy38BvMrfuk8mVir9k47Qtk2XRB/DY8ao/UBIlw7o/e7lOZsh9 PVno2Ppf1TIJ6T/HkQNo08EJ6bP9hWtsueU1gQ0ewq7dI2Dagx+SMrdoMuGVuzGA9DSOnUMIa7j oKf03sGJwigvAjzWXr2UTJl/ExLi5SVPF5ZuPJ+tXNrdRNVlKzj/jgDl8npsO+yRylt2MWPuWJ/ Po8aSivUN4eDdFUoxtzAtg1hlgXzU0TFUYsCMOi9u4xTQqDQVCiedPnuH0y11mnHc1dJJLPUFqM ERAXNUvZv8dxN4qA0Pb+9z4qHPmHayAgtpKsvRNgEFnJD/C8of4iAQByeRgnkpFYFJfHsPEdhgt Bsmb2Uhkz21uYcjJ4FFx/2/tcNuRHAqQ/KdBdiVEepR6KUyb9BCIi3Qi8Igym/5c29nQzncVlIc MvnqQjOLWabF23P3wapStRjvTO X-Received: by 2002:a05:600c:154b:b0:488:936a:6220 with SMTP id 5b1f17b1804b1-48a988a705dmr176896865e9.21.1777903073501; Mon, 04 May 2026 06:57:53 -0700 (PDT) Received: from localhost ([85.163.81.98]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48a8fee4f79sm77805805e9.20.2026.05.04.06.57.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 06:57:52 -0700 (PDT) From: Jiri Pirko To: linux-rdma@vger.kernel.org Cc: jgg@ziepe.ca, leon@kernel.org, mrgolin@amazon.com, gal.pressman@linux.dev, sleybo@amazon.com, parav@nvidia.com, mbloch@nvidia.com, yanjun.zhu@linux.dev, marco.crivellari@suse.com, roman.gushchin@linux.dev, phaddad@nvidia.com, lirongqing@baidu.com, ynachum@amazon.com, huangjunxian6@hisilicon.com, kalesh-anakkur.purayil@broadcom.com, ohartoov@nvidia.com, michaelgur@nvidia.com, shayd@nvidia.com, edwards@nvidia.com, sriharsha.basavapatna@broadcom.com, andrew.gospodarek@broadcom.com, selvin.xavier@broadcom.com Subject: [PATCH rdma-next v3 11/17] RDMA/mlx4: Use ib_umem_get_cq_buf() for user CQ buffer Date: Mon, 4 May 2026 15:57:25 +0200 Message-ID: <20260504135731.2345383-12-jiri@resnulli.us> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260504135731.2345383-1-jiri@resnulli.us> References: <20260504135731.2345383-1-jiri@resnulli.us> Precedence: bulk X-Mailing-List: linux-rdma@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Jiri Pirko Pin the user CQ buffer with ib_umem_get_cq_buf() and take ownership of the umem in the driver; fall back to ib_umem_get_va() for the legacy UHW VA path. Apply the same ownership pattern to the resize path. Signed-off-by: Jiri Pirko --- v2->v3: - used ib_umem_get_cq_buf() to get umem, with ib_umem_get_va() as the legacy UHW VA fallback; stored in new struct mlx4_ib_cq field cq->umem - replaced ib_umem_release_non_listed() with ib_umem_release() - added release to mlx4_ib_destroy_cq(), the create error path and the resize error path v1->v2: - rebase on top of Leon's fix --- drivers/infiniband/hw/mlx4/cq.c | 50 +++++++++++++++++----------- drivers/infiniband/hw/mlx4/mlx4_ib.h | 1 + 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/drivers/infiniband/hw/mlx4/cq.c b/drivers/infiniband/hw/mlx4/cq.c index 381c7dfa4667..86557b413ca5 100644 --- a/drivers/infiniband/hw/mlx4/cq.c +++ b/drivers/infiniband/hw/mlx4/cq.c @@ -172,32 +172,40 @@ int mlx4_ib_create_user_cq(struct ib_cq *ibcq, if (err) goto err_cq; - if (ibcq->umem && - (dev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_SW_CQ_INIT)) - return -EOPNOTSUPP; - - buf_addr = (void *)(unsigned long)ucmd.buf_addr; - - if (!ibcq->umem) - ibcq->umem = ib_umem_get_va(&dev->ib_dev, ucmd.buf_addr, - entries * cqe_size, - IB_ACCESS_LOCAL_WRITE); - if (IS_ERR(ibcq->umem)) { - err = PTR_ERR(ibcq->umem); + cq->umem = ib_umem_get_cq_buf(&dev->ib_dev, udata, entries * cqe_size, + IB_ACCESS_LOCAL_WRITE); + if (IS_ERR(cq->umem)) { + err = PTR_ERR(cq->umem); goto err_cq; } + if (cq->umem) { + if (dev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_SW_CQ_INIT) { + err = -EOPNOTSUPP; + goto err_umem; + } + } else { + cq->umem = ib_umem_get_va(&dev->ib_dev, ucmd.buf_addr, + entries * cqe_size, + IB_ACCESS_LOCAL_WRITE); + if (IS_ERR(cq->umem)) { + err = PTR_ERR(cq->umem); + goto err_cq; + } + } - shift = mlx4_ib_umem_calc_optimal_mtt_size(cq->ibcq.umem, 0, &n); + buf_addr = (void *)(unsigned long)ucmd.buf_addr; + + shift = mlx4_ib_umem_calc_optimal_mtt_size(cq->umem, 0, &n); if (shift < 0) { err = shift; - goto err_cq; + goto err_umem; } err = mlx4_mtt_init(dev->dev, n, shift, &cq->buf.mtt); if (err) - goto err_cq; + goto err_umem; - err = mlx4_ib_umem_write_mtt(dev, &cq->buf.mtt, cq->ibcq.umem); + err = mlx4_ib_umem_write_mtt(dev, &cq->buf.mtt, cq->umem); if (err) goto err_mtt; @@ -234,7 +242,9 @@ int mlx4_ib_create_user_cq(struct ib_cq *ibcq, err_mtt: mlx4_mtt_cleanup(dev->dev, &cq->buf.mtt); - /* UMEM is released by ib_core */ + +err_umem: + ib_umem_release(cq->umem); err_cq: return err; @@ -471,8 +481,8 @@ int mlx4_ib_resize_cq(struct ib_cq *ibcq, unsigned int entries, if (ibcq->uobject) { cq->buf = cq->resize_buf->buf; cq->ibcq.cqe = cq->resize_buf->cqe; - ib_umem_release(cq->ibcq.umem); - cq->ibcq.umem = cq->resize_umem; + ib_umem_release(cq->umem); + cq->umem = cq->resize_umem; kfree(cq->resize_buf); cq->resize_buf = NULL; @@ -532,7 +542,7 @@ int mlx4_ib_destroy_cq(struct ib_cq *cq, struct ib_udata *udata) struct mlx4_ib_ucontext, ibucontext), &mcq->db); - /* UMEM is released by ib_core */ + ib_umem_release(mcq->umem); } else { mlx4_ib_free_cq_buf(dev, &mcq->buf, cq->cqe); mlx4_db_free(dev->dev, &mcq->db); diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h index 5a799d6df93e..598954dd0613 100644 --- a/drivers/infiniband/hw/mlx4/mlx4_ib.h +++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h @@ -121,6 +121,7 @@ struct mlx4_ib_cq { struct mlx4_db db; spinlock_t lock; struct mutex resize_mutex; + struct ib_umem *umem; struct ib_umem *resize_umem; /* List of qps that it serves.*/ struct list_head send_qp_list; -- 2.53.0