diff --git a/oshmem/mca/memheap/base/base.h b/oshmem/mca/memheap/base/base.h index 34e92346d5..b8da84f4d9 100644 --- a/oshmem/mca/memheap/base/base.h +++ b/oshmem/mca/memheap/base/base.h @@ -226,6 +226,11 @@ static inline sshmem_mkey_t *mca_memheap_base_get_cached_mkey(int pe, return mca_memheap_base_get_cached_mkey_slow(s, pe, va, btl_id, rva); } +static inline int mca_memheap_base_num_transports(void) +{ + return memheap_map->num_transports; +} + END_C_DECLS #endif /* MCA_MEMHEAP_BASE_H */ diff --git a/oshmem/shmem/c/shmem_addr_accessible.c b/oshmem/shmem/c/shmem_addr_accessible.c index 7d1a2486f8..8d44ff4181 100644 --- a/oshmem/shmem/c/shmem_addr_accessible.c +++ b/oshmem/shmem/c/shmem_addr_accessible.c @@ -26,10 +26,16 @@ int shmem_addr_accessible(const void *addr, int pe) { void* rva; sshmem_mkey_t *mkey; + int i; RUNTIME_CHECK_INIT(); - mkey = mca_memheap_base_get_cached_mkey(pe, (void *)addr, oshmem_get_transport_id(pe), &rva); + for (i = 0; i < mca_memheap_base_num_transports(); i++) { + mkey = mca_memheap_base_get_cached_mkey(pe, (void *)addr, i, &rva); + if (mkey) { + return 1; + } + } - return mkey ? 1 : 0; + return 0; }