Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/uct/api/v2/uct_v2.h
Original file line number Diff line number Diff line change
Expand Up @@ -1888,6 +1888,19 @@ typedef struct {
} uct_ep_outstanding_purge_params_t;


/**
* @ingroup UCT_RESOURCE
* @brief Purge outstanding (undelivered) operations from an endpoint.
Comment thread
gleon99 marked this conversation as resolved.
Resolved
*
* @note On success, this function takes ownership of classified outstanding
* operations and reports undelivered operations through the callback for
* replay by the caller.
*/
ucs_status_t
uct_ep_outstanding_purge(uct_ep_h ep,
const uct_ep_outstanding_purge_params_t *params);


END_C_DECLS

#endif
16 changes: 12 additions & 4 deletions src/uct/base/uct_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -582,13 +582,11 @@ uct_iface_base_query_v2(uct_iface_h iface, uct_iface_attr_v2_t *iface_attr)
iface_attr->max_put_sgl_zcopy_count = 0;
}

if (!(iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_TX_TOKEN) &&
(iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_TX_TOKEN_LENGTH)) {
if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_TX_TOKEN_LENGTH) {
iface_attr->tx_token_length = 0;
}

if (!(iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_RX_TOKEN) &&
(iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_RX_TOKEN_LENGTH)) {
if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_RX_TOKEN_LENGTH) {
iface_attr->rx_token_length = 0;
}

