static UCS_CLASS_CLEANUP_FUNC(uct_ud_mlx5_iface_t) { ucs_trace_func(""); uct_worker_progress_unregister(self->super.super.super.worker, uct_ud_mlx5_iface_progress, self); uct_ib_mlx5_put_txwq(self->super.super.super.worker, &self->tx.wq); }
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_CLEANUP_FUNC(uct_rc_verbs_ep_t) { uct_rc_verbs_iface_t *iface = ucs_derived_of(self->super.super.super.iface, uct_rc_verbs_iface_t); uct_worker_progress_unregister(iface->super.super.super.worker, uct_rc_verbs_iface_progress, iface); }
static UCS_CLASS_CLEANUP_FUNC(uct_mm_ep_t) { uct_mm_iface_t *iface = ucs_derived_of(self->super.super.iface, uct_mm_iface_t); ucs_status_t status; uct_mm_remote_seg_t *remote_seg; struct sglib_hashed_uct_mm_remote_seg_t_iterator iter; uct_mm_ep_signal_remote(self, UCT_MM_IFACE_SIGNAL_DISCONNECT); uct_worker_progress_unregister(iface->super.worker, uct_mm_iface_progress, iface); for (remote_seg = sglib_hashed_uct_mm_remote_seg_t_it_init(&iter, self->remote_segments_hash); remote_seg != NULL; remote_seg = sglib_hashed_uct_mm_remote_seg_t_it_next(&iter)) { sglib_hashed_uct_mm_remote_seg_t_delete(self->remote_segments_hash, remote_seg); /* detach the remote proceess's descriptors segment */ status = uct_mm_md_mapper_ops(iface->super.md)->detach(remote_seg); if (status != UCS_OK) { ucs_warn("Unable to detach shared memory segment of descriptors: %s", ucs_status_string(status)); } ucs_free(remote_seg); } /* detach the remote proceess's shared memory segment (remote recv FIFO) */ status = uct_mm_md_mapper_ops(iface->super.md)->detach(&self->mapped_desc); if (status != UCS_OK) { ucs_error("error detaching from remote FIFO"); } uct_mm_ep_pending_purge(&self->super.super, NULL, NULL); }
static UCS_CLASS_CLEANUP_FUNC(uct_ud_mlx5_iface_t) { ucs_trace_func(""); uct_ud_enter(&self->super); uct_worker_progress_unregister(self->super.super.super.worker, uct_ud_mlx5_iface_progress, self); uct_ib_mlx5_put_txwq(self->super.super.super.worker, &self->tx.wq); UCT_UD_IFACE_DELETE_EPS(&self->super, uct_ud_mlx5_ep_t); uct_ud_enter(&self->super); }
static UCS_CLASS_CLEANUP_FUNC(uct_ugni_smsg_iface_t) { uct_worker_progress_unregister(self->super.super.worker, uct_ugni_smsg_progress, self); if (!self->super.activated) { return; } ucs_mpool_put(self->user_desc); ucs_mpool_cleanup(&self->free_desc, 1); ucs_mpool_cleanup(&self->free_mbox, 1); }
static UCS_CLASS_CLEANUP_FUNC(uct_ugni_rdma_iface_t) { uct_worker_progress_unregister(self->super.super.worker, uct_ugni_progress, self); if (!self->super.activated) { /* We done with release */ return; } ucs_mpool_cleanup(&self->free_desc_get_buffer, 1); ucs_mpool_cleanup(&self->free_desc_get, 1); ucs_mpool_cleanup(&self->free_desc_famo, 1); ucs_mpool_cleanup(&self->free_desc_buffer, 1); ucs_mpool_cleanup(&self->free_desc, 1); }
static UCS_CLASS_CLEANUP_FUNC(uct_rc_mlx5_ep_t) { uct_rc_mlx5_iface_t *iface = ucs_derived_of(self->super.super.super.iface, uct_rc_mlx5_iface_t); uct_worker_progress_unregister(iface->super.super.super.worker, uct_rc_mlx5_iface_progress, iface); uct_ib_mlx5_put_txwq(iface->super.super.super.worker, &self->tx.wq); /* Synchronize CQ index with the driver, since it would remove pending * completions for this QP (both send and receive) during ibv_destroy_qp(). */ uct_ib_mlx5_update_cq_ci(iface->super.super.send_cq, iface->tx.cq.cq_ci); uct_ib_mlx5_update_cq_ci(iface->super.super.recv_cq, iface->rx.cq.cq_ci); uct_rc_ep_reset_qp(&self->super); iface->tx.cq.cq_ci = uct_ib_mlx5_get_cq_ci(iface->super.super.send_cq); iface->rx.cq.cq_ci = uct_ib_mlx5_get_cq_ci(iface->super.super.recv_cq); }
static UCS_CLASS_CLEANUP_FUNC(uct_mm_ep_t) { uct_mm_iface_t *iface = ucs_derived_of(self->super.super.iface, uct_mm_iface_t); ucs_status_t status; uct_mm_remote_seg_t *remote_seg; struct sglib_hashed_uct_mm_remote_seg_t_iterator iter; /* don't send a disconnect message for now since it may prevent the receiver * from progressing and reading incoming messages */ /* make sure the slow path function isn't invoked after the ep's cleanup */ if (self->cbq_elem_on) { ucs_debug("Removing a remaining slow path progress function."); uct_mm_ep_remove_slow_path_callback(iface, self); } uct_worker_progress_unregister(iface->super.worker, uct_mm_iface_progress, iface); for (remote_seg = sglib_hashed_uct_mm_remote_seg_t_it_init(&iter, self->remote_segments_hash); remote_seg != NULL; remote_seg = sglib_hashed_uct_mm_remote_seg_t_it_next(&iter)) { sglib_hashed_uct_mm_remote_seg_t_delete(self->remote_segments_hash, remote_seg); /* detach the remote proceess's descriptors segment */ status = uct_mm_md_mapper_ops(iface->super.md)->detach(remote_seg); if (status != UCS_OK) { ucs_warn("Unable to detach shared memory segment of descriptors: %s", ucs_status_string(status)); } ucs_free(remote_seg); } /* detach the remote proceess's shared memory segment (remote recv FIFO) */ status = uct_mm_md_mapper_ops(iface->super.md)->detach(&self->mapped_desc); if (status != UCS_OK) { ucs_error("error detaching from remote FIFO"); } uct_mm_ep_pending_purge(&self->super.super, NULL, NULL); }
static UCS_CLASS_CLEANUP_FUNC(uct_ud_verbs_iface_t) { ucs_trace_func(""); uct_worker_progress_unregister(self->super.super.super.worker, uct_ud_verbs_iface_progress, self); }