int mca_btl_udapl_finalize(struct mca_btl_base_module_t* base_btl) { mca_btl_udapl_module_t* udapl_btl = (mca_btl_udapl_module_t*) base_btl; int32_t i; /* * Cleaning up the endpoints here because mca_btl_udapl_del_procs * is never called by upper layers. * Note: this is only looking at those endpoints which are available * off of the btl module rdma list. */ for (i=0; i < udapl_btl->udapl_eager_rdma_endpoint_count; i++) { mca_btl_udapl_endpoint_t* endpoint = opal_pointer_array_get_item(udapl_btl->udapl_eager_rdma_endpoints, i); OBJ_DESTRUCT(endpoint); } /* release uDAPL resources */ dat_evd_free(udapl_btl->udapl_evd_dto); dat_evd_free(udapl_btl->udapl_evd_conn); dat_pz_free(udapl_btl->udapl_pz); dat_ia_close(udapl_btl->udapl_ia, DAT_CLOSE_GRACEFUL_FLAG); /* destroy objects */ OBJ_DESTRUCT(&udapl_btl->udapl_lock); OBJ_DESTRUCT(&udapl_btl->udapl_frag_eager); OBJ_DESTRUCT(&udapl_btl->udapl_frag_eager_recv); OBJ_DESTRUCT(&udapl_btl->udapl_frag_max); OBJ_DESTRUCT(&udapl_btl->udapl_frag_max_recv); OBJ_DESTRUCT(&udapl_btl->udapl_frag_user); OBJ_DESTRUCT(&udapl_btl->udapl_frag_control); OBJ_DESTRUCT(&udapl_btl->udapl_eager_rdma_lock); /* destroy mpool */ if (OMPI_SUCCESS != mca_mpool_base_module_destroy(udapl_btl->super.btl_mpool)) { BTL_UDAPL_VERBOSE_OUTPUT(VERBOSE_INFORM, ("WARNING: Failed to release mpool")); return OMPI_ERROR; } free(udapl_btl); return OMPI_SUCCESS; }
/*--------------------------------------------------------*/ int DT_pz_case0(Params_t * params_ptr, FFT_Cmd_t * cmd) { char *dev_name; DAT_IA_HANDLE ia_handle; DAT_PZ_HANDLE pz_handle; DAT_EVD_HANDLE evd_handle; DAT_RETURN rc; int res; DT_Tdep_Print_Head *phead; phead = params_ptr->phead; DT_Tdep_PT_Printf(phead, "\ Description: Test if we can normally create pz and destroy it.\n"); res = 1; ia_handle = 0; pz_handle = 0; evd_handle = DAT_HANDLE_NULL; dev_name = cmd->device_name; rc = DT_ia_open(dev_name, &ia_handle); DT_assert_dat(phead, rc == DAT_SUCCESS); rc = dat_pz_create(ia_handle, &pz_handle); DT_assert_dat(phead, rc == DAT_SUCCESS); cleanup: if (pz_handle) { rc = dat_pz_free(pz_handle); DT_assert_dat(phead, rc == DAT_SUCCESS); } if (ia_handle) { rc = dat_ia_close(ia_handle, DAT_CLOSE_ABRUPT_FLAG); DT_assert_dat(phead, rc == DAT_SUCCESS); } return res; }
int disconnect_ep(void) { DAT_RETURN status; DAT_EVENT event; DAT_COUNT nmore; int i; if (counters) { /* examples of query and print */ int ii; DAT_UINT64 ia_cntrs[DCNT_IA_ALL_COUNTERS]; dat_query_counters(ia, DCNT_IA_ALL_COUNTERS, ia_cntrs, 0); printf(" IA Cntrs:"); for (ii = 0; ii < DCNT_IA_ALL_COUNTERS; ii++) printf(" " F64u "", ia_cntrs[ii]); printf("\n"); dat_print_counters(ia, DCNT_IA_ALL_COUNTERS, 0); } if (!ud_test) { status = dat_ep_disconnect(ep[0], DAT_CLOSE_DEFAULT); _OK2(status, "dat_ep_disconnect"); status = dat_evd_wait(con_evd, DAT_TIMEOUT_INFINITE, 1, &event, &nmore); _OK(status, "dat_evd_wait"); } if (psp) { status = dat_psp_free(psp); _OK2(status, "dat_psp_free"); } for (i = 0; i < REG_MEM_COUNT * eps; i++) { status = dat_lmr_free(lmr[i]); _OK2(status, "dat_lmr_free"); } if (lmr_atomic) { status = dat_lmr_free(lmr_atomic); _OK2(status, "dat_lmr_free_atomic"); } for (i = 0; i < eps; i++) { if (counters) { /* examples of query and print */ int ii; DAT_UINT64 ep_cntrs[DCNT_EP_ALL_COUNTERS]; dat_query_counters(ep[i], DCNT_EP_ALL_COUNTERS, ep_cntrs, 0); printf(" EP[%d] Cntrs:", i); for (ii = 0; ii < DCNT_EP_ALL_COUNTERS; ii++) printf(" " F64u "", ep_cntrs[ii]); printf("\n"); dat_print_counters(ep[i], DCNT_EP_ALL_COUNTERS, 0); } status = dat_ep_free(ep[i]); _OK2(status, "dat_ep_free"); } if (counters) { /* examples of query and print */ int ii; DAT_UINT64 evd_cntrs[DCNT_EVD_ALL_COUNTERS]; dat_query_counters(dto_evd, DCNT_EVD_ALL_COUNTERS, evd_cntrs, 0); printf(" DTO_EVD Cntrs:"); for (ii = 0; ii < DCNT_EVD_ALL_COUNTERS; ii++) printf(" " F64u "", evd_cntrs[ii]); printf("\n"); dat_print_counters(dto_evd, DCNT_EVD_ALL_COUNTERS, 0); dat_query_counters(con_evd, DCNT_EVD_ALL_COUNTERS, evd_cntrs, 0); printf(" CONN_EVD Cntrs:"); for (ii = 0; ii < DCNT_EVD_ALL_COUNTERS; ii++) printf(" " F64u "", evd_cntrs[ii]); printf("\n"); dat_print_counters(con_evd, DCNT_EVD_ALL_COUNTERS, 0); dat_query_counters(cr_evd, DCNT_EVD_ALL_COUNTERS, evd_cntrs, 0); printf(" CR_EVD Cntrs:"); for (ii = 0; ii < DCNT_EVD_ALL_COUNTERS; ii++) printf(" " F64u "", evd_cntrs[ii]); printf("\n"); dat_print_counters(cr_evd, DCNT_EVD_ALL_COUNTERS, 0); } status = dat_evd_free(dto_evd); _OK2(status, "dat_evd_free DTO"); status = dat_evd_free(con_evd); _OK2(status, "dat_evd_free CON"); status = dat_evd_free(cr_evd); _OK2(status, "dat_evd_free CR"); status = dat_pz_free(pz); _OK2(status, "dat_pz_free"); status = dat_ia_close(ia, DAT_CLOSE_DEFAULT); _OK2(status, "dat_ia_close"); return (0); }
/*--------------------------------------------------------*/ int DT_pz_case1(Params_t * params_ptr, FFT_Cmd_t * cmd) { char *dev_name; DAT_IA_HANDLE ia_handle; DAT_PZ_HANDLE pz_handle; DAT_EP_HANDLE ep_handle; DAT_EVD_HANDLE conn_evd, send_evd, recv_evd, cr_evd; DAT_RETURN rc; int res; DT_Tdep_Print_Head *phead; phead = params_ptr->phead; DT_Tdep_PT_Printf(phead, "\ Description: try to destroy pz with vi still associated with it\n"); res = 1; ia_handle = 0; pz_handle = 0; ep_handle = 0; conn_evd = 0; send_evd = 0; recv_evd = 0; cr_evd = 0; dev_name = cmd->device_name; rc = DT_ia_open(dev_name, &ia_handle); DT_assert_dat(phead, rc == DAT_SUCCESS); rc = dat_pz_create(ia_handle, &pz_handle); DT_assert_dat(phead, rc == DAT_SUCCESS); rc = DT_ep_create(params_ptr, ia_handle, pz_handle, &cr_evd, &conn_evd, &send_evd, &recv_evd, &ep_handle); DT_assert_dat(phead, rc == DAT_SUCCESS); if (pz_handle) { rc = dat_pz_free(pz_handle); DT_assert_dat(phead, DAT_GET_TYPE(rc) == DAT_INVALID_STATE); } cleanup: /* corrrect order */ if (ep_handle) { rc = dat_ep_free(ep_handle); DT_assert_clean(phead, rc == DAT_SUCCESS); } if (conn_evd) { rc = DT_Tdep_evd_free(conn_evd); DT_assert_clean(phead, rc == DAT_SUCCESS); } if (send_evd) { rc = DT_Tdep_evd_free(send_evd); DT_assert_clean(phead, rc == DAT_SUCCESS); } if (recv_evd) { rc = DT_Tdep_evd_free(recv_evd); DT_assert_clean(phead, rc == DAT_SUCCESS); } if (pz_handle) { rc = dat_pz_free(pz_handle); DT_assert_clean(phead, rc == DAT_SUCCESS); } if (ia_handle) { rc = dat_ia_close(ia_handle, DAT_CLOSE_ABRUPT_FLAG); DT_assert_clean(phead, rc == DAT_SUCCESS); } return res; } /*--------------------------------------------------------*/ int DT_pz_case2(Params_t * params_ptr, FFT_Cmd_t * cmd) { char *dev_name; DAT_IA_HANDLE ia_handle; DAT_PZ_HANDLE pz_handle; Bpool *bpool; DAT_RETURN rc; int res; DT_Tdep_Print_Head *phead; phead = params_ptr->phead; DT_Tdep_PT_Printf(phead, "\ Description: try to destroy pz with registered memory still\n"); DT_Tdep_PT_Printf(phead, "\ associated with it\n"); res = 1; ia_handle = 0; pz_handle = 0; bpool = 0; dev_name = cmd->device_name; rc = DT_ia_open(dev_name, &ia_handle); DT_assert_dat(phead, rc == DAT_SUCCESS); rc = dat_pz_create(ia_handle, &pz_handle); DT_assert_dat(phead, rc == DAT_SUCCESS); /* allocate and register bpool */ bpool = DT_BpoolAlloc(0, phead, ia_handle, pz_handle, NULL, NULL, BUFFSIZE, 1, DAT_OPTIMAL_ALIGNMENT, false, false); DT_assert(phead, bpool != 0); if (pz_handle) { rc = dat_pz_free(pz_handle); DT_assert_dat(phead, DAT_GET_TYPE(rc) == DAT_INVALID_STATE); } cleanup: /* deregister and free bpool */ if (DT_Bpool_Destroy(0, phead, bpool) == false) { DT_Tdep_PT_Printf(phead, "Warning: Destroy bpool fails, reboot for cleanup\n"); return 0; } if (pz_handle) { rc = dat_pz_free(pz_handle); DT_assert_clean(phead, rc == DAT_SUCCESS); } if (ia_handle) { rc = dat_ia_close(ia_handle, DAT_CLOSE_ABRUPT_FLAG); DT_assert_clean(phead, rc == DAT_SUCCESS); } return res; } /*-------------------------------------------------------------*/ void DT_pz_test(Params_t * params_ptr, FFT_Cmd_t * cmd) { int i; int res; DT_Tdep_Print_Head *phead; FFT_Testfunc_t cases_func[] = { {DT_pz_case0}, {DT_pz_case1}, {DT_pz_case2}, }; phead = params_ptr->phead; for (i = 0; i < cmd->size; i++) { if (cmd->cases_flag[i]) { DT_Tdep_PT_Printf(phead, "\ *********************************************************************\n"); DT_Tdep_PT_Printf(phead, "\ Function feature: Protection Zone management case: %d\n", i); res = cases_func[i].fun(params_ptr, cmd); if (res == 1) { DT_Tdep_PT_Printf(phead, "Result: PASS\n"); } else if (res == 0) { DT_Tdep_PT_Printf(phead, "Result: FAIL\n"); } else if (res == -1) { DT_Tdep_PT_Printf(phead, "Result: use other test tool\n"); } else if (res == -2) { DT_Tdep_PT_Printf(phead, "Result: not support or next stage to develop\n"); } DT_Tdep_PT_Printf(phead, "\ *********************************************************************\n"); } }
static void psdapl_pz_destroy(DAT_PZ_HANDLE pz_handle) { dat_pz_free(pz_handle); }