Expand Down Expand Up @@ -691,6 +689,7 @@ UCS_CLASS_INIT_FUNC(uct_base_iface_t, uct_iface_ops_t *ops,
ucs_assert(internal_ops->iface_vfs_refresh != NULL);
ucs_assert(internal_ops->ep_query != NULL);
ucs_assert(internal_ops->ep_invalidate != NULL);
ucs_assert(internal_ops->ep_outstanding_purge != NULL);

UCS_STATIC_ASSERT(ucs_offsetof(uct_base_iface_t, internal_ops) ==
sizeof(uct_iface_t));
Expand Down Expand Up @@ -834,6 +833,15 @@ ucs_status_t uct_ep_invalidate(uct_ep_h ep,
return iface->internal_ops->ep_invalidate(ep, params);
}

ucs_status_t
uct_ep_outstanding_purge(uct_ep_h ep,
const uct_ep_outstanding_purge_params_t *params)
{
const uct_base_iface_t *iface = ucs_derived_of(ep->iface, uct_base_iface_t);

return iface->internal_ops->ep_outstanding_purge(ep, params);
}

void uct_ep_set_iface(uct_ep_h ep, uct_iface_t *iface)
{
ep->iface = iface;
Expand Down
3 changes: 2 additions & 1 deletion src/uct/cuda/cuda_copy/cuda_copy_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,8 @@ static uct_iface_internal_ops_t uct_cuda_copy_iface_internal_ops = {
.ep_connect_to_ep_v2 = (uct_ep_connect_to_ep_v2_func_t)ucs_empty_function_return_unsupported,
.iface_is_reachable_v2 = uct_cuda_copy_iface_is_reachable_v2,
.ep_is_connected = uct_base_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
};

static uct_cuda_ctx_rsc_t * uct_cuda_copy_ctx_rsc_create(uct_iface_h tl_iface)
Expand Down
5 changes: 3 additions & 2 deletions src/uct/cuda/cuda_ipc/cuda_ipc_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,10 +507,11 @@ static uct_iface_internal_ops_t uct_cuda_ipc_iface_internal_ops = {
.ep_is_connected = uct_cuda_ipc_ep_is_connected,
.ep_get_device_ep = uct_cuda_ipc_ep_get_device_ep,
#if CUDA_VERSION >= 13000
.ep_put_sgl_zcopy = uct_cuda_ipc_ep_put_sgl_zcopy
.ep_put_sgl_zcopy = uct_cuda_ipc_ep_put_sgl_zcopy,
#else
.ep_put_sgl_zcopy = (uct_ep_put_sgl_zcopy_func_t)ucs_empty_function_return_unsupported
.ep_put_sgl_zcopy = (uct_ep_put_sgl_zcopy_func_t)ucs_empty_function_return_unsupported,
#endif
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
Comment thread
evgeny-leksikov marked this conversation as resolved.
Resolved
};

static uct_cuda_ctx_rsc_t * uct_cuda_ipc_ctx_rsc_create(uct_iface_h tl_iface)
Expand Down
3 changes: 2 additions & 1 deletion src/uct/cuda/gdr_copy/gdr_copy_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,8 @@ static uct_iface_internal_ops_t uct_gdr_copy_iface_internal_ops = {
.ep_connect_to_ep_v2 = (uct_ep_connect_to_ep_v2_func_t)ucs_empty_function_return_unsupported,
.iface_is_reachable_v2 = uct_gdr_copy_iface_is_reachable_v2,
.ep_is_connected = uct_base_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
};

static UCS_CLASS_INIT_FUNC(uct_gdr_copy_iface_t, uct_md_h md, uct_worker_h worker,
Expand Down
4 changes: 3 additions & 1 deletion src/uct/gaudi/gaudi_gdr/gaudi_gdr_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,9 @@ static uct_iface_internal_ops_t uct_gaudi_gdr_iface_internal_ops = {
.iface_is_reachable_v2 = (uct_iface_is_reachable_v2_func_t)
ucs_empty_function_return_zero,
.ep_is_connected = (uct_ep_is_connected_func_t)
ucs_empty_function_return_zero_int
ucs_empty_function_return_zero_int,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)
ucs_empty_function_return_unsupported
};

static UCS_CLASS_INIT_FUNC(uct_gaudi_gdr_iface_t, uct_md_h md,
Expand Down
2 changes: 2 additions & 0 deletions src/uct/ib/efa/srd/srd_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,8 @@ static uct_ib_iface_ops_t uct_srd_iface_ops = {
.iface_is_reachable_v2 = uct_ib_iface_is_reachable_v2,
.ep_is_connected = uct_srd_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)
ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)
Comment thread
gleon99 marked this conversation as resolved.
Resolved
ucs_empty_function_return_unsupported
},
.create_cq = uct_ib_verbs_create_cq,
Expand Down
3 changes: 2 additions & 1 deletion src/uct/ib/mlx5/dc/dc_mlx5.c
Original file line number Diff line number Diff line change
Expand Up @@ -1452,7 +1452,8 @@ static uct_rc_iface_ops_t uct_dc_mlx5_iface_ops = {
.ep_connect_to_ep_v2 = (uct_ep_connect_to_ep_v2_func_t)ucs_empty_function_return_unsupported,
.iface_is_reachable_v2 = uct_dc_mlx5_iface_is_reachable_v2,
.ep_is_connected = uct_dc_mlx5_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
Comment thread
evgeny-leksikov marked this conversation as resolved.
Resolved
},
.create_cq = uct_rc_mlx5_iface_common_create_cq,
.destroy_cq = uct_rc_mlx5_iface_common_destroy_cq,
Expand Down
1 change: 1 addition & 0 deletions src/uct/ib/mlx5/gdaki/gdaki.c
Original file line number Diff line number Diff line change
Expand Up @@ -1068,6 +1068,7 @@ static uct_rc_iface_ops_t uct_rc_gdaki_internal_ops = {
.iface_is_reachable_v2 = (uct_iface_is_reachable_v2_func_t)ucs_empty_function_return_one_int,
.ep_is_connected = uct_rc_gdaki_ep_is_connected,
.ep_get_device_ep = uct_rc_gdaki_ep_get_device_ep,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
},
.create_cq = uct_rc_gdaki_create_cq,
.destroy_cq = (uct_ib_iface_destroy_cq_func_t)ucs_empty_function_return_success,
Expand Down
3 changes: 2 additions & 1 deletion src/uct/ib/mlx5/gga/gga_mlx5.c
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,8 @@ static uct_rc_iface_ops_t uct_gga_mlx5_iface_ops = {
.ep_connect_to_ep_v2 = uct_gga_mlx5_ep_connect_to_ep_v2,
.iface_is_reachable_v2 = uct_gga_mlx5_iface_is_reachable_v2,
.ep_is_connected = uct_gga_mlx5_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
},
.create_cq = uct_rc_mlx5_iface_common_create_cq,
.destroy_cq = uct_rc_mlx5_iface_common_destroy_cq,
Expand Down
38 changes: 38 additions & 0 deletions src/uct/ib/mlx5/ib_mlx5_ext.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,44 @@ uct_ib_mlx5_ext_ep_put_sgl_zcopy(uct_ep_h ep, void * const *buffers,
return UCS_ERR_UNSUPPORTED;
}

static ucs_status_t uct_ib_mlx5_ext_ep_outstanding_purge_check_param(
const uct_ep_outstanding_purge_params_t *params)
{
if (params == NULL) {
Comment thread
gleon99 marked this conversation as resolved.
Resolved
return UCS_ERR_INVALID_PARAM;
}

if (!(params->field_mask & UCT_EP_OUTSTANDING_FIELD_RX_TOKEN) ||
!(params->field_mask & UCT_EP_OUTSTANDING_FIELD_CB) ||
(params->rx_token == NULL) || (params->cb == NULL)) {
return UCS_ERR_INVALID_PARAM;
}

return UCS_OK;
}

ucs_status_t uct_ib_mlx5_ext_ep_outstanding_purge(
uct_ep_h ep, const uct_ep_outstanding_purge_params_t *params)
{
uct_ib_mlx5_ext_plugin_t *plugin;

if (ucs_unlikely(uct_ib_mlx5_ext_ep_outstanding_purge_check_param(params) !=
UCS_OK)) {
return UCS_ERR_INVALID_PARAM;
}
Comment thread
gleon99 marked this conversation as resolved.
Resolved

ucs_list_for_each(plugin, &uct_ib_mlx5_ext_plugins, list) {

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.

iface_query, ep_query, and purge each select a provider independently. Can we bind this whole flow to one provider? @evgeny-leksikov wdyt?

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.

this is an open question, see my comment #11668 (comment)

if (ucs_unlikely(uct_ib_mlx5_ext_is_unsupported_op(
(const void*)plugin->ops.ep_outstanding_purge))) {
continue;
}

return plugin->ops.ep_outstanding_purge(ep, params);
}
Comment thread
evgeny-leksikov marked this conversation as resolved.
Resolved

return UCS_ERR_UNSUPPORTED;
}

void uct_ib_mlx5_ext_cleanup(void)
{
uct_ib_mlx5_ext_plugin_t *plugin, *tmp;
Expand Down
3 changes: 3 additions & 0 deletions src/uct/ib/mlx5/ib_mlx5_ext.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,9 @@ ucs_status_t uct_ib_mlx5_ext_ep_put_sgl_zcopy(uct_ep_h ep,
size_t count,
uct_completion_t *comp);

ucs_status_t uct_ib_mlx5_ext_ep_outstanding_purge(
uct_ep_h ep, const uct_ep_outstanding_purge_params_t *params);

END_C_DECLS

#endif /* UCT_IB_MLX5_EXT_H_ */
2 changes: 2 additions & 0 deletions src/uct/ib/mlx5/rc/rc_mlx5.h
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,8 @@ ucs_status_t uct_rc_mlx5_ep_tag_rndv_request(uct_ep_h tl_ep, uct_tag_t tag,

ucs_status_t uct_rc_mlx5_ep_get_address(uct_ep_h tl_ep, uct_ep_addr_t *addr);

ucs_status_t uct_rc_mlx5_base_ep_query(uct_ep_h tl_ep, uct_ep_attr_t *ep_attr);

unsigned uct_rc_mlx5_ep_cleanup_qp(void *arg);

ucs_status_t uct_rc_mlx5_iface_event_fd_get(uct_iface_h tl_iface, int *fd_p);
Expand Down
28 changes: 28 additions & 0 deletions src/uct/ib/mlx5/rc/rc_mlx5_ep.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#endif

#include <uct/ib/mlx5/ib_mlx5_log.h>
#include <uct/ib/mlx5/ib_mlx5_ext.h>
#include <ucs/vfs/base/vfs_cb.h>
#include <ucs/vfs/base/vfs_obj.h>
#include <ucs/arch/cpu.h>
Expand All @@ -24,6 +25,33 @@
#include "rc_mlx5.inl"


ucs_status_t uct_rc_mlx5_base_ep_query(uct_ep_h tl_ep, uct_ep_attr_t *ep_attr)
{
uct_ib_mlx5_ext_ep_query_attr_t attr = {};
const uint64_t ext_mask = UCT_EP_ATTR_FIELD_TX_TOKEN;
ucs_status_t status;

if (ep_attr->field_mask & (UCT_EP_ATTR_FIELD_LOCAL_SOCKADDR |
UCT_EP_ATTR_FIELD_REMOTE_SOCKADDR)) {
return UCS_ERR_UNSUPPORTED;
}

if (ep_attr->field_mask & ext_mask) {
if (ep_attr->field_mask & UCT_EP_ATTR_FIELD_TX_TOKEN) {

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 to check twice? it seems like leftover

attr.field_mask |= UCT_IB_MLX5_EXT_EP_QUERY_ATTR_FIELD_TX_TOKEN;
attr.tx_token = ep_attr->tx_token;
}

status = uct_ib_mlx5_ext_ep_query(tl_ep, &attr);
if (status != UCS_OK) {
return status;
}
}

return UCS_OK;
}


static ucs_status_t UCS_F_ALWAYS_INLINE uct_rc_mlx5_base_ep_put_short_inline(
uct_ep_h tl_ep, const void *buffer, unsigned length,
uint64_t remote_addr, uct_rkey_t rkey)
Expand Down
71 changes: 65 additions & 6 deletions src/uct/ib/mlx5/rc/rc_mlx5_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -1015,14 +1015,72 @@ static ucs_status_t
uct_rc_mlx5_iface_query_v2(uct_iface_h UCS_V_UNUSED iface,
Comment thread
gleon99 marked this conversation as resolved.
Resolved
uct_iface_attr_v2_t *iface_attr)
{
size_t max_sgl = uct_ib_mlx5_ext_max_put_sgl_zcopy_count();
uct_ib_mlx5_ext_iface_query_attr_t ext_attr = {};
const uint64_t sgl_mask = UCT_IFACE_ATTR_FIELD_CAP_FLAGS |
UCT_IFACE_ATTR_FIELD_MAX_PUT_SGL_ZCOPY_COUNT;
size_t max_sgl;
ucs_status_t status;

status = uct_iface_base_query_v2(iface, iface_attr);
if (status != UCS_OK) {
return status;
}

if (iface_attr->field_mask & sgl_mask) {
max_sgl = uct_ib_mlx5_ext_max_put_sgl_zcopy_count();
if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_CAP_FLAGS) {
iface_attr->cap.flags |= (max_sgl > 0) ?
UCT_IFACE_FLAG_V2_PUT_SGL_ZCOPY :
0;
}

if (iface_attr->field_mask &
UCT_IFACE_ATTR_FIELD_MAX_PUT_SGL_ZCOPY_COUNT) {
iface_attr->max_put_sgl_zcopy_count = max_sgl;
}
}

if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_CAP_FLAGS) {
iface_attr->cap.flags = (max_sgl > 0) ? UCT_IFACE_FLAG_V2_PUT_SGL_ZCOPY : 0;
ext_attr.field_mask |= UCT_IB_MLX5_EXT_IFACE_QUERY_ATTR_FIELD_CAP_FLAGS;
}

if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_TX_TOKEN_LENGTH) {
ext_attr.field_mask |=
UCT_IB_MLX5_EXT_IFACE_QUERY_ATTR_FIELD_TX_TOKEN_LEN;
}

if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_RX_TOKEN_LENGTH) {
ext_attr.field_mask |=
UCT_IB_MLX5_EXT_IFACE_QUERY_ATTR_FIELD_RX_TOKEN_LEN;
}

if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_MAX_PUT_SGL_ZCOPY_COUNT) {
iface_attr->max_put_sgl_zcopy_count = max_sgl;
if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_TX_TOKEN) {
ext_attr.field_mask |= UCT_IB_MLX5_EXT_IFACE_QUERY_ATTR_FIELD_TX_TOKEN;
ext_attr.tx_token = (void*)iface_attr->tx_token;

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.

This casts away the const from the public TX-token input. Can we make the plugin attribute const void * instead?

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.

@jeynmann unresolved?

}

if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_RX_TOKEN) {
ext_attr.field_mask |= UCT_IB_MLX5_EXT_IFACE_QUERY_ATTR_FIELD_RX_TOKEN;
ext_attr.rx_token = iface_attr->rx_token;
}

if (ext_attr.field_mask != 0) {
status = uct_ib_mlx5_ext_iface_query(iface, &ext_attr);

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.

Without a plugin, requesting token lengths now fails the entire query. Other transports return success with zero lengths and no capability bit..

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.

@jeynmann unresolved?

@jeynmann jeynmann Jul 24, 2026 •

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.

I changed uct_iface_base_query_v2.
Now it returns unsupport if trying to query tokens lengh/rx token.
Therefore, without a TOKEN_QUERY supported plugin, all token related query/func will be unsupported.

if (status != UCS_OK) {
return status;
}

if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_CAP_FLAGS) {
iface_attr->cap.flags |= ext_attr.cap.flags;
}

if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_TX_TOKEN_LENGTH) {
iface_attr->tx_token_length = ext_attr.tx_token_len;
}

if (iface_attr->field_mask & UCT_IFACE_ATTR_FIELD_RX_TOKEN_LENGTH) {
iface_attr->rx_token_length = ext_attr.rx_token_len;
}
}

return UCS_OK;
Expand All @@ -1034,13 +1092,14 @@ static uct_rc_iface_ops_t uct_rc_mlx5_iface_ops = {
.iface_query_v2 = uct_rc_mlx5_iface_query_v2,
.iface_estimate_perf = uct_rc_iface_estimate_perf,
.iface_vfs_refresh = uct_rc_iface_vfs_refresh,
.ep_query = (uct_ep_query_func_t)ucs_empty_function_return_unsupported,
.ep_query = uct_rc_mlx5_base_ep_query,
.ep_invalidate = uct_rc_mlx5_base_ep_invalidate,
.ep_connect_to_ep_v2 = uct_rc_mlx5_ep_connect_to_ep_v2,
.iface_is_reachable_v2 = uct_rc_mlx5_iface_is_reachable_v2,
.ep_is_connected = uct_rc_mlx5_base_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_put_sgl_zcopy = uct_ib_mlx5_ext_ep_put_sgl_zcopy
.ep_put_sgl_zcopy = uct_ib_mlx5_ext_ep_put_sgl_zcopy,
.ep_outstanding_purge = uct_ib_mlx5_ext_ep_outstanding_purge

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.

How does the caller discover purge support? QUERY_TOKEN can be advertised even when ep_query or purge is missing. Should we add a capability for purge, or require the complete query/derive/purge set?

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.

@jeynmann unresolved?

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.

Currently, we only need 1 cap for all token related queries and functions.
I added a helper uct_ib_mlx5_ext_find_plugin(uct_iface_h iface, uint64_t cap_flags).
When token related mask is set, we will choose the plugin with QUERY_TOKEN set in iface cap only.

},
.create_cq = uct_rc_mlx5_iface_common_create_cq,
.destroy_cq = uct_rc_mlx5_iface_common_destroy_cq,
Expand Down
3 changes: 2 additions & 1 deletion src/uct/ib/mlx5/ud/ud_mlx5.c
Original file line number Diff line number Diff line change
Expand Up @@ -864,7 +864,8 @@ static uct_ud_iface_ops_t uct_ud_mlx5_iface_ops = {
.ep_connect_to_ep_v2 = uct_ud_ep_connect_to_ep_v2,
.iface_is_reachable_v2 = uct_ib_iface_is_reachable_v2,
.ep_is_connected = uct_ud_mlx5_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
Comment thread
evgeny-leksikov marked this conversation as resolved.
Resolved
},
.create_cq = uct_ud_mlx5_create_cq,
.destroy_cq = uct_ib_verbs_destroy_cq,
Expand Down
3 changes: 2 additions & 1 deletion src/uct/ib/rc/verbs/rc_verbs_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,8 @@ static uct_rc_iface_ops_t uct_rc_verbs_iface_ops = {
.ep_connect_to_ep_v2 = uct_rc_verbs_ep_connect_to_ep_v2,
.iface_is_reachable_v2 = uct_ib_iface_is_reachable_v2,
.ep_is_connected = uct_rc_verbs_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
},
.create_cq = uct_ib_verbs_create_cq,
.destroy_cq = uct_ib_verbs_destroy_cq,
Expand Down
3 changes: 2 additions & 1 deletion src/uct/ib/rdmacm/rdmacm_cm.c
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,8 @@ static uct_iface_internal_ops_t uct_rdmacm_cm_iface_internal_ops = {
.ep_connect_to_ep_v2 = (uct_ep_connect_to_ep_v2_func_t)ucs_empty_function_return_unsupported,
.iface_is_reachable_v2 = (uct_iface_is_reachable_v2_func_t)ucs_empty_function_return_zero,
.ep_is_connected = (uct_ep_is_connected_func_t)ucs_empty_function_return_zero_int,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
};

static ucs_status_t
Expand Down
3 changes: 2 additions & 1 deletion src/uct/ib/ud/verbs/ud_verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,8 @@ static uct_ud_iface_ops_t uct_ud_verbs_iface_ops = {
.ep_connect_to_ep_v2 = uct_ud_ep_connect_to_ep_v2,
.iface_is_reachable_v2 = uct_ib_iface_is_reachable_v2,
.ep_is_connected = uct_ud_verbs_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
},
.create_cq = uct_ib_verbs_create_cq,
.destroy_cq = uct_ib_verbs_destroy_cq,
Expand Down
3 changes: 2 additions & 1 deletion src/uct/rocm/copy/rocm_copy_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,8 @@ static uct_iface_internal_ops_t uct_rocm_copy_iface_internal_ops = {
.ep_connect_to_ep_v2 = (uct_ep_connect_to_ep_v2_func_t)ucs_empty_function_return_unsupported,
.iface_is_reachable_v2 = uct_rocm_copy_iface_is_reachable_v2,
.ep_is_connected = uct_base_ep_is_connected,
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported
.ep_get_device_ep = (uct_ep_get_device_ep_func_t)ucs_empty_function_return_unsupported,
.ep_outstanding_purge = (uct_ep_outstanding_purge_func_t)ucs_empty_function_return_unsupported
};

static UCS_CLASS_INIT_FUNC(uct_rocm_copy_iface_t, uct_md_h md, uct_worker_h worker,
Expand Down
Loading