Skip to content

GDP plugin support patches#11626

Open
Artemy-Mellanox wants to merge 4 commits into
openucx:masterfrom
Artemy-Mellanox:topic/no_dbr_qp
Open

GDP plugin support patches#11626
Artemy-Mellanox wants to merge 4 commits into
openucx:masterfrom
Artemy-Mellanox:topic/no_dbr_qp

Conversation

@Artemy-Mellanox

Copy link
Copy Markdown
Contributor

No description provided.

Artemy-Mellanox and others added 3 commits July 7, 2026 10:14
Add two opt-in fields to uct_ib_mlx5_qp_attr_t for QPs whose send doorbell is
rung from a DPA thread:

- sq_no_dbr: create the QP with qpc.send_dbr_mode = NO_DBR_INT and register no
  send doorbell-record umem (skip dbr_addr/dbr_umem_id), so the NIC does not
  read the SQ dbr. Required when the dbr lives in DPA memory the NIC cannot
  read; the producer rings the DB register only. Assumes no RQ.

- uar_page_id: override the QPC uar_page (0 = worker UAR). The DPA thread rings
  via flexio_dev_qp_sq_ring_db() through its outbox, which maps the FlexIO
  process UAR, so the QP's uar_page must match that UAR (not the host worker's)
  for the doorbell to drive the QP.

Both default off, so existing QPs are unchanged. Adds the send_dbr_mode qpc
field/enum to the IFC header (carved out of reserved_at_80, layout preserved).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread config/m4/cuda.m4 Outdated
@@ -1,28 +1,6 @@
#
# Copyright (c) NVIDIA CORPORATION & AFFILIATES, 2001-2017. ALL RIGHTS RESERVED.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Copyright (c) NVIDIA CORPORATION & AFFILIATES, 2001-2017. ALL RIGHTS RESERVED.
# Copyright (c) NVIDIA CORPORATION & AFFILIATES, 2001-2026. ALL RIGHTS RESERVED.

UCT_IB_MLX5_QPC_SQ_DBR_VALID = 0x0,
UCT_IB_MLX5_QPC_SQ_NO_DBR_EXT = 0x1,
UCT_IB_MLX5_QPC_SQ_NO_DBR_INT = 0x2
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unused?



template<ucs_device_level_t level>
UCS_F_DEVICE void uct_dev_exec_init(unsigned &lane_id, unsigned &num_lanes)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please consider returning struct with two fields instead.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this may prevent registers use

Comment thread src/uct/ib/mlx5/gdaki/d2p.cuh Outdated
uct_dev_exec_init<level>(lane_id, num_lanes);

if (lane_id == 0) {
long long depth = UCS_BIT(ep->log_depth);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const

Comment thread src/uct/ib/mlx5/gdaki/d2p.cuh Outdated

for (;;) {
unsigned long long ci = READ_ONCE(*ep->ci);
if ((long long)(pi - ci) >= depth) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static_cast

Comment thread src/uct/ib/mlx5/gdaki/d2p.cuh Outdated
}

if (status == UCS_INPROGRESS) {
uint32_t slot = pi & UCS_MASK(ep->log_depth);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const

Comment thread src/uct/ib/mlx5/gdaki/d2p.cuh Outdated
Comment on lines +68 to +69
status = (ucs_status_t)uct_dev_bcast<level>((int)status, lane_id);
return status;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
status = (ucs_status_t)uct_dev_bcast<level>((int)status, lane_id);
return status;
return static_cast<ucs_status_t>(uct_dev_bcast<level>(static_cast<int>(status),
lane_id));

Comment thread src/uct/ib/mlx5/gdaki/d2p.cuh Outdated
src_ib->lkey,
reinterpret_cast<uint64_t>(address),
rem_ib->rkey, remote_address, 0,
comp == NULL ? 0 :

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
comp == NULL ? 0 :
comp == nullptr ? 0 :

Comment thread src/uct/ib/mlx5/gdaki/d2p.cuh Outdated
sizeof(uint64_t), ep->atomic_result_lkey,
ep->atomic_result_va, rem_ib->rkey,
remote_address, inc_value,
comp == NULL ? 0 :

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
comp == NULL ? 0 :
comp == nullptr ? 0 :

Comment on lines +13 to +14
UCT_IB_D2P_OP_RDMA_WRITE = 0,
UCT_IB_D2P_OP_ATOMIC_ADD = 1,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need these operation codes? I see the opcode is set, but where should we check it?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rakhmets
rakhmets previously approved these changes Jul 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants