public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH rdma-next 00/50] RDMA: Ensure CQ UMEMs are managed by ib_core
@ 2026-02-13 10:57 Leon Romanovsky
  2026-02-13 10:57 ` [PATCH rdma-next 01/50] RDMA: Move DMA block iterator logic into dedicated files Leon Romanovsky
                   ` (51 more replies)
  0 siblings, 52 replies; 73+ messages in thread
From: Leon Romanovsky @ 2026-02-13 10:57 UTC (permalink / raw)
  To: Jason Gunthorpe, Leon Romanovsky, Selvin Xavier, Kalesh AP,
	Potnuri Bharat Teja, Michael Margolin, Gal Pressman,
	Yossi Leybovich, Cheng Xu, Kai Shen, Chengchang Tang,
	Junxian Huang, Abhijit Gangurde, Allen Hubbe, Krzysztof Czurylo,
	Tatyana Nikolova, Long Li, Konstantin Taranov, Yishai Hadas,
	Michal Kalderon, Bryan Tan, Vishnu Dasa,
	Broadcom internal kernel review list, Christian Benvenuti,
	Nelson Escobar, Dennis Dalessandro, Bernard Metzler, Zhu Yanjun
  Cc: linux-kernel, linux-rdma, linux-hyperv

Unify CQ UMEM creation, resize and release in ib_core to avoid the need
for complex driver-side handling. This lets us rely on the internal
reference counters of the relevant ib_XXX objects to manage UMEM
lifetime safely and consistently.

