@@ -55,6 +55,7 @@ struct oob_comm {
5555 oob_comm_request_t req_pool [MEMHEAP_RECV_REQS_MAX ];
5656 opal_list_t req_list ;
5757 int is_inited ;
58+ shmem_ctx_t ctx ;
5859};
5960
6061mca_memheap_map_t * memheap_map = NULL ;
@@ -66,7 +67,7 @@ static int send_buffer(int pe, opal_buffer_t *msg);
6667static int oshmem_mkey_recv_cb (void );
6768
6869/* pickup list of rkeys and remote va */
69- static int memheap_oob_get_mkeys (int pe ,
70+ static int memheap_oob_get_mkeys (shmem_ctx_t ctx , int pe ,
7071 uint32_t va_seg_num ,
7172 sshmem_mkey_t * mkey );
7273
@@ -142,7 +143,7 @@ static void memheap_attach_segment(sshmem_mkey_t *mkey, int tr_id)
142143}
143144
144145
145- static void unpack_remote_mkeys (opal_buffer_t * msg , int remote_pe )
146+ static void unpack_remote_mkeys (shmem_ctx_t ctx , opal_buffer_t * msg , int remote_pe )
146147{
147148 int32_t cnt ;
148149 int32_t n ;
@@ -182,7 +183,7 @@ static void unpack_remote_mkeys(opal_buffer_t *msg, int remote_pe)
182183 } else {
183184 memheap_oob .mkeys [tr_id ].u .key = MAP_SEGMENT_SHM_INVALID ;
184185 }
185- MCA_SPML_CALL (rmkey_unpack (& memheap_oob .mkeys [tr_id ], memheap_oob .segno , remote_pe , tr_id ));
186+ MCA_SPML_CALL (rmkey_unpack (ctx , & memheap_oob .mkeys [tr_id ], memheap_oob .segno , remote_pe , tr_id ));
186187 }
187188
188189 MEMHEAP_VERBOSE (5 ,
@@ -242,7 +243,7 @@ static void do_recv(int source_pe, opal_buffer_t* buffer)
242243 case MEMHEAP_RKEY_RESP :
243244 MEMHEAP_VERBOSE (5 , "*** RKEY RESP" );
244245 OPAL_THREAD_LOCK (& memheap_oob .lck );
245- unpack_remote_mkeys (buffer , source_pe );
246+ unpack_remote_mkeys (memheap_oob . ctx , buffer , source_pe );
246247 memheap_oob .mkeys_rcvd = MEMHEAP_RKEY_RESP ;
247248 opal_condition_broadcast (& memheap_oob .cond );
248249 OPAL_THREAD_UNLOCK (& memheap_oob .lck );
@@ -455,14 +456,14 @@ static int send_buffer(int pe, opal_buffer_t *msg)
455456 return rc ;
456457}
457458
458- static int memheap_oob_get_mkeys (int pe , uint32_t seg , sshmem_mkey_t * mkeys )
459+ static int memheap_oob_get_mkeys (shmem_ctx_t ctx , int pe , uint32_t seg , sshmem_mkey_t * mkeys )
459460{
460461 opal_buffer_t * msg ;
461462 uint8_t cmd ;
462463 int i ;
463464 int rc ;
464465
465- if (OSHMEM_SUCCESS == MCA_SPML_CALL (oob_get_mkeys (pe , seg , mkeys ))) {
466+ if (OSHMEM_SUCCESS == MCA_SPML_CALL (oob_get_mkeys (ctx , pe , seg , mkeys ))) {
466467 for (i = 0 ; i < memheap_map -> num_transports ; i ++ ) {
467468 MEMHEAP_VERBOSE (5 ,
468469 "MKEY CALCULATED BY LOCAL SPML: pe: %d tr_id: %d %s" ,
@@ -478,6 +479,7 @@ static int memheap_oob_get_mkeys(int pe, uint32_t seg, sshmem_mkey_t *mkeys)
478479 memheap_oob .mkeys = mkeys ;
479480 memheap_oob .segno = seg ;
480481 memheap_oob .mkeys_rcvd = 0 ;
482+ memheap_oob .ctx = ctx ;
481483
482484 msg = OBJ_NEW (opal_buffer_t );
483485 if (!msg ) {
@@ -645,7 +647,7 @@ void mca_memheap_modex_recv_all(void)
645647 }
646648 memheap_oob .mkeys = s -> mkeys_cache [i ];
647649 memheap_oob .segno = j ;
648- unpack_remote_mkeys (msg , i );
650+ unpack_remote_mkeys (oshmem_ctx_default , msg , i );
649651 }
650652 }
651653
@@ -674,7 +676,8 @@ void mca_memheap_modex_recv_all(void)
674676 }
675677}
676678
677- sshmem_mkey_t * mca_memheap_base_get_cached_mkey_slow (map_segment_t * s ,
679+ sshmem_mkey_t * mca_memheap_base_get_cached_mkey_slow (shmem_ctx_t ctx ,
680+ map_segment_t * s ,
678681 int pe ,
679682 void * va ,
680683 int btl_id ,
@@ -692,7 +695,7 @@ sshmem_mkey_t * mca_memheap_base_get_cached_mkey_slow(map_segment_t *s,
692695 if (!s -> mkeys_cache [pe ])
693696 return NULL ;
694697
695- rc = memheap_oob_get_mkeys (pe ,
698+ rc = memheap_oob_get_mkeys (ctx , pe ,
696699 s - memheap_map -> mem_segs ,
697700 s -> mkeys_cache [pe ]);
698701 if (OSHMEM_SUCCESS != rc )
0 commit comments