예제 #1
0
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;
}
예제 #2
0
/*--------------------------------------------------------*/
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;
}
예제 #3
0
파일: dtestx.c 프로젝트: Cai900205/test
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);
}
예제 #4
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");
		}
	}
예제 #5
0
파일: psdapl.c 프로젝트: ParaStation/pscom
static
void psdapl_pz_destroy(DAT_PZ_HANDLE pz_handle)
{
	dat_pz_free(pz_handle);
}