diff --git a/ompi/mca/btl/gm/btl_gm.c b/ompi/mca/btl/gm/btl_gm.c index 5e740bac46..7a60b7b879 100644 --- a/ompi/mca/btl/gm/btl_gm.c +++ b/ompi/mca/btl/gm/btl_gm.c @@ -28,6 +28,7 @@ #include "btl_gm_proc.h" #include "btl_gm_endpoint.h" #include "datatype/convertor.h" +#include "datatype/datatype.h" #include "mca/mpool/base/base.h" #include "mca/mpool/mpool.h" #include "ompi/proc/proc.h" @@ -379,6 +380,7 @@ mca_btl_base_descriptor_t* mca_btl_gm_prepare_dst( #if (OMPI_MCA_BTL_GM_HAVE_RDMA_GET || OMPI_MCA_BTL_GM_HAVE_RDMA_PUT) mca_btl_gm_frag_t* frag; mca_mpool_base_module_t* mpool = btl->btl_mpool; + long lb; int rc; MCA_BTL_GM_FRAG_ALLOC_USER(btl, frag, rc); @@ -386,8 +388,9 @@ mca_btl_base_descriptor_t* mca_btl_gm_prepare_dst( return NULL; } + ompi_ddt_type_lb(convertor, &lb); frag->segment.seg_len = *size; - frag->segment.seg_addr.pval = convertor->pBaseBuf + convertor->bConverted; + frag->segment.seg_addr.pval = convertor->pBaseBuf + lb + convertor->bConverted; frag->base.des_src = NULL; frag->base.des_src_cnt = 0; diff --git a/ompi/mca/btl/mvapi/btl_mvapi.c b/ompi/mca/btl/mvapi/btl_mvapi.c index 729ea7357f..de60778ad6 100644 --- a/ompi/mca/btl/mvapi/btl_mvapi.c +++ b/ompi/mca/btl/mvapi/btl_mvapi.c @@ -28,6 +28,7 @@ #include "btl_mvapi_proc.h" #include "btl_mvapi_endpoint.h" #include "datatype/convertor.h" +#include "datatype/datatype.h" #include "mca/mpool/base/base.h" #include "mca/mpool/mpool.h" #include "mca/mpool/mvapi/mpool_mvapi.h" @@ -454,6 +455,7 @@ mca_btl_base_descriptor_t* mca_btl_mvapi_prepare_dst( mca_btl_mvapi_module_t* mvapi_btl; mca_btl_mvapi_frag_t* frag; mca_mpool_mvapi_registration_t * vapi_reg; + long lb; int rc; mvapi_btl = (mca_btl_mvapi_module_t*) btl; @@ -465,9 +467,9 @@ mca_btl_base_descriptor_t* mca_btl_mvapi_prepare_dst( return NULL; } - + ompi_ddt_type_lb(convertor, &lb); frag->segment.seg_len = *size; - frag->segment.seg_addr.pval = convertor->pBaseBuf + convertor->bConverted; + frag->segment.seg_addr.pval = convertor->pBaseBuf + lb + convertor->bConverted; frag->base.des_flags = 0; if(NULL!= vapi_reg){ diff --git a/ompi/mca/btl/openib/btl_openib.c b/ompi/mca/btl/openib/btl_openib.c index 5bcc11b27e..493ba1993f 100644 --- a/ompi/mca/btl/openib/btl_openib.c +++ b/ompi/mca/btl/openib/btl_openib.c @@ -29,6 +29,7 @@ #include "btl_openib_proc.h" #include "btl_openib_endpoint.h" #include "datatype/convertor.h" +#include "datatype/datatype.h" #include "mca/mpool/base/base.h" #include "mca/mpool/mpool.h" #include "mca/mpool/openib/mpool_openib.h" @@ -455,6 +456,7 @@ mca_btl_base_descriptor_t* mca_btl_openib_prepare_dst( mca_btl_openib_frag_t* frag; mca_mpool_openib_registration_t * openib_reg; int rc; + long lb; size_t reg_len; openib_btl = (mca_btl_openib_module_t*) btl; @@ -466,9 +468,9 @@ mca_btl_base_descriptor_t* mca_btl_openib_prepare_dst( return NULL; } - + ompi_ddt_type_lb(convertor, &lb); frag->segment.seg_len = *size; - frag->segment.seg_addr.pval = convertor->pBaseBuf + convertor->bConverted; + frag->segment.seg_addr.pval = convertor->pBaseBuf + lb + convertor->bConverted; frag->base.des_flags = 0; if(NULL!= openib_reg){ diff --git a/ompi/mca/btl/self/btl_self.c b/ompi/mca/btl/self/btl_self.c index cd1575713c..2ba5d233c4 100644 --- a/ompi/mca/btl/self/btl_self.c +++ b/ompi/mca/btl/self/btl_self.c @@ -27,6 +27,7 @@ #include "opal/threads/mutex.h" #include "ompi/datatype/convertor.h" +#include "ompi/datatype/datatype.h" #include "include/sys/atomic.h" #include "opal/util/output.h" #include "opal/util/if.h" @@ -261,6 +262,7 @@ struct mca_btl_base_descriptor_t* mca_btl_self_prepare_dst( { mca_btl_self_frag_t* frag; size_t max_data = *size; + long lb; int rc; MCA_BTL_SELF_FRAG_ALLOC_RDMA(frag, rc); @@ -269,7 +271,8 @@ struct mca_btl_base_descriptor_t* mca_btl_self_prepare_dst( } /* setup descriptor to point directly to user buffer */ - frag->segment.seg_addr.pval = (unsigned char*)convertor->pBaseBuf + convertor->bConverted; + ompi_ddt_type_lb( convertor->pDesc, &lb ); + frag->segment.seg_addr.pval = (unsigned char*)convertor->pBaseBuf + lb + convertor->bConverted; frag->segment.seg_len = reserve + max_data; frag->base.des_src = NULL; frag->base.des_src_cnt = 0; diff --git a/ompi/mca/btl/tcp/btl_tcp.c b/ompi/mca/btl/tcp/btl_tcp.c index 781d794463..dcbe525667 100644 --- a/ompi/mca/btl/tcp/btl_tcp.c +++ b/ompi/mca/btl/tcp/btl_tcp.c @@ -28,6 +28,7 @@ #include "btl_tcp_proc.h" #include "btl_tcp_endpoint.h" #include "datatype/convertor.h" +#include "datatype/datatype.h" #include "mca/mpool/base/base.h" #include "mca/mpool/mpool.h" #include "ompi/proc/proc.h" @@ -330,6 +331,7 @@ mca_btl_base_descriptor_t* mca_btl_tcp_prepare_dst( size_t* size) { mca_btl_tcp_frag_t* frag; + long lb; int rc; MCA_BTL_TCP_FRAG_ALLOC_USER(frag, rc); @@ -337,8 +339,9 @@ mca_btl_base_descriptor_t* mca_btl_tcp_prepare_dst( return NULL; } + ompi_ddt_type_lb(convertor, &lb); frag->segments->seg_len = *size; - frag->segments->seg_addr.pval = convertor->pBaseBuf + convertor->bConverted; + frag->segments->seg_addr.pval = convertor->pBaseBuf + lb + convertor->bConverted; frag->base.des_src = NULL; frag->base.des_src_cnt = 0;