Пример #1
0
/*
 * dapl_hca_alloc
 *
 * alloc and initialize an HCA struct
 *
 * Input:
 * 	name
 *      port
 *
 * Output:
 * 	hca_ptr
 *
 * Returns:
 * 	none
 *
 */
DAPL_HCA *dapl_hca_alloc(char *name, char *port)
{
	DAPL_HCA *hca_ptr;

	hca_ptr = dapl_os_alloc(sizeof(DAPL_HCA));
	if (NULL == hca_ptr) {
		goto bail;
	}

	dapl_os_memzero(hca_ptr, sizeof(DAPL_HCA));
	dapl_os_lock_init(&hca_ptr->lock);
	dapl_llist_init_head(&hca_ptr->ia_list_head);

	hca_ptr->name = dapl_os_strdup(name);
	if (NULL == hca_ptr->name) {
		goto bail;
	}

	hca_ptr->ib_hca_handle = IB_INVALID_HANDLE;
	hca_ptr->port_num = dapl_os_strtol(port, NULL, 0);

	return (hca_ptr);

      bail:
	if (NULL != hca_ptr) 
		dapl_os_free(hca_ptr, sizeof(DAPL_HCA));

	return NULL;
}
Пример #2
0
DAPL_LMR *dapl_lmr_alloc(IN DAPL_IA * ia,
			 IN DAT_MEM_TYPE mem_type,
			 IN DAT_REGION_DESCRIPTION region_desc,
			 IN DAT_VLEN length,
			 IN DAT_PZ_HANDLE pz_handle,
			 IN DAT_MEM_PRIV_FLAGS mem_priv)
{
	DAPL_LMR *lmr;

	/* Allocate LMR */
	lmr = (DAPL_LMR *) dapl_os_alloc(sizeof(DAPL_LMR));
	if (NULL == lmr) {
		return (NULL);
	}

	/* zero the structure */
	dapl_os_memzero(lmr, sizeof(DAPL_LMR));

	/*
	 * initialize the header
	 */
	lmr->header.provider = ia->header.provider;
	lmr->header.magic = DAPL_MAGIC_LMR;
	lmr->header.handle_type = DAT_HANDLE_TYPE_LMR;
	lmr->header.owner_ia = ia;
	lmr->header.user_context.as_64 = 0;
	lmr->header.user_context.as_ptr = NULL;
	dapl_llist_init_entry(&lmr->header.ia_list_entry);
	dapl_ia_link_lmr(ia, lmr);
	dapl_os_lock_init(&lmr->header.lock);

	/* 
	 * initialize the body 
	 */
	lmr->param.ia_handle = (DAT_IA_HANDLE) ia;
	lmr->param.mem_type = mem_type;
	lmr->param.region_desc = region_desc;
	lmr->param.length = length;
	lmr->param.pz_handle = pz_handle;
	lmr->param.mem_priv = mem_priv;
	dapl_os_atomic_set(&lmr->lmr_ref_count, 0);

	return (lmr);
}
Пример #3
0
/*
 * dapl_cno_alloc
 *
 * alloc and initialize an EVD struct
 *
 * Input:
 *	ia
 *
 * Returns:
 *	cno_ptr, or null on failure.
 */
DAPL_CNO *
dapl_cno_alloc(
    IN DAPL_IA				*ia_ptr,
    IN DAT_OS_WAIT_PROXY_AGENT		wait_agent)
{
	DAPL_CNO *cno_ptr;

	cno_ptr = (DAPL_CNO *) dapl_os_alloc(sizeof (DAPL_CNO));
	if (!cno_ptr) {
		return (NULL);
	}

	/* zero the structure */
	(void) dapl_os_memzero(cno_ptr, sizeof (DAPL_CNO));

	/*
	 * Initialize the header.
	 */
	cno_ptr->header.provider	= ia_ptr->header.provider;
	cno_ptr->header.magic		= DAPL_MAGIC_CNO;
	cno_ptr->header.handle_type	= DAT_HANDLE_TYPE_CNO;
	cno_ptr->header.owner_ia	= ia_ptr;
	cno_ptr->header.user_context.as_64  = 0;
	cno_ptr->header.user_context.as_ptr = NULL;
	dapl_llist_init_entry(&cno_ptr->header.ia_list_entry);
	dapl_llist_init_head(&cno_ptr->evd_list_head);
	dapl_os_lock_init(&cno_ptr->header.lock);

	/*
	 * Initialize the body
	 */
	cno_ptr->cno_waiters = 0;
	cno_ptr->cno_ref_count = 0;
	cno_ptr->cno_state = DAPL_CNO_STATE_UNTRIGGERED;
	cno_ptr->cno_evd_triggered = NULL;
	cno_ptr->cno_wait_agent = wait_agent;
	(void) dapl_os_wait_object_init(&cno_ptr->cno_wait_object);

	return (cno_ptr);
}
Пример #4
0
/*
 * dapl_sp_alloc
 *
 * alloc and initialize a PSP INFO struct
 *
 * Input:
 * 	IA INFO struct ptr
 *
 * Output:
 * 	sp_ptr
 *
 * Returns:
 * 	NULL
 *	pointer to sp info struct
 *
 */
DAPL_SP *
dapls_sp_alloc(
	IN DAPL_IA *ia_ptr,
	IN DAT_BOOLEAN is_psp)
{
	DAPL_SP *sp_ptr;

	/* Allocate EP */
	sp_ptr = (DAPL_SP *)dapl_os_alloc(sizeof (DAPL_SP));
	if (sp_ptr == NULL) {
		return (NULL);
	}

	/* zero the structure */
	(void) dapl_os_memzero(sp_ptr, sizeof (DAPL_SP));

	/*
	 * initialize the header
	 */
	sp_ptr->header.provider = ia_ptr->header.provider;
	if (is_psp) {
		sp_ptr->header.magic = DAPL_MAGIC_PSP;
		sp_ptr->header.handle_type = DAT_HANDLE_TYPE_PSP;
	} else {
		sp_ptr->header.magic = DAPL_MAGIC_RSP;
		sp_ptr->header.handle_type = DAT_HANDLE_TYPE_RSP;
	}
	sp_ptr->header.owner_ia = ia_ptr;
	sp_ptr->header.user_context.as_64 = 0;
	sp_ptr->header.user_context.as_ptr = NULL;
	dapl_llist_init_entry(&sp_ptr->header.ia_list_entry);
	dapl_os_lock_init(&sp_ptr->header.lock);

	/*
	 * Initialize the Body (set to NULL above)
	 */
	dapl_llist_init_head(&sp_ptr->cr_list_head);

	return (sp_ptr);
}