@@ -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 ;
@@ -59,10 +60,10 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
5960 opal_list_remove_item (& ompi_mtl_portals4 .recv_short_blocks ,
6061 & block -> base );
6162 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
62- ompi_mtl_portals4_recv_short_block_free (block );
63+ ret = ompi_mtl_portals4_recv_short_block_free (block );
6364 } else {
6465 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
65- ompi_mtl_portals4_activate_block (block );
66+ ret = ompi_mtl_portals4_activate_block (block );
6667 }
6768 break ;
6869
@@ -85,6 +86,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
8586 break ;
8687
8788 case PTL_EVENT_AUTO_UNLINK :
89+ block -> me_h = PTL_INVALID_HANDLE ;
8890#if OMPI_ENABLE_THREAD_MULTIPLE
8991 OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
9092 switch (block -> status ) {
@@ -99,12 +101,12 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
99101 opal_list_remove_item (& ompi_mtl_portals4 .recv_short_blocks ,
100102 & block -> base );
101103 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
102- ompi_mtl_portals4_recv_short_block_free (block );
104+ ret = ompi_mtl_portals4_recv_short_block_free (block );
103105 } else {
104106 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
105107 OPAL_OUTPUT_VERBOSE ((10 , ompi_mtl_base_framework .framework_output ,
106108 "mtl:portals4 PTL_EVENT_AUTO_UNLINK received after PTL_EVENT_AUTO_FREE" ));
107- ompi_mtl_portals4_activate_block (block );
109+ ret = ompi_mtl_portals4_activate_block (block );
108110 }
109111 break ;
110112
@@ -150,7 +152,7 @@ ompi_mtl_portals4_recv_block_progress(ptl_event_t *ev,
150152 break ;
151153 }
152154
153- return OMPI_SUCCESS ;
155+ return ret ;
154156}
155157
156158
@@ -210,6 +212,7 @@ ompi_mtl_portals4_activate_block(ompi_mtl_portals4_recv_short_block_t *block)
210212 me .uid = ompi_mtl_portals4 .uid ;
211213 me .options =
212214 PTL_ME_OP_PUT |
215+ PTL_ME_EVENT_COMM_DISABLE |
213216 PTL_ME_MANAGE_LOCAL |
214217 PTL_ME_MAY_ALIGN ;
215218 if (ompi_mtl_portals4 .use_logical ) {
@@ -244,7 +247,8 @@ ompi_mtl_portals4_activate_block(ompi_mtl_portals4_recv_short_block_t *block)
244247int
245248ompi_mtl_portals4_recv_short_init (void )
246249{
247- int i ;
250+ int ret = OMPI_SUCCESS ;
251+ uint32_t i ;
248252
249253 OBJ_CONSTRUCT (& ompi_mtl_portals4 .short_block_mutex , opal_mutex_t );
250254 OBJ_CONSTRUCT (& (ompi_mtl_portals4 .recv_short_blocks ), opal_list_t );
@@ -258,46 +262,56 @@ ompi_mtl_portals4_recv_short_init(void)
258262 }
259263 opal_list_append (& ompi_mtl_portals4 .recv_short_blocks ,
260264 & block -> base );
261- ompi_mtl_portals4_activate_block (block );
265+ ret = ompi_mtl_portals4_activate_block (block );
262266 }
263267
264- return OMPI_SUCCESS ;
268+ return ret ;
265269}
266270
267271
268272int
269273ompi_mtl_portals4_recv_short_fini (void )
270274{
271275 opal_list_item_t * item ;
276+ int ret = OMPI_SUCCESS ;
272277
273278 OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
274279 while (NULL != (item = opal_list_remove_first (& ompi_mtl_portals4 .recv_short_blocks ))) {
275280 ompi_mtl_portals4_recv_short_block_t * block =
276281 (ompi_mtl_portals4_recv_short_block_t * ) item ;
277- ompi_mtl_portals4_recv_short_block_free (block );
282+ ret = ompi_mtl_portals4_recv_short_block_free (block );
283+ ompi_mtl_portals4 .active_recv_short_blocks -- ;
278284 }
279285 OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
280286
281- return OMPI_SUCCESS ;
287+ return ret ;
282288}
283289
284290
285291int
286292ompi_mtl_portals4_recv_short_link (int count )
287293{
294+ int ret = OMPI_SUCCESS ;
288295 int active = ompi_mtl_portals4 .active_recv_short_blocks ;
289296 int i ;
290297
291298 if (active < count ) {
292299 for (i = 0 ; i < (count - active ) ; ++ i ) {
293300 ompi_mtl_portals4_recv_short_block_t * block =
294- ompi_mtl_portals4_recv_short_block_alloc (false );
301+ ompi_mtl_portals4_recv_short_block_alloc (true );
295302 if (NULL == block ) {
296303 return OMPI_ERR_OUT_OF_RESOURCE ;
297304 }
298- ompi_mtl_portals4_activate_block (block );
305+ OPAL_THREAD_LOCK (& ompi_mtl_portals4 .short_block_mutex );
306+ opal_list_append (& ompi_mtl_portals4 .recv_short_blocks ,
307+ & block -> base );
308+ OPAL_OUTPUT_VERBOSE ((10 , ompi_mtl_base_framework .framework_output ,
309+ "recv_short_link: total=%d active=%d" ,
310+ (int ) opal_list_get_size (& ompi_mtl_portals4 .recv_short_blocks ), ompi_mtl_portals4 .active_recv_short_blocks ));
311+ OPAL_THREAD_UNLOCK (& ompi_mtl_portals4 .short_block_mutex );
312+ ret = ompi_mtl_portals4_activate_block (block );
299313 }
300314 }
301315
302- return OMPI_SUCCESS ;
316+ return ret ;
303317}
0 commit comments