1717 * Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
1818 * Copyright (c) 2014-2015 Research Organization for Information Science
1919 * and Technology (RIST). All rights reserved.
20- * Copyright (c) 2018 Triad National Security, LLC. All rights
20+ * Copyright (c) 2018-2019 Triad National Security, LLC. All rights
2121 * reserved.
2222 * $COPYRIGHT$
2323 *
@@ -97,19 +97,32 @@ static int vader_btl_first_time_init(mca_btl_vader_t *vader_btl, int n)
9797 return OPAL_ERR_OUT_OF_RESOURCE ;
9898 }
9999
100- component -> segment_offset = MCA_BTL_VADER_FIFO_SIZE ;
100+ component -> mpool = mca_mpool_basic_create ((void * ) (component -> my_segment + MCA_BTL_VADER_FIFO_SIZE ),
101+ (unsigned long ) (mca_btl_vader_component .segment_size - MCA_BTL_VADER_FIFO_SIZE ), 64 );
102+ if (NULL == component -> mpool ) {
103+ free (component -> endpoints );
104+ return OPAL_ERR_OUT_OF_RESOURCE ;
105+ }
106+
107+ rc = opal_free_list_init (& component -> vader_fboxes , sizeof (opal_free_list_item_t ), 8 ,
108+ OBJ_CLASS (opal_free_list_item_t ), mca_btl_vader_component .fbox_size ,
109+ opal_cache_line_size , 0 , mca_btl_vader_component .fbox_max , 4 ,
110+ component -> mpool , 0 , NULL , NULL , NULL );
111+ if (OPAL_SUCCESS != rc ) {
112+ return rc ;
113+ }
101114
102115 /* initialize fragment descriptor free lists */
103116 /* initialize free list for small send and inline fragments */
104117 rc = opal_free_list_init (& component -> vader_frags_user ,
105118 sizeof (mca_btl_vader_frag_t ),
106119 opal_cache_line_size , OBJ_CLASS (mca_btl_vader_frag_t ),
107- 0 , opal_cache_line_size ,
108- component -> vader_free_list_num ,
120+ mca_btl_vader_component . max_inline_send + sizeof ( mca_btl_vader_frag_t ) ,
121+ opal_cache_line_size , component -> vader_free_list_num ,
109122 component -> vader_free_list_max ,
110123 component -> vader_free_list_inc ,
111- NULL , 0 , NULL , mca_btl_vader_frag_init ,
112- ( void * )( intptr_t ) mca_btl_vader_component . max_inline_send );
124+ component -> mpool , 0 , NULL , mca_btl_vader_frag_init ,
125+ & component -> vader_frags_user );
113126 if (OPAL_SUCCESS != rc ) {
114127 return rc ;
115128 }
@@ -118,12 +131,12 @@ static int vader_btl_first_time_init(mca_btl_vader_t *vader_btl, int n)
118131 rc = opal_free_list_init (& component -> vader_frags_eager ,
119132 sizeof (mca_btl_vader_frag_t ),
120133 opal_cache_line_size , OBJ_CLASS (mca_btl_vader_frag_t ),
121- 0 , opal_cache_line_size ,
122- component -> vader_free_list_num ,
134+ mca_btl_vader . super . btl_eager_limit + sizeof ( mca_btl_vader_frag_t ) ,
135+ opal_cache_line_size , component -> vader_free_list_num ,
123136 component -> vader_free_list_max ,
124137 component -> vader_free_list_inc ,
125- NULL , 0 , NULL , mca_btl_vader_frag_init ,
126- ( void * )( intptr_t ) mca_btl_vader . super . btl_eager_limit );
138+ component -> mpool , 0 , NULL , mca_btl_vader_frag_init ,
139+ & component -> vader_frags_eager );
127140 if (OPAL_SUCCESS != rc ) {
128141 return rc ;
129142 }
@@ -133,12 +146,12 @@ static int vader_btl_first_time_init(mca_btl_vader_t *vader_btl, int n)
133146 rc = opal_free_list_init (& component -> vader_frags_max_send ,
134147 sizeof (mca_btl_vader_frag_t ),
135148 opal_cache_line_size , OBJ_CLASS (mca_btl_vader_frag_t ),
136- 0 , opal_cache_line_size ,
137- component -> vader_free_list_num ,
149+ mca_btl_vader . super . btl_max_send_size + sizeof ( mca_btl_vader_frag_t ) ,
150+ opal_cache_line_size , component -> vader_free_list_num ,
138151 component -> vader_free_list_max ,
139152 component -> vader_free_list_inc ,
140- NULL , 0 , NULL , mca_btl_vader_frag_init ,
141- ( void * )( intptr_t ) mca_btl_vader . super . btl_max_send_size );
153+ component -> mpool , 0 , NULL , mca_btl_vader_frag_init ,
154+ & component -> vader_frags_max_send );
142155 if (OPAL_SUCCESS != rc ) {
143156 return rc ;
144157 }
@@ -367,6 +380,11 @@ static int vader_finalize(struct mca_btl_base_module_t *btl)
367380 }
368381#endif
369382
383+ if (component -> mpool ) {
384+ component -> mpool -> mpool_finalize (component -> mpool );
385+ component -> mpool = NULL ;
386+ }
387+
370388 return OPAL_SUCCESS ;
371389}
372390
@@ -536,6 +554,7 @@ static void mca_btl_vader_endpoint_constructor (mca_btl_vader_endpoint_t *ep)
536554 OBJ_CONSTRUCT (& ep -> pending_frags , opal_list_t );
537555 OBJ_CONSTRUCT (& ep -> pending_frags_lock , opal_mutex_t );
538556 ep -> fifo = NULL ;
557+ ep -> fbox_out .fbox = NULL ;
539558}
540559
541560#if OPAL_BTL_VADER_HAVE_XPMEM
@@ -564,8 +583,12 @@ static void mca_btl_vader_endpoint_destructor (mca_btl_vader_endpoint_t *ep)
564583 /* disconnect from the peer's segment */
565584 opal_shmem_segment_detach (& seg_ds );
566585 }
586+ if (ep -> fbox_out .fbox ) {
587+ opal_free_list_return (& mca_btl_vader_component .vader_fboxes , ep -> fbox_out .fbox );
588+ }
567589
568590 ep -> fbox_in .buffer = ep -> fbox_out .buffer = NULL ;
591+ ep -> fbox_out .fbox = NULL ;
569592 ep -> segment_base = NULL ;
570593 ep -> fifo = NULL ;
571594}
0 commit comments