Implement Jeff`s feedback: Anonymous unions handling
Refs: 3763 This commit was SVN r29771.
Этот коммит содержится в:
родитель
2faef6bc2d
Коммит
bc25091b61
@ -137,7 +137,7 @@ static int do_mkey_req(opal_buffer_t *msg, int pe, int seg)
|
||||
return OSHMEM_ERROR;
|
||||
}
|
||||
opal_dss.pack(msg, &tr_id, 1, OPAL_UINT32);
|
||||
opal_dss.pack(msg, &mkey->key, 1, OPAL_UINT64);
|
||||
opal_dss.pack(msg, &mkey->handle.key, 1, OPAL_UINT64);
|
||||
opal_dss.pack(msg, &mkey->va_base, 1, OPAL_UINT64);
|
||||
|
||||
if (NULL != MCA_SPML_CALL(get_remote_context_size)) {
|
||||
@ -156,7 +156,7 @@ static int do_mkey_req(opal_buffer_t *msg, int pe, int seg)
|
||||
|
||||
MEMHEAP_VERBOSE(5,
|
||||
"seg#%d tr_id: %d key %llx base_va %p",
|
||||
seg, tr_id, (unsigned long long)mkey->key, mkey->va_base);
|
||||
seg, tr_id, (unsigned long long)mkey->handle.key, mkey->va_base);
|
||||
}
|
||||
return OSHMEM_SUCCESS;
|
||||
}
|
||||
@ -169,20 +169,20 @@ static void memheap_attach_segment(mca_spml_mkey_t *mkey, int tr_id)
|
||||
* - va_base is set as 0;
|
||||
*/
|
||||
if (!mkey->va_base
|
||||
&& ((int) MEMHEAP_SHM_GET_ID(mkey->key) != MEMHEAP_SHM_INVALID)) {
|
||||
&& ((int) MEMHEAP_SHM_GET_ID(mkey->handle.key) != MEMHEAP_SHM_INVALID)) {
|
||||
MEMHEAP_VERBOSE(5,
|
||||
"shared memory usage tr_id: %d key %llx base_va %p shmid 0x%X|0x%X",
|
||||
tr_id,
|
||||
(unsigned long long)mkey->key,
|
||||
(unsigned long long)mkey->handle.key,
|
||||
mkey->va_base,
|
||||
MEMHEAP_SHM_GET_TYPE(mkey->key),
|
||||
MEMHEAP_SHM_GET_ID(mkey->key));
|
||||
MEMHEAP_SHM_GET_TYPE(mkey->handle.key),
|
||||
MEMHEAP_SHM_GET_ID(mkey->handle.key));
|
||||
|
||||
if (MEMHEAP_SHM_GET_TYPE(mkey->key) == MAP_SEGMENT_ALLOC_SHM) {
|
||||
mkey->va_base = shmat(MEMHEAP_SHM_GET_ID(mkey->key),
|
||||
if (MEMHEAP_SHM_GET_TYPE(mkey->handle.key) == MAP_SEGMENT_ALLOC_SHM) {
|
||||
mkey->va_base = shmat(MEMHEAP_SHM_GET_ID(mkey->handle.key),
|
||||
0,
|
||||
0);
|
||||
} else if (MEMHEAP_SHM_GET_TYPE(mkey->key) == MAP_SEGMENT_ALLOC_IBV) {
|
||||
} else if (MEMHEAP_SHM_GET_TYPE(mkey->handle.key) == MAP_SEGMENT_ALLOC_IBV) {
|
||||
#if defined(MPAGE_ENABLE) && (MPAGE_ENABLE > 0)
|
||||
openib_device_t *device = NULL;
|
||||
struct ibv_mr *ib_mr;
|
||||
@ -200,7 +200,7 @@ static void memheap_attach_segment(mca_spml_mkey_t *mkey, int tr_id)
|
||||
/* workaround mtt problem - request aligned addresses */
|
||||
++mr_count;
|
||||
addr = (void *)(mca_memheap_base_start_address + mca_memheap_base_mr_interleave_factor*1024ULL*1024ULL*1024ULL*mr_count);
|
||||
ib_mr = ibv_reg_shared_mr(MEMHEAP_SHM_GET_ID(mkey->key),
|
||||
ib_mr = ibv_reg_shared_mr(MEMHEAP_SHM_GET_ID(mkey->handle.key),
|
||||
device->ib_pd, addr, access_flag);
|
||||
if (NULL == ib_mr)
|
||||
{
|
||||
@ -221,15 +221,15 @@ static void memheap_attach_segment(mca_spml_mkey_t *mkey, int tr_id)
|
||||
} else {
|
||||
MEMHEAP_ERROR("tr_id: %d key %llx attach failed: incorrect shmid 0x%X|0x%X",
|
||||
tr_id,
|
||||
(unsigned long long)mkey->key,
|
||||
MEMHEAP_SHM_GET_TYPE(mkey->key),
|
||||
MEMHEAP_SHM_GET_ID(mkey->key));
|
||||
(unsigned long long)mkey->handle.key,
|
||||
MEMHEAP_SHM_GET_TYPE(mkey->handle.key),
|
||||
MEMHEAP_SHM_GET_ID(mkey->handle.key));
|
||||
oshmem_shmem_abort(-1);
|
||||
}
|
||||
|
||||
if ((void *) -1 == (void *) mkey->va_base) {
|
||||
MEMHEAP_ERROR("tr_id: %d key %llx attach failed: errno = %d",
|
||||
tr_id, (unsigned long long)mkey->key, errno);
|
||||
tr_id, (unsigned long long)mkey->handle.key, errno);
|
||||
oshmem_shmem_abort(-1);
|
||||
}
|
||||
}
|
||||
@ -246,7 +246,7 @@ static void do_mkey_resp(opal_buffer_t *msg)
|
||||
opal_dss.unpack(msg, &n, &cnt, OPAL_UINT32);
|
||||
for (i = 0; i < n; i++) {
|
||||
opal_dss.unpack(msg, &tr_id, &cnt, OPAL_UINT32);
|
||||
opal_dss.unpack(msg, &memheap_oob.mkeys[tr_id].key, &cnt, OPAL_UINT64);
|
||||
opal_dss.unpack(msg, &memheap_oob.mkeys[tr_id].handle.key, &cnt, OPAL_UINT64);
|
||||
opal_dss.unpack(msg,
|
||||
&memheap_oob.mkeys[tr_id].va_base,
|
||||
&cnt,
|
||||
@ -268,7 +268,7 @@ static void do_mkey_resp(opal_buffer_t *msg)
|
||||
|
||||
MEMHEAP_VERBOSE(5,
|
||||
"tr_id: %d key %llx base_va %p",
|
||||
tr_id, (unsigned long long)memheap_oob.mkeys[tr_id].key, memheap_oob.mkeys[tr_id].va_base);
|
||||
tr_id, (unsigned long long)memheap_oob.mkeys[tr_id].handle.key, memheap_oob.mkeys[tr_id].va_base);
|
||||
}
|
||||
}
|
||||
|
||||
@ -404,7 +404,7 @@ static int memheap_oob_get_mkeys(int pe, uint32_t seg, mca_spml_mkey_t *mkeys)
|
||||
"MKEY CALCULATED BY LOCAL SPML: pe: %d tr_id: %d key %llx base_va %p",
|
||||
pe,
|
||||
i,
|
||||
(unsigned long long)mkeys[i].key,
|
||||
(unsigned long long)mkeys[i].handle.key,
|
||||
mkeys[i].va_base);
|
||||
}
|
||||
return OSHMEM_SUCCESS;
|
||||
@ -552,14 +552,14 @@ mca_spml_mkey_t * mca_memheap_base_get_cached_mkey(int pe,
|
||||
if (pe == oshmem_my_proc_id()) {
|
||||
*rva = va;
|
||||
MEMHEAP_VERBOSE_FASTPATH(10, "rkey: pe=%d va=%p -> (local) %lx %p", pe, va,
|
||||
s->mkeys[btl_id].key, *rva);
|
||||
s->mkeys[btl_id].handle.key, *rva);
|
||||
return &s->mkeys[btl_id];
|
||||
}
|
||||
|
||||
if (OPAL_LIKELY(s->mkeys_cache[pe])) {
|
||||
mkey = &s->mkeys_cache[pe][btl_id];
|
||||
*rva = va2rva(va, s->start, mkey->va_base);
|
||||
MEMHEAP_VERBOSE_FASTPATH(10, "rkey: pe=%d va=%p -> (cached) %lx %p", pe, (void *)va, mkey->key, (void *)*rva);
|
||||
MEMHEAP_VERBOSE_FASTPATH(10, "rkey: pe=%d va=%p -> (cached) %lx %p", pe, (void *)va, mkey->handle.key, (void *)*rva);
|
||||
return mkey;
|
||||
}
|
||||
|
||||
@ -577,7 +577,7 @@ mca_spml_mkey_t * mca_memheap_base_get_cached_mkey(int pe,
|
||||
mkey = &s->mkeys_cache[pe][btl_id];
|
||||
*rva = va2rva(va, s->start, mkey->va_base);
|
||||
|
||||
MEMHEAP_VERBOSE_FASTPATH(5, "rkey: pe=%d va=%p -> (remote lookup) %lx %p", pe, (void *)va, mkey->key, (void *)*rva);
|
||||
MEMHEAP_VERBOSE_FASTPATH(5, "rkey: pe=%d va=%p -> (remote lookup) %lx %p", pe, (void *)va, mkey->handle.key, (void *)*rva);
|
||||
return mkey;
|
||||
}
|
||||
|
||||
|
@ -542,16 +542,16 @@ mca_spml_mkey_t *mca_spml_ikrit_register(void* addr,
|
||||
switch (i) {
|
||||
case MXM_PTL_SHM:
|
||||
if ((int) MEMHEAP_SHM_GET_ID(shmid) != MEMHEAP_SHM_INVALID) {
|
||||
mkeys[i].key = shmid;
|
||||
mkeys[i].handle.key = shmid;
|
||||
mkeys[i].va_base = 0;
|
||||
} else {
|
||||
mkeys[i].key = 0;
|
||||
mkeys[i].handle.key = 0;
|
||||
mkeys[i].va_base = addr;
|
||||
}
|
||||
mkeys[i].spml_context = 0;
|
||||
break;
|
||||
case MXM_PTL_SELF:
|
||||
mkeys[i].key = 0;
|
||||
mkeys[i].handle.key = 0;
|
||||
mkeys[i].spml_context = 0;
|
||||
mkeys[i].va_base = addr;
|
||||
break;
|
||||
@ -559,11 +559,11 @@ mca_spml_mkey_t *mca_spml_ikrit_register(void* addr,
|
||||
mkeys[i].va_base = addr;
|
||||
mkeys[i].spml_context = 0;
|
||||
#if MXM_API < MXM_VERSION(1,5)
|
||||
mkeys[i].ib.lkey = mkeys[i].ib.rkey = MXM_MKEY_NONE;
|
||||
mkeys[i].handle.ib.lkey = mkeys[i].handle.ib.rkey = MXM_MKEY_NONE;
|
||||
#elif MXM_API < MXM_VERSION(2,0)
|
||||
mkeys[i].ib.lkey = mkeys[i].ib.rkey = 0;
|
||||
mkeys[i].handle.ib.lkey = mkeys[i].handle.ib.rkey = 0;
|
||||
#else
|
||||
mkeys[i].ib.lkey = mkeys[i].ib.rkey = 0;
|
||||
mkeys[i].handle.ib.lkey = mkeys[i].handle.ib.rkey = 0;
|
||||
err = mxm_mem_map(mca_spml_ikrit.mxm_context, &addr, &size, 0, 0, 0);
|
||||
if (MXM_OK != err) {
|
||||
SPML_VERBOSE(1, "failed to register memory: %s", mxm_error_string(err));
|
||||
@ -579,7 +579,7 @@ mca_spml_mkey_t *mca_spml_ikrit_register(void* addr,
|
||||
}
|
||||
SPML_VERBOSE(5,
|
||||
"rank %d ptl %d rkey %x lkey %x key %llx address 0x%llX len %llu shmid 0x%X|0x%X",
|
||||
oshmem_proc_local_proc->proc_name.vpid, i, mkeys[i].ib.rkey, mkeys[i].ib.lkey, (unsigned long long)mkeys[i].key, (unsigned long long)mkeys[i].va_base, (unsigned long long)size, MEMHEAP_SHM_GET_TYPE(shmid), MEMHEAP_SHM_GET_ID(shmid));
|
||||
oshmem_proc_local_proc->proc_name.vpid, i, mkeys[i].handle.ib.rkey, mkeys[i].handle.ib.lkey, (unsigned long long)mkeys[i].handle.key, (unsigned long long)mkeys[i].va_base, (unsigned long long)size, MEMHEAP_SHM_GET_TYPE(shmid), MEMHEAP_SHM_GET_ID(shmid));
|
||||
|
||||
}
|
||||
*count = MXM_PTL_LAST;
|
||||
@ -694,7 +694,7 @@ static int mca_spml_ikrit_get_helper(mxm_send_req_t *sreq,
|
||||
|
||||
SPML_VERBOSE(100,
|
||||
"get: pe:%d ptl=%d src=%p -> dst: %p sz=%d. src_rva=%p, src_rkey=0x%lx",
|
||||
src, ptl_id, src_addr, dst_addr, (int)size, (void *)rva, r_mkey->key);
|
||||
src, ptl_id, src_addr, dst_addr, (int)size, (void *)rva, r_mkey->handle.key);
|
||||
|
||||
/* mxm does not really cares for get lkey */
|
||||
sreq->base.mq = mca_spml_ikrit.mxm_mq;
|
||||
@ -704,7 +704,7 @@ static int mca_spml_ikrit_get_helper(mxm_send_req_t *sreq,
|
||||
sreq->base.data.buffer.length = size;
|
||||
#if MXM_API < MXM_VERSION(1,5)
|
||||
sreq->base.data.buffer.mkey = MXM_MKEY_NONE;
|
||||
sreq->op.mem.remote_mkey = r_mkey->ib.rkey;
|
||||
sreq->op.mem.remote_mkey = r_mkey->handle.ib.rkey;
|
||||
#elif MXM_API < MXM_VERSION(2,0)
|
||||
sreq->base.data.buffer.memh = NULL;
|
||||
sreq->op.mem.remote_memh = NULL;
|
||||
@ -750,7 +750,7 @@ static inline int mca_spml_ikrit_get_shm(void *src_addr,
|
||||
|
||||
SPML_VERBOSE(100,
|
||||
"shm get: pe:%d src=%p -> dst: %p sz=%d. src_rva=%p, src_rkey=0x%lx",
|
||||
src, src_addr, dst_addr, (int)size, (void *)rva, r_mkey->key);
|
||||
src, src_addr, dst_addr, (int)size, (void *)rva, r_mkey->handle.key);
|
||||
memcpy(dst_addr, (void *) (unsigned long) rva, size);
|
||||
opal_progress();
|
||||
return OSHMEM_SUCCESS;
|
||||
@ -986,7 +986,7 @@ static inline int mca_spml_ikrit_put_internal(void* dst_addr,
|
||||
#if SPML_IKRIT_PUT_DEBUG == 1
|
||||
|
||||
SPML_VERBOSE(100, "put: pe:%d ptl=%d dst=%p <- src: %p sz=%d. dst_rva=%p, dst_rkey=0x%lx",
|
||||
dst, ptl_id, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->key);
|
||||
dst, ptl_id, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->handle.key);
|
||||
#endif
|
||||
if (ptl_id == MXM_PTL_SHM) {
|
||||
|
||||
@ -1013,7 +1013,7 @@ static inline int mca_spml_ikrit_put_internal(void* dst_addr,
|
||||
|
||||
#if SPML_IKRIT_PUT_DEBUG == 1
|
||||
SPML_VERBOSE(100, "put: pe:%d ptl=%d dst=%p <- src: %p sz=%d. dst_rva=%p, dst_rkey=0x%lx",
|
||||
dst, ptl_id, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->key);
|
||||
dst, ptl_id, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->handle.key);
|
||||
#endif
|
||||
|
||||
put_req = alloc_put_req();
|
||||
@ -1065,7 +1065,7 @@ static inline int mca_spml_ikrit_put_internal(void* dst_addr,
|
||||
|
||||
#if MXM_API < MXM_VERSION(1,5)
|
||||
put_req->mxm_req.base.data.buffer.mkey = MXM_MKEY_NONE;
|
||||
put_req->mxm_req.op.mem.remote_mkey = r_mkey->ib.rkey;
|
||||
put_req->mxm_req.op.mem.remote_mkey = r_mkey->handle.ib.rkey;
|
||||
#elif MXM_API < MXM_VERSION(2, 0)
|
||||
put_req->mxm_req.base.data.buffer.memh = NULL;
|
||||
put_req->mxm_req.op.mem.remote_memh = NULL;
|
||||
@ -1162,7 +1162,7 @@ int mca_spml_ikrit_put_simple(void* dst_addr,
|
||||
|
||||
#if SPML_IKRIT_PUT_DEBUG == 1
|
||||
SPML_VERBOSE(100, "put: pe:%d ptl=%d dst=%p <- src: %p sz=%d. dst_rva=%p, dst_rkey=0x%lx",
|
||||
dst, ptl_id, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->key);
|
||||
dst, ptl_id, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->handle.key);
|
||||
#endif
|
||||
if (ptl_id == MXM_PTL_SHM) {
|
||||
|
||||
@ -1190,7 +1190,7 @@ int mca_spml_ikrit_put_simple(void* dst_addr,
|
||||
|
||||
#if SPML_IKRIT_PUT_DEBUG == 1
|
||||
SPML_VERBOSE(100, "put: pe:%d ptl=%d dst=%p <- src: %p sz=%d. dst_rva=%p, dst_rkey=0x%lx",
|
||||
dst, ptl_id, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->key);
|
||||
dst, ptl_id, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->handle.key);
|
||||
#endif
|
||||
|
||||
/* fill out request */
|
||||
|
@ -79,7 +79,7 @@ typedef struct mca_spml_mkey {
|
||||
uint32_t lkey;
|
||||
} ib;
|
||||
uint64_t key;
|
||||
};
|
||||
} handle;
|
||||
void* va_base;
|
||||
void *spml_context; /* spml module can attach internal structures here */
|
||||
} mca_spml_mkey_t;
|
||||
|
@ -369,7 +369,7 @@ mca_spml_mkey_t *mca_spml_yoda_register(void* addr,
|
||||
/* If we have shared memory just save its id*/
|
||||
if ((ybtl->btl_type == YODA_BTL_SM)
|
||||
&& ((int) MEMHEAP_SHM_GET_ID(shmid) != MEMHEAP_SHM_INVALID)) {
|
||||
mkeys[i].key = shmid;
|
||||
mkeys[i].handle.key = shmid;
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -432,7 +432,7 @@ mca_spml_mkey_t *mca_spml_yoda_register(void* addr,
|
||||
|
||||
SPML_VERBOSE(5,
|
||||
"rank %d btl %s rkey %x lkey %x key %llx address 0x%p len %llu shmid 0x%X|0x%X",
|
||||
oshmem_proc_local_proc->proc_name.vpid, btl_type2str(ybtl->btl_type), mkeys[i].ib.rkey, mkeys[i].ib.lkey, (unsigned long long)mkeys[i].key, mkeys[i].va_base, (unsigned long long)size, MEMHEAP_SHM_GET_TYPE(shmid), MEMHEAP_SHM_GET_ID(shmid));
|
||||
oshmem_proc_local_proc->proc_name.vpid, btl_type2str(ybtl->btl_type), mkeys[i].handle.ib.rkey, mkeys[i].handle.ib.lkey, (unsigned long long)mkeys[i].handle.key, mkeys[i].va_base, (unsigned long long)size, MEMHEAP_SHM_GET_TYPE(shmid), MEMHEAP_SHM_GET_ID(shmid));
|
||||
}
|
||||
OBJ_DESTRUCT(&convertor);
|
||||
*count = mca_spml_yoda.n_btls;
|
||||
@ -760,7 +760,7 @@ static inline int mca_spml_yoda_put_internal(void *dst_addr,
|
||||
|
||||
#if SPML_YODA_DEBUG == 1
|
||||
SPML_VERBOSE(100, "put: pe:%d dst=%p <- src: %p sz=%d. dst_rva=%p, dst_rkey=0x%lx",
|
||||
dst, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->key);
|
||||
dst, dst_addr, src_addr, (int)size, (void *)rva, r_mkey->handle.key);
|
||||
#endif
|
||||
|
||||
ybtl = &mca_spml_yoda.btl_type_map[btl_id];
|
||||
@ -1042,7 +1042,7 @@ int mca_spml_yoda_get(void* src_addr, size_t size, void* dst_addr, int src)
|
||||
}
|
||||
#if SPML_YODA_DEBUG == 1
|
||||
SPML_VERBOSE(100, "get: pe:%d src=%p -> dst: %p sz=%d. src_rva=%p, src_rkey=0x%lx",
|
||||
src, src_addr, dst_addr, (int)size, (void *)rva, r_mkey->key);
|
||||
src, src_addr, dst_addr, (int)size, (void *)rva, r_mkey->handle.key);
|
||||
#endif
|
||||
|
||||
ybtl = &mca_spml_yoda.btl_type_map[btl_id];
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user