The resize cleanup made it clear that most drivers never handled this
path correctly, and there's a good chance the functionality was never
actually used. The most common issue was relying on the cq->resize_umem
pointer to detect races with other CQ commands, without clearing it on
errors and while ignoring proper locking for other CQ operations.

Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
Leon Romanovsky (50):
      RDMA: Move DMA block iterator logic into dedicated files
      RDMA/umem: Allow including ib_umem header from any location
      RDMA/umem: Remove unnecessary includes and defines from ib_umem header
      RDMA/core: Promote UMEM to a core component
      RDMA/core: Manage CQ umem in core code
      RDMA/efa: Rely on CPU address in create‑QP
      RDMA/core: Prepare create CQ path for API unification
      RDMA/core: Reject zero CQE count
      RDMA/efa: Remove check for zero CQE count
      RDMA/mlx5: Save 4 bytes in CQ structure
      RDMA/mlx5: Provide a modern CQ creation interface
      RDMA/mlx4: Inline mlx4_ib_get_cq_umem into callers
      RDMA/mlx4: Introduce a modern CQ creation interface
      RDMA/mlx4: Remove unused create_flags field from CQ structure
      RDMA/bnxt_re: Convert to modern CQ interface
      RDMA/cxgb4: Separate kernel and user CQ creation paths
      RDMA/mthca: Split user and kernel CQ creation paths
      RDMA/erdma: Separate user and kernel CQ creation paths
      RDMA/ionic: Split user and kernel CQ creation paths
      RDMA/qedr: Convert to modern CQ interface
      RDMA/vmw_pvrdma: Provide a modern CQ creation interface
      RDMA/ocrdma: Split user and kernel CQ creation paths
      RDMA/irdma: Split user and kernel CQ creation paths
      RDMA/usnic: Provide a modern CQ creation interface
      RDMA/mana: Provide a modern CQ creation interface
      RDMA/erdma: Separate user and kernel CQ creation paths
      RDMA/rdmavt: Split user and kernel CQ creation paths
      RDMA/siw: Split user and kernel CQ creation paths
      RDMA/rxe: Split user and kernel CQ creation paths
      RDMA/core: Remove legacy CQ creation fallback path
      RDMA/core: Remove unused ib_resize_cq() implementation
      RDMA: Clarify that CQ resize is a user‑space verb
      RDMA/bnxt_re: Drop support for resizing kernel CQs
      RDMA/irdma: Remove resize support for kernel CQs
      RDMA/mlx4: Remove support for kernel CQ resize
      RDMA/mlx5: Remove support for resizing kernel CQs
      RDMA/mthca: Remove resize support for kernel CQs
      RDMA/rdmavt: Remove resize support for kernel CQs
      RDMA/rxe: Remove unused kernel‑side CQ resize support
      RDMA: Properly propagate the number of CQEs as unsigned int
      RDMA/core: Generalize CQ resize locking
      RDMA/bnxt_re: Complete CQ resize in a single step
      RDMA/bnxt_re: Rely on common resize‑CQ locking
      RDMA/bnxt_re: Reduce CQ memory footprint
      RDMA/mlx4: Use generic resize-CQ lock
      RDMA/mlx4: Use on‑stack variables instead of storing them in the CQ object
      RDMA/mlx5: Use generic resize-CQ lock
      RDMA/mlx5: Select resize‑CQ callback based on device capabilities
      RDMA/mlx5: Reduce CQ memory footprint
      RDMA/mthca: Use generic resize-CQ lock

 drivers/infiniband/core/Makefile                |   6 +-
 drivers/infiniband/core/cq.c                    |   3 +
 drivers/infiniband/core/device.c                |   4 +-
 drivers/infiniband/core/iter.c                  |  43 +++
 drivers/infiniband/core/umem.c                  |   2 +-
 drivers/infiniband/core/uverbs_cmd.c            |  18 +-
 drivers/infiniband/core/uverbs_std_types_cq.c   |  35 ++-
 drivers/infiniband/core/verbs.c                 |  61 +---
 drivers/infiniband/hw/bnxt_re/ib_verbs.c        | 246 ++++++++-------
 drivers/infiniband/hw/bnxt_re/ib_verbs.h        |   9 +-
 drivers/infiniband/hw/bnxt_re/main.c            |   3 +-
 drivers/infiniband/hw/bnxt_re/qplib_res.c       |   2 +-
 drivers/infiniband/hw/cxgb4/cq.c                | 218 +++++++++----
 drivers/infiniband/hw/cxgb4/iw_cxgb4.h          |   2 +
 drivers/infiniband/hw/cxgb4/mem.c               |   2 +-
 drivers/infiniband/hw/cxgb4/provider.c          |   1 +
 drivers/infiniband/hw/efa/efa.h                 |   6 +-
 drivers/infiniband/hw/efa/efa_main.c            |   3 +-
 drivers/infiniband/hw/efa/efa_verbs.c           |  44 ++-
 drivers/infiniband/hw/erdma/erdma_main.c        |   1 +
 drivers/infiniband/hw/erdma/erdma_verbs.c       |  99 ++++--
 drivers/infiniband/hw/erdma/erdma_verbs.h       |   2 +
 drivers/infiniband/hw/hns/hns_roce_alloc.c      |   2 +-
 drivers/infiniband/hw/hns/hns_roce_cq.c         | 103 ++++--
 drivers/infiniband/hw/hns/hns_roce_debugfs.c    |   1 -
 drivers/infiniband/hw/hns/hns_roce_device.h     |   3 +-
 drivers/infiniband/hw/hns/hns_roce_main.c       |   1 +
 drivers/infiniband/hw/ionic/ionic_controlpath.c |  88 ++++--
 drivers/infiniband/hw/ionic/ionic_ibdev.c       |   1 +
 drivers/infiniband/hw/ionic/ionic_ibdev.h       |   4 +-
 drivers/infiniband/hw/irdma/main.h              |   2 +-
 drivers/infiniband/hw/irdma/verbs.c             | 402 +++++++++++++-----------
 drivers/infiniband/hw/mana/cq.c                 | 128 +++++---
 drivers/infiniband/hw/mana/device.c             |   1 +
 drivers/infiniband/hw/mana/main.c               |  25 +-
 drivers/infiniband/hw/mana/mana_ib.h            |   6 +-
 drivers/infiniband/hw/mana/qp.c                 |  42 ++-
 drivers/infiniband/hw/mana/wq.c                 |  14 +-
 drivers/infiniband/hw/mlx4/cq.c                 | 401 ++++++++---------------
 drivers/infiniband/hw/mlx4/main.c               |   3 +-
 drivers/infiniband/hw/mlx4/mlx4_ib.h            |  10 +-
 drivers/infiniband/hw/mlx4/mr.c                 |   1 +
 drivers/infiniband/hw/mlx5/cq.c                 | 383 ++++++++--------------
 drivers/infiniband/hw/mlx5/main.c               |   9 +-
 drivers/infiniband/hw/mlx5/mem.c                |   1 +
 drivers/infiniband/hw/mlx5/mlx5_ib.h            |  12 +-
 drivers/infiniband/hw/mlx5/qp.c                 |   2 +-
 drivers/infiniband/hw/mlx5/umr.c                |   1 +
 drivers/infiniband/hw/mthca/mthca_cq.c          |   1 -
 drivers/infiniband/hw/mthca/mthca_provider.c    | 193 ++++--------
 drivers/infiniband/hw/mthca/mthca_provider.h    |   1 -
 drivers/infiniband/hw/ocrdma/ocrdma_main.c      |   3 +-
 drivers/infiniband/hw/ocrdma/ocrdma_verbs.c     |  70 +++--
 drivers/infiniband/hw/ocrdma/ocrdma_verbs.h     |   6 +-
 drivers/infiniband/hw/qedr/main.c               |   1 +
 drivers/infiniband/hw/qedr/verbs.c              | 325 +++++++++++--------
 drivers/infiniband/hw/qedr/verbs.h              |   2 +
 drivers/infiniband/hw/usnic/usnic_ib_main.c     |   2 +-
 drivers/infiniband/hw/usnic/usnic_ib_verbs.c    |   6 +-
 drivers/infiniband/hw/usnic/usnic_ib_verbs.h    |   4 +-
 drivers/infiniband/hw/vmw_pvrdma/pvrdma.h       |   2 +-
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c    | 171 ++++++----
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c  |   1 +
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h |   3 +
 drivers/infiniband/sw/rdmavt/cq.c               | 224 +++++++------
 drivers/infiniband/sw/rdmavt/cq.h               |   4 +-
 drivers/infiniband/sw/rdmavt/vt.c               |   3 +-
 drivers/infiniband/sw/rxe/rxe_cq.c              |  31 --
 drivers/infiniband/sw/rxe/rxe_loc.h             |   3 -
 drivers/infiniband/sw/rxe/rxe_verbs.c           | 115 +++----
 drivers/infiniband/sw/siw/siw_main.c            |   1 +
 drivers/infiniband/sw/siw/siw_verbs.c           | 111 +++++--
 drivers/infiniband/sw/siw/siw_verbs.h           |   2 +
 include/rdma/ib_umem.h                          |  36 +--
 include/rdma/ib_verbs.h                         |  67 +---
 include/rdma/iter.h                             |  88 ++++++
 76 files changed, 2085 insertions(+), 1847 deletions(-)
