static UCS_CLASS_CLEANUP_FUNC(uct_dc_mlx5_iface_t) { ucs_trace_func(""); uct_worker_progress_unregister(self->super.super.super.super.worker, uct_dc_mlx5_iface_progress, self); uct_rc_mlx5_iface_common_cleanup(&self->mlx5_common); }
static UCS_CLASS_INIT_FUNC(uct_dc_mlx5_iface_t, uct_md_h md, uct_worker_h worker, const uct_iface_params_t *params, const uct_iface_config_t *tl_config) { uct_dc_mlx5_iface_config_t *config = ucs_derived_of(tl_config, uct_dc_mlx5_iface_config_t); ucs_status_t status; ucs_trace_func(""); UCS_CLASS_CALL_SUPER_INIT(uct_dc_iface_t, &uct_dc_mlx5_iface_ops, md, worker, params, 0, &config->super); status = uct_rc_mlx5_iface_common_init(&self->mlx5_common, &self->super.super, &config->super.super); if (status != UCS_OK) { goto err; } status = uct_ud_mlx5_iface_common_init(&self->super.super.super, &self->ud_common, &config->ud_common); if (status != UCS_OK) { goto err_rc_mlx5_common_cleanup; } status = uct_dc_mlx5_iface_init_dcis(self); if (status != UCS_OK) { goto err_rc_mlx5_common_cleanup; } uct_dc_iface_set_quota(&self->super, &config->super); /* Set max_iov for put_zcopy and get_zcopy */ uct_ib_iface_set_max_iov(&self->super.super.super, ((UCT_IB_MLX5_MAX_BB * MLX5_SEND_WQE_BB) - sizeof(struct mlx5_wqe_raddr_seg) - sizeof(struct mlx5_wqe_ctrl_seg) - UCT_IB_MLX5_AV_FULL_SIZE) / sizeof(struct mlx5_wqe_data_seg)); /* TODO: only register progress when we have a connection */ uct_worker_progress_register(worker, uct_dc_mlx5_iface_progress, self); ucs_debug("created dc iface %p", self); return UCS_OK; err_rc_mlx5_common_cleanup: uct_rc_mlx5_iface_common_cleanup(&self->mlx5_common); err: return status; }