1
1

Trying to make IB ptl work with modex_exchange after the

name change of module -> component.

This commit was SVN r1995.
Этот коммит содержится в:
Sayantan Sur 2004-08-10 03:10:40 +00:00
родитель 882c458534
Коммит ba7c1f377e
4 изменённых файлов: 91 добавлений и 65 удалений

Просмотреть файл

@ -74,6 +74,7 @@ int mca_ptl_ib_add_procs(
D_PRINT("Adding %d procs\n", nprocs);
for(i = 0; i < nprocs; i++) {
ompi_proc = ompi_procs[i];

Просмотреть файл

@ -140,7 +140,7 @@ static int mca_ptl_ib_component_send(void)
ud_qp_addr = (mca_ptl_ib_ud_addr_t*) malloc(size);
if(NULL == ud_qp_addr) {
return OMPI_ERROR;
return OMPI_ERR_OUT_OF_RESOURCE;
}
for(i = 0; i < mca_ptl_ib_component.ib_num_ptl_modules; i++) {
@ -155,6 +155,10 @@ static int mca_ptl_ib_component_send(void)
rc = mca_base_modex_send(&mca_ptl_ib_component.super.ptlm_version,
ud_qp_addr, size);
if(OMPI_SUCCESS != rc) {
D_PRINT("mca_base_modex_send didn't succeed : %d\n", rc);
}
free(ud_qp_addr);
return rc;
@ -171,11 +175,11 @@ mca_ptl_base_module_t** mca_ptl_ib_component_init(int *num_ptl_modules,
bool *allow_multi_user_threads,
bool *have_hidden_threads)
{
mca_ptl_base_module_t **ptls;
mca_ptl_base_module_t **modules;
int i, ret;
uint32_t num_hcas;
mca_ptl_ib_module_t* ptl_ib = NULL;
mca_ptl_ib_module_t* ib_modules = NULL;
*num_ptl_modules = 0;
*allow_multi_user_threads = true;
@ -225,83 +229,83 @@ mca_ptl_base_module_t** mca_ptl_ib_component_init(int *num_ptl_modules,
mca_ptl_ib_component.ib_num_ptl_modules,
mca_ptl_ib_component.ib_max_ptl_modules);
ptl_ib = (mca_ptl_ib_module_t*) malloc(sizeof(mca_ptl_ib_module_t) *
ib_modules = (mca_ptl_ib_module_t*) malloc(sizeof(mca_ptl_ib_module_t) *
mca_ptl_ib_component.ib_num_ptl_modules);
if(NULL == ptl_ib) {
if(NULL == ib_modules) {
return NULL;
}
/* Zero out the PTL struct memory region */
memset((void*)ptl_ib, 0, sizeof(mca_ptl_ib_module_t) *
memset((void*)ib_modules, 0, sizeof(mca_ptl_ib_module_t) *
mca_ptl_ib_component.ib_num_ptl_modules);
/* Copy the function pointers to the IB ptls */
for(i = 0; i< mca_ptl_ib_component.ib_num_ptl_modules; i++) {
memcpy((void*)&ptl_ib[i],
/* Copy the function pointers to the IB modules */
for(i = 0; i < mca_ptl_ib_component.ib_num_ptl_modules; i++) {
memcpy((void*)&ib_modules[i],
&mca_ptl_ib_module,
sizeof(mca_ptl_ib_module));
}
D_PRINT("About to initialize IB ptls ...\n");
D_PRINT("About to initialize IB modules ...\n");
/* For each ptl, do this */
for(i = 0; i < mca_ptl_ib_component.ib_num_ptl_modules; i++) {
if(mca_ptl_ib_get_hca_id(i, &ptl_ib[i].hca_id)
if(mca_ptl_ib_get_hca_id(i, &ib_modules[i].hca_id)
!= OMPI_SUCCESS) {
return NULL;
}
D_PRINT("hca_id: %s\n", ptl_ib[i].hca_id);
D_PRINT("hca_id: %s\n", ib_modules[i].hca_id);
if(mca_ptl_ib_get_hca_hndl(ptl_ib[i].hca_id, &ptl_ib[i].nic)
if(mca_ptl_ib_get_hca_hndl(ib_modules[i].hca_id, &ib_modules[i].nic)
!= OMPI_SUCCESS) {
return NULL;
}
D_PRINT("hca_hndl: %d\n", ptl_ib[i].nic);
D_PRINT("hca_hndl: %d\n", ib_modules[i].nic);
/* Each HCA uses only port 1. Need to change
* this so that each ptl can choose different
* ports */
if(mca_ptl_ib_query_hca_prop(ptl_ib[i].nic, &ptl_ib[i].port)
if(mca_ptl_ib_query_hca_prop(ib_modules[i].nic, &ib_modules[i].port)
!= OMPI_SUCCESS) {
return NULL;
}
D_PRINT("LID: %d\n", ptl_ib[i].port.lid);
D_PRINT("LID: %d\n", ib_modules[i].port.lid);
if(mca_ptl_ib_alloc_pd(ptl_ib[i].nic, &ptl_ib[i].ptag)
if(mca_ptl_ib_alloc_pd(ib_modules[i].nic, &ib_modules[i].ptag)
!= OMPI_SUCCESS) {
return NULL;
}
D_PRINT("Protection Domain: %d\n", (int)ptl_ib[i].ptag);
D_PRINT("Protection Domain: %d\n", (int)ib_modules[i].ptag);
if(mca_ptl_ib_create_cq(ptl_ib[i].nic, &ptl_ib[i].cq_hndl)
if(mca_ptl_ib_create_cq(ib_modules[i].nic, &ib_modules[i].cq_hndl)
!= OMPI_SUCCESS) {
return NULL;
}
D_PRINT("CQ handle: %d\n", (int)ptl_ib[i].cq_hndl);
D_PRINT("CQ handle: %d\n", (int)ib_modules[i].cq_hndl);
if(mca_ptl_ib_ud_cq_init(ptl_ib[i].nic, &ptl_ib[i].ud_scq_hndl,
&ptl_ib[i].ud_rcq_hndl)
if(mca_ptl_ib_ud_cq_init(ib_modules[i].nic, &ib_modules[i].ud_scq_hndl,
&ib_modules[i].ud_rcq_hndl)
!= OMPI_SUCCESS) {
return NULL;
}
if(mca_ptl_ib_ud_qp_init(ptl_ib[i].nic, ptl_ib[i].ud_rcq_hndl,
ptl_ib[i].ud_scq_hndl, ptl_ib[i].ptag,
ptl_ib[i].ud_qp_hndl, ptl_ib[i].ud_qp_prop)
if(mca_ptl_ib_ud_qp_init(ib_modules[i].nic, ib_modules[i].ud_rcq_hndl,
ib_modules[i].ud_scq_hndl, ib_modules[i].ptag,
&ib_modules[i].ud_qp_hndl, &ib_modules[i].ud_qp_prop)
!= OMPI_SUCCESS) {
return NULL;
}
/* Attach asynchronous handler */
if(mca_ptl_ib_set_async_handler(ptl_ib[i].nic,
ptl_ib[i].async_handler)
if(mca_ptl_ib_set_async_handler(ib_modules[i].nic,
&ib_modules[i].async_handler)
!= OMPI_SUCCESS) {
return NULL;
}
@ -311,34 +315,36 @@ mca_ptl_base_module_t** mca_ptl_ib_component_init(int *num_ptl_modules,
* 1. register
* 2. fill up descriptors
*/
if(mca_ptl_ib_prep_ud_bufs(ptl_ib[i].nic, ptl_ib[i].ud_buf)
ib_modules[i].ud_buf = NULL;
if(mca_ptl_ib_prep_ud_bufs(ib_modules[i].nic, &ib_modules[i].ud_buf)
!= OMPI_SUCCESS) {
return NULL;
}
/* Post the UD recv descriptors */
if(mca_ptl_ib_post_ud_recv(ptl_ib[i].nic, ptl_ib[i].ud_qp_hndl,
ptl_ib[i].ud_buf)
if(mca_ptl_ib_post_ud_recv(ib_modules[i].nic, ib_modules[i].ud_qp_hndl,
ib_modules[i].ud_buf)
!= OMPI_SUCCESS) {
return NULL;
}
if(mca_ptl_ib_get_comp_ev_hndl(&ptl_ib[i].ud_comp_ev_handler)
if(mca_ptl_ib_get_comp_ev_hndl(&ib_modules[i].ud_comp_ev_handler)
!= OMPI_SUCCESS) {
return NULL;
}
/* Set the completion event handler for the UD recv queue */
if(mca_ptl_ib_set_comp_ev_hndl(ptl_ib[i].nic,
ptl_ib[i].ud_rcq_hndl,
ptl_ib[i].ud_comp_ev_handler,
(void*)NULL, &ptl_ib[i].ud_comp_ev_hndl)
if(mca_ptl_ib_set_comp_ev_hndl(ib_modules[i].nic,
ib_modules[i].ud_rcq_hndl,
ib_modules[i].ud_comp_ev_handler,
(void*)NULL, &ib_modules[i].ud_comp_ev_hndl)
!= OMPI_SUCCESS) {
return NULL;
}
/* Request for interrupts on the UD recv queue */
if(mca_ptl_ib_req_comp_notif(ptl_ib[i].nic, ptl_ib[i].ud_rcq_hndl)
if(mca_ptl_ib_req_comp_notif(ib_modules[i].nic, ib_modules[i].ud_rcq_hndl)
!= OMPI_SUCCESS) {
return NULL;
}
@ -354,7 +360,7 @@ mca_ptl_base_module_t** mca_ptl_ib_component_init(int *num_ptl_modules,
/* Set the pointers for all IB ptls */
for(i = 0; i < mca_ptl_ib_component.ib_num_ptl_modules; i++) {
mca_ptl_ib_component.ib_ptl_modules[i] = &ptl_ib[i];
mca_ptl_ib_component.ib_ptl_modules[i] = &ib_modules[i];
}
if(mca_ptl_ib_component_send() != OMPI_SUCCESS) {
@ -362,19 +368,19 @@ mca_ptl_base_module_t** mca_ptl_ib_component_init(int *num_ptl_modules,
}
/* Allocate list of MCA ptl pointers */
ptls = (mca_ptl_base_module_t**) malloc(mca_ptl_ib_component.ib_num_ptl_modules *
modules = (mca_ptl_base_module_t**) malloc(mca_ptl_ib_component.ib_num_ptl_modules *
sizeof(mca_ptl_base_module_t*));
if(NULL == ptls) {
if(NULL == modules) {
return NULL;
}
memcpy(ptls, mca_ptl_ib_component.ib_ptl_modules,
memcpy(modules, mca_ptl_ib_component.ib_ptl_modules,
mca_ptl_ib_component.ib_num_ptl_modules *
sizeof(mca_ptl_ib_module_t*));
*num_ptl_modules = mca_ptl_ib_component.ib_num_ptl_modules;
return ptls;
return modules;
}
/*

Просмотреть файл

@ -45,7 +45,15 @@ static void async_event_handler(VAPI_hca_hndl_t hca_hndl,
static void ud_completion_handler(VAPI_hca_hndl_t nic,
VAPI_cq_hndl_t cq_hndl, void* priv_data)
{
VAPI_ret_t ret;
D_PRINT("Got interrupt!!\n");
ret = VAPI_req_comp_notif(nic, cq_hndl, VAPI_NEXT_COMP);
if(VAPI_OK != ret) {
MCA_PTL_IB_VAPI_RET(ret, "VAPI_req_comp_notif");
}
}
int mca_ptl_ib_ud_cq_init(VAPI_hca_hndl_t nic,
@ -89,8 +97,8 @@ int mca_ptl_ib_ud_qp_init(VAPI_hca_hndl_t nic,
VAPI_cq_hndl_t ud_rcq_hndl,
VAPI_cq_hndl_t ud_scq_hndl,
VAPI_pd_hndl_t ptag,
VAPI_qp_hndl_t ud_qp_hndl,
VAPI_qp_prop_t ud_qp_prop)
VAPI_qp_hndl_t* ud_qp_hndl,
VAPI_qp_prop_t* ud_qp_prop)
{
VAPI_qp_init_attr_t qp_init_attr;
VAPI_qp_attr_t qp_attr;
@ -119,7 +127,7 @@ int mca_ptl_ib_ud_qp_init(VAPI_hca_hndl_t nic,
qp_init_attr.ts_type = VAPI_TS_UD;
ret = VAPI_create_qp(nic, &qp_init_attr,
&ud_qp_hndl, &ud_qp_prop);
ud_qp_hndl, ud_qp_prop);
if(VAPI_OK != ret) {
MCA_PTL_IB_VAPI_RET(ret, "VAPI_create_qp");
@ -127,8 +135,8 @@ int mca_ptl_ib_ud_qp_init(VAPI_hca_hndl_t nic,
}
D_PRINT("UD QP[%d] created ..hndl=%d\n",
ud_qp_prop.qp_num,
(int)ud_qp_hndl);
ud_qp_prop->qp_num,
(int)*ud_qp_hndl);
/* Modifying QP to INIT */
QP_ATTR_MASK_CLR_ALL(qp_attr_mask);
@ -142,7 +150,7 @@ int mca_ptl_ib_ud_qp_init(VAPI_hca_hndl_t nic,
QP_ATTR_MASK_SET(qp_attr_mask,QP_ATTR_QKEY);
ret = VAPI_modify_qp(nic,
ud_qp_hndl, &qp_attr,
(VAPI_qp_hndl_t)*ud_qp_hndl, &qp_attr,
&qp_attr_mask, &qp_cap);
if(VAPI_OK != ret) {
@ -160,7 +168,7 @@ int mca_ptl_ib_ud_qp_init(VAPI_hca_hndl_t nic,
QP_ATTR_MASK_SET(qp_attr_mask,QP_ATTR_QP_STATE);
ret = VAPI_modify_qp(nic,
ud_qp_hndl, &qp_attr,
(VAPI_qp_hndl_t)*ud_qp_hndl, &qp_attr,
&qp_attr_mask, &qp_cap);
if(VAPI_OK != ret) {
@ -180,7 +188,7 @@ int mca_ptl_ib_ud_qp_init(VAPI_hca_hndl_t nic,
QP_ATTR_MASK_SET(qp_attr_mask,QP_ATTR_SQ_PSN);
ret = VAPI_modify_qp(nic,
ud_qp_hndl, &qp_attr,
(VAPI_qp_hndl_t)*ud_qp_hndl, &qp_attr,
&qp_attr_mask, &qp_cap);
if(VAPI_OK != ret) {
@ -218,13 +226,17 @@ int mca_ptl_ib_get_num_hcas(uint32_t* num_hcas)
int mca_ptl_ib_get_hca_id(int num, VAPI_hca_id_t* hca_id)
{
int num_hcas;
uint32_t num_hcas;
VAPI_ret_t ret;
VAPI_hca_id_t* hca_ids = NULL;
hca_ids = (VAPI_hca_id_t*) malloc(mca_ptl_ib_component.ib_num_hcas *
sizeof(VAPI_hca_id_t));
if(NULL == hca_ids) {
return OMPI_ERR_OUT_OF_RESOURCE;
}
/* Now get the hca_id from underlying VAPI layer */
ret = EVAPI_list_hcas(mca_ptl_ib_component.ib_num_hcas,
&num_hcas, hca_ids);
@ -299,7 +311,7 @@ int mca_ptl_ib_alloc_pd(VAPI_hca_hndl_t nic,
int mca_ptl_ib_create_cq(VAPI_hca_hndl_t nic,
VAPI_cq_hndl_t* cq_hndl)
{
int act_num_cqe = 0;
uint32_t act_num_cqe = 0;
VAPI_ret_t ret;
ret = VAPI_create_cq(nic, DEFAULT_CQ_SIZE,
@ -314,12 +326,12 @@ int mca_ptl_ib_create_cq(VAPI_hca_hndl_t nic,
}
int mca_ptl_ib_set_async_handler(VAPI_hca_hndl_t nic,
EVAPI_async_handler_hndl_t async_handler)
EVAPI_async_handler_hndl_t *async_handler)
{
VAPI_ret_t ret;
ret = EVAPI_set_async_event_handler(nic,
async_event_handler, 0, &async_handler);
async_event_handler, 0, async_handler);
if(VAPI_OK != ret) {
MCA_PTL_IB_VAPI_RET(ret, "EVAPI_set_async_event_handler");
@ -330,15 +342,14 @@ int mca_ptl_ib_set_async_handler(VAPI_hca_hndl_t nic,
}
int mca_ptl_ib_prep_ud_bufs(VAPI_hca_hndl_t nic,
mca_ptl_ib_ud_buf_t* ud_buf)
mca_ptl_ib_ud_buf_t** ud_buf_ptr)
{
int size, len;
int i, num_ud_bufs;
vapi_descriptor_t* desc;
mca_ptl_ib_ud_buf_data_t* buf_data;
vapi_memhandle_t* memhandle;
ud_buf = NULL;
mca_ptl_ib_ud_buf_t* ud_buf;
num_ud_bufs = MAX_UD_PREPOST_DEPTH;
@ -346,11 +357,14 @@ int mca_ptl_ib_prep_ud_bufs(VAPI_hca_hndl_t nic,
len = sizeof(mca_ptl_ib_ud_buf_data_t);
ud_buf = (mca_ptl_ib_ud_buf_t*) malloc(size);
if(NULL == ud_buf) {
return OMPI_ERROR;
(mca_ptl_ib_ud_buf_t*)*ud_buf_ptr = (mca_ptl_ib_ud_buf_t*) malloc(size);
if(NULL == *ud_buf_ptr) {
return OMPI_ERR_OUT_OF_RESOURCE;
}
ud_buf = (mca_ptl_ib_ud_buf_t*)*ud_buf_ptr;
/* Walk through the list of UD bufs */
for(i = 0; i < num_ud_bufs; i++) {
desc = &ud_buf[i].desc;
@ -359,7 +373,7 @@ int mca_ptl_ib_prep_ud_bufs(VAPI_hca_hndl_t nic,
buf_data = (mca_ptl_ib_ud_buf_data_t*) malloc(len);
if(NULL == buf_data) {
return OMPI_ERROR;
return OMPI_ERR_OUT_OF_RESOURCE;
}
if(mca_ptl_ib_register_mem(nic, buf_data, len, memhandle)
@ -369,7 +383,7 @@ int mca_ptl_ib_prep_ud_bufs(VAPI_hca_hndl_t nic,
desc->rr.comp_type = VAPI_SIGNALED;
desc->rr.opcode = VAPI_RECEIVE;
desc->rr.id = (VAPI_virt_addr_t) &ud_buf[i];
desc->rr.id = (VAPI_virt_addr_t) (unsigned int) &ud_buf[i];
desc->rr.sg_lst_len = 1;
desc->rr.sg_lst_p = &(desc->sg_entry);
desc->sg_entry.len = len;
@ -457,6 +471,9 @@ int mca_ptl_ib_set_comp_ev_hndl(VAPI_hca_hndl_t nic,
MCA_PTL_IB_VAPI_RET(ret, "EVAPI_set_comp_eventh");
return OMPI_ERROR;
}
D_PRINT("Completion hander: %p, Handle = %d\n",
handler, (int)*handler_hndl);
return OMPI_SUCCESS;
}
@ -479,5 +496,7 @@ int mca_ptl_ib_get_comp_ev_hndl(VAPI_completion_event_handler_t* handler_ptr)
{
*handler_ptr = ud_completion_handler;
D_PRINT("UD Completion Event Handler = %p\n", ud_completion_handler);
return OMPI_SUCCESS;
}

Просмотреть файл

@ -45,8 +45,8 @@ typedef struct mca_ptl_ib_ud_buf_t mca_ptl_ib_ud_buf_t;
int mca_ptl_ib_ud_cq_init(VAPI_hca_hndl_t, VAPI_cq_hndl_t*,
VAPI_cq_hndl_t*);
int mca_ptl_ib_ud_qp_init(VAPI_hca_hndl_t, VAPI_cq_hndl_t,
VAPI_cq_hndl_t, VAPI_pd_hndl_t, VAPI_qp_hndl_t,
VAPI_qp_prop_t);
VAPI_cq_hndl_t, VAPI_pd_hndl_t, VAPI_qp_hndl_t*,
VAPI_qp_prop_t*);
int mca_ptl_ib_get_num_hcas(uint32_t*);
int mca_ptl_ib_get_hca_id(int, VAPI_hca_id_t*);
int mca_ptl_ib_get_hca_hndl(VAPI_hca_id_t, VAPI_hca_hndl_t*);
@ -54,10 +54,10 @@ int mca_ptl_ib_query_hca_prop(VAPI_hca_hndl_t, VAPI_hca_port_t*);
int mca_ptl_ib_alloc_pd(VAPI_hca_hndl_t, VAPI_pd_hndl_t*);
int mca_ptl_ib_create_cq(VAPI_hca_hndl_t, VAPI_cq_hndl_t*);
int mca_ptl_ib_set_async_handler(VAPI_hca_hndl_t,
EVAPI_async_handler_hndl_t);
EVAPI_async_handler_hndl_t*);
int mca_ptl_ib_post_ud_recv(VAPI_hca_hndl_t, VAPI_qp_hndl_t,
mca_ptl_ib_ud_buf_t*);
int mca_ptl_ib_prep_ud_bufs(VAPI_hca_hndl_t, mca_ptl_ib_ud_buf_t*);
int mca_ptl_ib_prep_ud_bufs(VAPI_hca_hndl_t, mca_ptl_ib_ud_buf_t**);
int mca_ptl_ib_register_mem(VAPI_hca_hndl_t, void*, int,
vapi_memhandle_t*);
int mca_ptl_ib_set_comp_ev_hndl(VAPI_hca_hndl_t, VAPI_cq_hndl_t,