This commit is related to ticket #1362. The following devices respect the
behavior described on the ticket: elan, gm, mx, self, sm, tcp. This commit was SVN r18734.
Этот коммит содержится в:
родитель
cbd6749c22
Коммит
24316b77cf
@ -338,6 +338,7 @@ int mca_btl_elan_component_progress( void )
|
||||
OPAL_THREAD_UNLOCK(&elan_btl->elan_lock);
|
||||
}
|
||||
/* If there are any pending sends check their completion */
|
||||
recheck_send_list:
|
||||
if( !opal_list_is_empty( &(elan_btl->send_list) ) && !OPAL_THREAD_TRYLOCK(&elan_btl->elan_lock) ) {
|
||||
mca_btl_elan_frag_t* frag = (mca_btl_elan_frag_t*)opal_list_get_first( &(elan_btl->send_list) );
|
||||
if( (NULL != frag) && elan_poll(frag->elan_event, 0) ) {
|
||||
@ -352,10 +353,12 @@ int mca_btl_elan_component_progress( void )
|
||||
if( btl_ownership ) {
|
||||
MCA_BTL_ELAN_FRAG_RETURN(frag);
|
||||
}
|
||||
goto recheck_send_list;
|
||||
} else {
|
||||
OPAL_THREAD_UNLOCK(&elan_btl->elan_lock);
|
||||
}
|
||||
}
|
||||
recheck_rdma_list:
|
||||
/* If any RDMA have been posted, check their status */
|
||||
if( !opal_list_is_empty( &(elan_btl->rdma_list) ) && !OPAL_THREAD_TRYLOCK(&elan_btl->elan_lock) ) {
|
||||
mca_btl_elan_frag_t* frag = (mca_btl_elan_frag_t*)opal_list_get_first( &(elan_btl->rdma_list) );
|
||||
@ -371,6 +374,7 @@ int mca_btl_elan_component_progress( void )
|
||||
if( btl_ownership ) {
|
||||
MCA_BTL_ELAN_FRAG_RETURN(frag);
|
||||
}
|
||||
goto recheck_rdma_list;
|
||||
} else {
|
||||
OPAL_THREAD_UNLOCK(&elan_btl->elan_lock);
|
||||
}
|
||||
|
@ -607,8 +607,7 @@ int mca_btl_gm_component_progress()
|
||||
reg->cbfunc(&btl->super, hdr->tag, &frag->base, reg->cbdata);
|
||||
OPAL_THREAD_LOCK(&mca_btl_gm_component.gm_lock);
|
||||
} else {
|
||||
btl->error_cb(&btl->super,
|
||||
MCA_BTL_ERROR_FLAGS_FATAL);
|
||||
btl->error_cb(&btl->super, MCA_BTL_ERROR_FLAGS_FATAL);
|
||||
return 0;
|
||||
}
|
||||
MCA_BTL_GM_FRAG_POST(btl,frag);
|
||||
@ -634,8 +633,7 @@ int mca_btl_gm_component_progress()
|
||||
|
||||
MCA_BTL_GM_FRAG_POST(btl,frag);
|
||||
} else {
|
||||
btl->error_cb(&btl->super,
|
||||
MCA_BTL_ERROR_FLAGS_FATAL);
|
||||
btl->error_cb(&btl->super, MCA_BTL_ERROR_FLAGS_FATAL);
|
||||
return 0;
|
||||
}
|
||||
count++;
|
||||
|
@ -594,6 +594,7 @@ int mca_btl_mx_component_progress(void)
|
||||
mca_btl_mx_module_t* mx_btl = mca_btl_mx_component.mx_btls[i];
|
||||
uint32_t mx_result = 0;
|
||||
|
||||
recheck_device:
|
||||
mx_return = mx_ipeek( mx_btl->mx_endpoint, &mx_request, &mx_result );
|
||||
if( OPAL_UNLIKELY(mx_return != MX_SUCCESS) ) {
|
||||
opal_output( 0, "mca_btl_mx_component_progress: mx_ipeek() failed with status %d (%s)\n",
|
||||
@ -616,6 +617,7 @@ int mca_btl_mx_component_progress(void)
|
||||
* are supposed to do next.
|
||||
*/
|
||||
frag = mx_status.context;
|
||||
num_progressed++;
|
||||
if( NULL != frag ) {
|
||||
if( MCA_BTL_MX_SEND == frag->type ) { /* it's a send */
|
||||
int btl_ownership = (frag->base.des_flags & MCA_BTL_DES_FLAGS_BTL_OWNERSHIP);
|
||||
@ -627,6 +629,7 @@ int mca_btl_mx_component_progress(void)
|
||||
if( btl_ownership ) {
|
||||
MCA_BTL_MX_FRAG_RETURN( mx_btl, frag );
|
||||
}
|
||||
goto recheck_device;
|
||||
} else if( !mca_btl_mx_component.mx_use_unexpected ) { /* and this one is a receive */
|
||||
mca_btl_active_message_callback_t* reg;
|
||||
mx_segment_t mx_segment;
|
||||
@ -651,7 +654,6 @@ int mca_btl_mx_component_progress(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
num_progressed++;
|
||||
}
|
||||
return num_progressed;
|
||||
}
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user