/** * Allocate a segment. * * @param btl (IN) BTL module * @param size (IN) Request segment size. */ mca_btl_base_descriptor_t* mca_btl_self_alloc( struct mca_btl_base_module_t* btl, size_t size ) { mca_btl_self_frag_t* frag; int rc; if(size <= mca_btl_self.btl_eager_limit) { MCA_BTL_SELF_FRAG_ALLOC_EAGER(frag,rc); frag->segment.seg_len = size; } else if (size <= btl->btl_max_send_size) { MCA_BTL_SELF_FRAG_ALLOC_SEND(frag,rc); frag->segment.seg_len = size; } else { return NULL; } frag->base.des_flags = 0; frag->base.des_src = &(frag->segment); frag->base.des_src_cnt = 1; return (mca_btl_base_descriptor_t*)frag; }
/** * Allocate a segment. * * @param btl (IN) BTL module * @param size (IN) Request segment size. */ mca_btl_base_descriptor_t* mca_btl_self_alloc( struct mca_btl_base_module_t* btl, struct mca_btl_base_endpoint_t* endpoint, uint8_t order, size_t size, uint32_t flags) { mca_btl_self_frag_t* frag = NULL; if(size <= mca_btl_self.btl_eager_limit) { MCA_BTL_SELF_FRAG_ALLOC_EAGER(frag); } else if (size <= btl->btl_max_send_size) { MCA_BTL_SELF_FRAG_ALLOC_SEND(frag); } if( OPAL_UNLIKELY(NULL == frag) ) { return NULL; } frag->segment.seg_len = size; frag->base.des_flags = flags; frag->base.des_src = &(frag->segment); frag->base.des_src_cnt = 1; return (mca_btl_base_descriptor_t*)frag; }
/** * Allocate a segment. * * @param btl (IN) BTL module * @param size (IN) Request segment size. */ static mca_btl_base_descriptor_t *mca_btl_self_alloc (struct mca_btl_base_module_t *btl, struct mca_btl_base_endpoint_t *endpoint, uint8_t order, size_t size, uint32_t flags) { mca_btl_self_frag_t *frag = NULL; if (size <= MCA_BTL_SELF_MAX_INLINE_SIZE) { MCA_BTL_SELF_FRAG_ALLOC_RDMA(frag); } else if (size <= mca_btl_self.btl_eager_limit) { MCA_BTL_SELF_FRAG_ALLOC_EAGER(frag); } else if (size <= btl->btl_max_send_size) { MCA_BTL_SELF_FRAG_ALLOC_SEND(frag); } if( OPAL_UNLIKELY(NULL == frag) ) { return NULL; } frag->segments[0].seg_len = size; frag->base.des_segment_count = 1; frag->base.des_flags = flags; return &frag->base; }