---
base-commit: 42e3aac65c1c9eb36cdee0d8312a326196e0822f
change-id: 20260203-refactor-umem-e5b4277e41b4

Best regards,
--  
Leon Romanovsky <leonro@nvidia.com>


^ permalink raw reply	[flat|nested] 73+ messages in thread

end of thread, other threads:[~2026-02-26  6:54 UTC | newest]

Thread overview: 73+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-13 10:57 [PATCH rdma-next 00/50] RDMA: Ensure CQ UMEMs are managed by ib_core Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 01/50] RDMA: Move DMA block iterator logic into dedicated files Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 02/50] RDMA/umem: Allow including ib_umem header from any location Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 03/50] RDMA/umem: Remove unnecessary includes and defines from ib_umem header Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 04/50] RDMA/core: Promote UMEM to a core component Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 05/50] RDMA/core: Manage CQ umem in core code Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 06/50] RDMA/efa: Rely on CPU address in create‑QP Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 07/50] RDMA/core: Prepare create CQ path for API unification Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 08/50] RDMA/core: Reject zero CQE count Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 09/50] RDMA/efa: Remove check for " Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 10/50] RDMA/mlx5: Save 4 bytes in CQ structure Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 11/50] RDMA/mlx5: Provide a modern CQ creation interface Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 12/50] RDMA/mlx4: Inline mlx4_ib_get_cq_umem into callers Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 13/50] RDMA/mlx4: Introduce a modern CQ creation interface Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 14/50] RDMA/mlx4: Remove unused create_flags field from CQ structure Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 15/50] RDMA/bnxt_re: Convert to modern CQ interface Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 16/50] RDMA/cxgb4: Separate kernel and user CQ creation paths Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 17/50] RDMA/mthca: Split user and kernel " Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 18/50] RDMA/erdma: Separate " Leon Romanovsky
2026-02-24  5:51   ` Cheng Xu
2026-02-24 10:57     ` Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 19/50] RDMA/ionic: Split " Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 20/50] RDMA/qedr: Convert to modern CQ interface Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 21/50] RDMA/vmw_pvrdma: Provide a modern CQ creation interface Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 22/50] RDMA/ocrdma: Split user and kernel CQ creation paths Leon Romanovsky
2026-02-13 10:57 ` [PATCH rdma-next 23/50] RDMA/irdma: " Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 24/50] RDMA/usnic: Provide a modern CQ creation interface Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 25/50] RDMA/mana: " Leon Romanovsky
2026-02-24 22:30   ` [EXTERNAL] " Long Li
2026-02-25  8:24     ` Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 26/50] RDMA/erdma: Separate user and kernel CQ creation paths Leon Romanovsky
2026-02-24  2:20   ` Cheng Xu
2026-02-24 10:46     ` Leon Romanovsky
2026-02-26  6:17   ` Junxian Huang
2026-02-26  6:54     ` Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 27/50] RDMA/rdmavt: Split " Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 28/50] RDMA/siw: " Leon Romanovsky
2026-02-13 16:56   ` Bernard Metzler
2026-02-13 21:17     ` Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 29/50] RDMA/rxe: " Leon Romanovsky
2026-02-13 23:22   ` yanjun.zhu
2026-02-15  7:06     ` Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 30/50] RDMA/core: Remove legacy CQ creation fallback path Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 31/50] RDMA/core: Remove unused ib_resize_cq() implementation Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 32/50] RDMA: Clarify that CQ resize is a user‑space verb Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 33/50] RDMA/bnxt_re: Drop support for resizing kernel CQs Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 34/50] RDMA/irdma: Remove resize support for " Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 35/50] RDMA/mlx4: Remove support for kernel CQ resize Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 36/50] RDMA/mlx5: Remove support for resizing kernel CQs Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 37/50] RDMA/mthca: Remove resize support for " Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 38/50] RDMA/rdmavt: " Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 39/50] RDMA/rxe: Remove unused kernel‑side CQ resize support Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 40/50] RDMA: Properly propagate the number of CQEs as unsigned int Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 41/50] RDMA/core: Generalize CQ resize locking Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 42/50] RDMA/bnxt_re: Complete CQ resize in a single step Leon Romanovsky
2026-02-16  3:59   ` Selvin Xavier
2026-02-16  8:07     ` Leon Romanovsky
2026-02-17  5:02       ` Selvin Xavier
2026-02-17  7:56         ` Leon Romanovsky
2026-02-17 10:52           ` Selvin Xavier
2026-02-19  8:02             ` Selvin Xavier
2026-02-24  8:15   ` Selvin Xavier
2026-02-24 10:59     ` Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 43/50] RDMA/bnxt_re: Rely on common resize‑CQ locking Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 44/50] RDMA/bnxt_re: Reduce CQ memory footprint Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 45/50] RDMA/mlx4: Use generic resize-CQ lock Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 46/50] RDMA/mlx4: Use on‑stack variables instead of storing them in the CQ object Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 47/50] RDMA/mlx5: Use generic resize-CQ lock Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 48/50] RDMA/mlx5: Select resize‑CQ callback based on device capabilities Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 49/50] RDMA/mlx5: Reduce CQ memory footprint Leon Romanovsky
2026-02-13 10:58 ` [PATCH rdma-next 50/50] RDMA/mthca: Use generic resize-CQ lock Leon Romanovsky
2026-02-25 13:51 ` (subset) [PATCH rdma-next 00/50] RDMA: Ensure CQ UMEMs are managed by ib_core Leon Romanovsky
2026-02-25 13:53 ` Leon Romanovsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox