@@ -37,6 +37,7 @@ static int
3737ompi_mtl_portals4_recv_block_progress (ptl_event_t * ev ,
3838 ompi_mtl_portals4_base_request_t * ptl_base_request )
3939{
40+ int ret = OMPI_SUCCESS ;
4041 ompi_mtl_portals4_recv_short_request_t * ptl_request =
4142 (ompi_mtl_portals4_recv_short_request_t * ) ptl_base_request ;
4243 ompi_mtl_portals4_recv_short_block_t * block = ptl_request -> block ;
@@ -58,10 +59,10 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
5859 opal_list_remove_item (& ompi_mtl_portals4 .recv_short_blocks ,
5960 & block -> base );
6061 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
61- ompi_mtl_portals4_recv_short_block_free (block );
62+ ret = ompi_mtl_portals4_recv_short_block_free (block );
6263 } else {
6364 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
64- ompi_mtl_portals4_activate_block (block );
65+ ret = ompi_mtl_portals4_activate_block (block );
6566 }
6667 break ;
6768
@@ -76,6 +77,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
7677 break ;
7778
7879 case PTL_EVENT_AUTO_UNLINK :
80+ block -> me_h = PTL_INVALID_HANDLE ;
7981 OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
8082 switch (block -> status ) {
8183 case BLOCK_STATUS_ACTIVATED : /* Normal case */
@@ -89,12 +91,12 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
8991 opal_list_remove_item (& ompi_mtl_portals4 .recv_short_blocks ,
9092 & block -> base );
9193 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
92- ompi_mtl_portals4_recv_short_block_free (block );
94+ ret = ompi_mtl_portals4_recv_short_block_free (block );
9395 } else {
9496 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
9597 OPAL_OUTPUT_VERBOSE ((10 , ompi_mtl_base_framework .framework_output ,
9698 "mtl:portals4 PTL_EVENT_AUTO_UNLINK received after PTL_EVENT_AUTO_FREE" ));
97- ompi_mtl_portals4_activate_block (block );
99+ ret = ompi_mtl_portals4_activate_block (block );
98100 }
99101 break ;
100102
@@ -133,7 +135,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
133135 break ;
134136 }
135137
136- return OMPI_SUCCESS ;
138+ return ret ;
137139}
138140
139141
@@ -193,6 +195,7 @@ ompi_mtl_portals4_activate_block(ompi_mtl_portals4_recv_short_block_t *block)
193195 me .uid = ompi_mtl_portals4 .uid ;
194196 me .options =
195197 PTL_ME_OP_PUT |
198+ PTL_ME_EVENT_COMM_DISABLE |
196199 PTL_ME_MANAGE_LOCAL |
197200 PTL_ME_MAY_ALIGN ;
198201 if (ompi_mtl_portals4 .use_logical ) {
@@ -227,7 +230,8 @@ ompi_mtl_portals4_activate_block(ompi_mtl_portals4_recv_short_block_t *block)
227230int
228231ompi_mtl_portals4_recv_short_init (void )
229232{
230- int i ;
233+ int ret = OMPI_SUCCESS ;
234+ uint32_t i ;
231235
232236 OBJ_CONSTRUCT (& ompi_mtl_portals4 .short_block_mutex , opal_mutex_t );
233237 OBJ_CONSTRUCT (& (ompi_mtl_portals4 .recv_short_blocks ), opal_list_t );
@@ -241,46 +245,56 @@ ompi_mtl_portals4_recv_short_init(void)
241245 }
242246 opal_list_append (& ompi_mtl_portals4 .recv_short_blocks ,
243247 & block -> base );
244- ompi_mtl_portals4_activate_block (block );
248+ ret = ompi_mtl_portals4_activate_block (block );
245249 }
246250
247- return OMPI_SUCCESS ;
251+ return ret ;
248252}
249253
250254
251255int
252256ompi_mtl_portals4_recv_short_fini (void )
253257{
254258 opal_list_item_t * item ;
259+ int ret = OMPI_SUCCESS ;
255260
256261 OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
257262 while (NULL != (item = opal_list_remove_first (& ompi_mtl_portals4 .recv_short_blocks ))) {
258263 ompi_mtl_portals4_recv_short_block_t * block =
259264 (ompi_mtl_portals4_recv_short_block_t * ) item ;
260- ompi_mtl_portals4_recv_short_block_free (block );
265+ ret = ompi_mtl_portals4_recv_short_block_free (block );
266+ ompi_mtl_portals4 .active_recv_short_blocks -- ;
261267 }
262268 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
263269
264- return OMPI_SUCCESS ;
270+ return ret ;
265271}
266272
267273
268274int
269275ompi_mtl_portals4_recv_short_link (int count )
270276{
277+ int ret = OMPI_SUCCESS ;
271278 int active = ompi_mtl_portals4 .active_recv_short_blocks ;
272279 int i ;
273280
274281 if (active < count ) {
275282 for (i = 0 ; i < (count - active ) ; ++ i ) {
276283 ompi_mtl_portals4_recv_short_block_t * block =
277- ompi_mtl_portals4_recv_short_block_alloc (false );
284+ ompi_mtl_portals4_recv_short_block_alloc (true );
278285 if (NULL == block ) {
279286 return OMPI_ERR_OUT_OF_RESOURCE ;
280287 }
281- ompi_mtl_portals4_activate_block (block );
288+ OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
289+ opal_list_append (& ompi_mtl_portals4 .recv_short_blocks ,
290+ & block -> base );
291+ OPAL_OUTPUT_VERBOSE ((10 , ompi_mtl_base_framework .framework_output ,
292+ "recv_short_link: total=%d active=%d" ,
293+ (int ) opal_list_get_size (& ompi_mtl_portals4 .recv_short_blocks ), ompi_mtl_portals4 .active_recv_short_blocks ));
294+ OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
295+ ret = ompi_mtl_portals4_activate_block (block );
282296 }
283297 }
284298
285- return OMPI_SUCCESS ;
299+ return ret ;
286300}
0 commit comments