diff --git a/src/mca/ptl/gm/src/ptl_gm.c b/src/mca/ptl/gm/src/ptl_gm.c index 24d90b499f..bf71ba25f1 100644 --- a/src/mca/ptl/gm/src/ptl_gm.c +++ b/src/mca/ptl/gm/src/ptl_gm.c @@ -61,9 +61,6 @@ OBJ_CLASS_INSTANCE (mca_ptl_gm_send_request_t, OBJ_CLASS_INSTANCE (mca_ptl_gm_peer_t, ompi_list_item_t, NULL, NULL); - - - /* * */ @@ -80,9 +77,11 @@ mca_ptl_gm_add_procs (struct mca_ptl_base_module_t *ptl, mca_ptl_gm_proc_t *ptl_proc; mca_ptl_gm_peer_t *ptl_peer; unsigned int lid; + ompi_proc_t* local_proc = ompi_proc_local(); for (i = 0; i < nprocs; i++) { ompi_proc = ompi_procs[i]; + if( ompi_proc == local_proc ) continue; ptl_proc = mca_ptl_gm_proc_create ((mca_ptl_gm_module_t *) ptl, ompi_proc); @@ -97,38 +96,37 @@ mca_ptl_gm_add_procs (struct mca_ptl_base_module_t *ptl, return OMPI_ERR_UNREACH; } - /* TODO: make this extensible to multiple nics */ - /* XXX: */ - /* FIXME: */ + /* TODO: make this extensible to multiple nics */ + /* XXX: */ + /* FIXME: */ - for (j=0; j < num_peer_ptls; j++) - { - /*XXX: check for self */ + for (j=0; j < num_peer_ptls; j++) { + /*XXX: check for self */ - ptl_peer = OBJ_NEW (mca_ptl_gm_peer_t); - if (NULL == ptl_peer) { - OMPI_THREAD_UNLOCK (&ptl_proc->proc_lock); - return OMPI_ERR_OUT_OF_RESOURCE; - } + ptl_peer = OBJ_NEW (mca_ptl_gm_peer_t); + if (NULL == ptl_peer) { + OMPI_THREAD_UNLOCK (&ptl_proc->proc_lock); + return OMPI_ERR_OUT_OF_RESOURCE; + } - ptl_peer->peer_ptl = (mca_ptl_gm_module_t *) ptl; - ptl_peer->peer_proc = ptl_proc; - ptl_peer->global_id = ptl_proc->proc_addrs->global_id; - ptl_peer->port_number = ptl_proc->proc_addrs->port_id; - if (GM_SUCCESS != - gm_global_id_to_node_id (((mca_ptl_gm_module_t *) ptl)->my_port, + ptl_peer->peer_ptl = (mca_ptl_gm_module_t *) ptl; + ptl_peer->peer_proc = ptl_proc; + ptl_peer->global_id = ptl_proc->proc_addrs->global_id; + ptl_peer->port_number = ptl_proc->proc_addrs->port_id; + if (GM_SUCCESS != + gm_global_id_to_node_id (((mca_ptl_gm_module_t *) ptl)->my_port, ptl_proc->proc_addrs[j].global_id, &lid)) { - ompi_output (0, - "[%s:%d] error in converting global to local id \n", __FILE__, __LINE__); + ompi_output (0, + "[%s:%d] error in converting global to local id \n", __FILE__, __LINE__); - } - ptl_peer->local_id = lid; + } + ptl_peer->local_id = lid; - ptl_proc->peer_arr[0] = ptl_peer; - ptl_proc->proc_peer_count++; - ptl_peer->peer_addr = ptl_proc->proc_addrs + i; - } + ptl_proc->peer_arr[ptl_proc->proc_peer_count] = ptl_peer; + ptl_proc->proc_peer_count++; + ptl_peer->peer_addr = ptl_proc->proc_addrs + i; + } ompi_bitmap_set_bit (reachable, i); OMPI_THREAD_UNLOCK (&ptl_proc->proc_lock); @@ -137,9 +135,9 @@ mca_ptl_gm_add_procs (struct mca_ptl_base_module_t *ptl, /*printf ("Global_id\t local_id\t port_number\t process name \n");*/ /*fflush (stdout);*/ /*printf ("%u %d %d %d\n", ptl_proc->peer_arr[0]->global_id,*/ - /*ptl_proc->peer_arr[0]->local_id,*/ - /*ptl_proc->peer_arr[0]->port_number, - * ptl_proc->proc_guid);*/ + /*ptl_proc->peer_arr[0]->local_id,*/ + /*ptl_proc->peer_arr[0]->port_number, + * ptl_proc->proc_guid);*/ /*fflush (stdout);*/ } @@ -148,9 +146,6 @@ mca_ptl_gm_add_procs (struct mca_ptl_base_module_t *ptl, return OMPI_SUCCESS; } - - - /* * */ @@ -167,9 +162,6 @@ mca_ptl_gm_del_procs (struct mca_ptl_base_module_t *ptl, return OMPI_SUCCESS; } - - - /* * */ @@ -208,12 +200,6 @@ mca_ptl_gm_request_init(struct mca_ptl_base_module_t *ptl, return OMPI_SUCCESS; } - - - - - - /* * */ diff --git a/src/mca/ptl/gm/src/ptl_gm_priv.c b/src/mca/ptl/gm/src/ptl_gm_priv.c index 118d808810..f87720dd3f 100755 --- a/src/mca/ptl/gm/src/ptl_gm_priv.c +++ b/src/mca/ptl/gm/src/ptl_gm_priv.c @@ -167,8 +167,6 @@ void ptl_gm_ctrl_frag(struct mca_ptl_gm_module_t *ptl, } - - mca_ptl_gm_recv_frag_t* ptl_gm_data_frag( struct mca_ptl_gm_module_t *ptl, gm_recv_event_t* event ) { @@ -201,14 +199,12 @@ mca_ptl_gm_recv_frag_t* ptl_gm_data_frag( struct mca_ptl_gm_module_t *ptl, &recv_frag->frag_recv.frag_base.frag_header.hdr_match, &(recv_frag->frag_recv), NULL ); - - - if (!matched) { - ompi_output(0,"matching receive not yet posted\n"); - return recv_frag; + if( matched ) { + mca_ptl_gm_matched( &(ptl->super), &(recv_frag->frag_recv) ); + return NULL; } - /* this one was matched => nothing more to do */ - return NULL; + ompi_output(0,"matching receive not yet posted\n"); + return recv_frag; } @@ -249,7 +245,6 @@ int mca_ptl_gm_incoming_recv (mca_ptl_gm_component_t * gm_comp) for( i = 0; i< gm_comp->gm_num_ptl_modules; i++) { ptl = gm_comp->gm_ptl_modules[i]; - event = gm_receive(ptl->my_port); switch (gm_ntohc(event->recv.type)) { @@ -269,6 +264,8 @@ int mca_ptl_gm_incoming_recv (mca_ptl_gm_component_t * gm_comp) /* mark the fragment as having pending buffers */ frag->have_allocated_buffer = true; } + gm_provide_receive_buffer( ptl->my_port, gm_ntohp(event->recv.message), + GM_SIZE, GM_LOW_PRIORITY ); break; case GM_NO_RECV_EVENT: break; @@ -277,9 +274,6 @@ int mca_ptl_gm_incoming_recv (mca_ptl_gm_component_t * gm_comp) gm_unknown(ptl->my_port, event); } - /* Alway repost the message */ - gm_provide_receive_buffer( ptl->my_port, gm_ntohp(event->recv.message), - GM_SIZE, GM_LOW_PRIORITY ); } return 0; } diff --git a/src/mca/ptl/gm/src/ptl_gm_proc.c b/src/mca/ptl/gm/src/ptl_gm_proc.c index 0d05ebd581..a4ff2eb25c 100644 --- a/src/mca/ptl/gm/src/ptl_gm_proc.c +++ b/src/mca/ptl/gm/src/ptl_gm_proc.c @@ -84,9 +84,9 @@ mca_ptl_gm_proc_create (mca_ptl_gm_module_t * ptl, ompi_proc_t * ompi_proc) ptl_proc = mca_ptl_gm_proc_lookup_ompi (ompi_proc); if (ptl_proc != NULL) - { - return ptl_proc; - } + { + return ptl_proc; + } /* only gm ptl opened */ @@ -126,8 +126,7 @@ mca_ptl_gm_proc_create (mca_ptl_gm_module_t * ptl, ompi_proc_t * ompi_proc) return NULL; } - if(NULL == mca_ptl_gm_component.gm_local && ompi_proc == -ompi_proc_local() ) + if(NULL == mca_ptl_gm_component.gm_local && ompi_proc == ompi_proc_local() ) mca_ptl_gm_component.gm_local = ptl_proc; return ptl_proc;