24 #ifndef MCA_BTL_IB_FRAG_H
25 #define MCA_BTL_IB_FRAG_H
27 #include "ompi_config.h"
35 mca_btl_base_tag_t tag;
40 #define BTL_WV_RDMA_CREDITS_FLAG (1<<15)
41 #define BTL_WV_IS_RDMA_CREDITS(I) ((I)&BTL_WV_RDMA_CREDITS_FLAG)
42 #define BTL_WV_CREDITS(I) ((I)&~BTL_WV_RDMA_CREDITS_FLAG)
44 #define BTL_WV_HEADER_HTON(h) \
46 (h).credits = htons((h).credits); \
49 #define BTL_WV_HEADER_NTOH(h) \
51 (h).credits = ntohs((h).credits); \
55 mca_btl_base_tag_t tag;
60 #define BTL_WV_HEADER_COALESCED_NTOH(h) \
62 (h).size = ntohl((h).size); \
63 (h).alloc_size = ntohl((h).alloc_size); \
66 #define BTL_WV_HEADER_COALESCED_HTON(h) \
68 (h).size = htonl((h).size); \
69 (h).alloc_size = htonl((h).alloc_size); \
83 #ifdef WORDS_BIGENDIAN
84 #define MCA_BTL_WV_FTR_SIZE_REVERSE(ftr)
86 #define MCA_BTL_WV_FTR_SIZE_REVERSE(ftr) \
88 uint8_t tmp = (ftr).u.buf[0]; \
89 (ftr).u.buf[0]=(ftr).u.buf[2]; \
95 #define BTL_WV_FOOTER_SEQ_HTON(h) ((h).seq = htonl((h).seq))
96 #define BTL_WV_FOOTER_SEQ_NTOH(h) ((h).seq = ntohl((h).seq))
98 #define BTL_WV_FOOTER_SEQ_HTON(h)
99 #define BTL_WV_FOOTER_SEQ_NTOH(h)
102 #define BTL_WV_FOOTER_HTON(h) \
104 BTL_WV_FOOTER_SEQ_HTON(h); \
105 MCA_BTL_WV_FTR_SIZE_REVERSE(h); \
108 #define BTL_WV_FOOTER_NTOH(h) \
110 BTL_WV_FOOTER_SEQ_NTOH(h); \
111 MCA_BTL_WV_FTR_SIZE_REVERSE(h); \
114 #define MCA_BTL_WV_CONTROL_CREDITS 0
115 #define MCA_BTL_WV_CONTROL_RDMA 1
116 #define MCA_BTL_WV_CONTROL_COALESCED 2
117 #define MCA_BTL_WV_CONTROL_CTS 3
118 #if BTL_WV_FAILOVER_ENABLED
119 #define MCA_BTL_WV_CONTROL_EP_BROKEN 4
120 #define MCA_BTL_WV_CONTROL_EP_EAGER_RDMA_ERROR 5
139 #define BTL_WV_EAGER_RDMA_CONTROL_HEADER_HTON(h) \
141 (h).rkey = htonl((h).rkey); \
142 (h).rdma_start.lval = hton64((h).rdma_start.lval); \
145 #define BTL_WV_EAGER_RDMA_CONTROL_HEADER_NTOH(h) \
147 (h).rkey = ntohl((h).rkey); \
148 (h).rdma_start.lval = ntoh64((h).rdma_start.lval); \
155 uint16_t rdma_credits;
159 #define BTL_WV_RDMA_CREDITS_HEADER_HTON(h) \
161 (h).rdma_credits = htons((h).rdma_credits); \
164 #define BTL_WV_RDMA_CREDITS_HEADER_NTOH(h) \
166 (h).rdma_credits = ntohs((h).rdma_credits); \
169 #if BTL_WV_FAILOVER_ENABLED
170 struct mca_btl_wv_broken_connection_header_t {
178 typedef struct mca_btl_wv_broken_connection_header_t mca_btl_wv_broken_connection_header_t;
180 #define BTL_WV_BROKEN_CONNECTION_HEADER_HTON(h) \
182 (h).lid = htonl((h).lid); \
183 (h).subnet_id = hton64((h).subnet_id); \
184 (h).vpid = htonl((h).vpid); \
185 (h).index = htonl((h).index); \
188 #define BTL_WV_BROKEN_CONNECTION_HEADER_NTOH(h) \
190 (h).lid = ntohl((h).lid); \
191 (h).subnet_id = ntoh64((h).subnet_id); \
192 (h).vpid = ntohl((h).vpid); \
193 (h).index = ntohl((h).index); \
196 enum mca_btl_wv_frag_type_t {
197 MCA_BTL_WV_FRAG_RECV,
198 MCA_BTL_WV_FRAG_RECV_USER,
199 MCA_BTL_WV_FRAG_SEND,
200 MCA_BTL_WV_FRAG_SEND_USER,
201 MCA_BTL_WV_FRAG_EAGER_RDMA,
202 MCA_BTL_WV_FRAG_CONTROL,
203 MCA_BTL_WV_FRAG_COALESCED
205 typedef enum mca_btl_wv_frag_type_t mca_btl_wv_frag_type_t;
207 #define wv_frag_type(f) (to_base_frag(f)->type)
216 mca_btl_wv_frag_type_t type;
221 #define to_base_frag(f) ((mca_btl_wv_frag_t*)(f))
232 #define to_com_frag(f) ((mca_btl_wv_com_frag_t*)(f))
236 WV_SEND_REQUEST sr_desc;
240 #define to_out_frag(f) ((mca_btl_wv_out_frag_t*)(f))
245 #define to_in_frag(f) ((mca_btl_wv_in_frag_t*)(f))
252 uint32_t coalesced_length;
257 #define to_send_frag(f) ((mca_btl_wv_send_frag_t*)(f))
268 #define to_recv_frag(f) ((mca_btl_wv_recv_frag_t*)(f))
273 #define to_put_frag(f) ((mca_btl_wv_put_frag_t*)(f))
277 WV_SEND_REQUEST sr_desc;
281 #define to_get_frag(f) ((mca_btl_wv_get_frag_t*)(f))
286 #define to_send_control_frag(f) ((mca_btl_wv_send_control_frag_t*)(f))
295 #define to_coalesced_frag(f) ((mca_btl_wv_coalesced_frag_t*)(f))
308 OMPI_FREE_LIST_WAIT(&btl->device->send_free_control, item, rc);
310 return to_send_control_frag(item);
317 for(qp = 0; qp < mca_btl_wv_component.num_qps; qp++)
318 if(mca_btl_wv_component.
qp_infos[qp].size >= size)
321 return MCA_BTL_NO_ORDER;
329 OMPI_FREE_LIST_GET(&mca_btl_wv_component.
send_user_free, item, rc);
331 return to_com_frag(item);
339 OMPI_FREE_LIST_GET(&mca_btl_wv_component.
recv_user_free, item, rc);
341 return to_com_frag(item);
349 OMPI_FREE_LIST_GET(&mca_btl_wv_component.send_free_coalesced, item, rc);
351 return to_coalesced_frag(item);
354 #define MCA_BTL_IB_FRAG_RETURN(frag) \
356 OMPI_FREE_LIST_RETURN(to_base_frag(frag)->list, \
357 (ompi_free_list_item_t*)(frag)); \
360 #define MCA_BTL_WV_CLEAN_PENDING_FRAGS(list) \
361 while(!opal_list_is_empty(list)){ \
362 opal_list_item_t *frag_item; \
363 frag_item = opal_list_remove_first(list); \
364 MCA_BTL_IB_FRAG_RETURN(frag_item); \
ompi_free_list_t recv_user_free
frags for coalesced massages
Definition: btl_wv.h:268
IB BTL Interface.
Definition: btl_wv.h:391
A descriptor that holds the parameters to a send/put/get operation along w/ a callback routine that i...
Definition: btl.h:275
Definition: btl_wv_frag.h:369
Definition: btl_wv_def.h:85
IB fragment derived type.
Definition: btl_wv_frag.h:213
mca_btl_wv_qp_info_t * qp_infos
Eager send limit of first fragment, in Bytes.
Definition: btl_wv.h:184
Definition: btl_wv_frag.h:259
Definition: btl_wv_frag.h:224
Byte Transfer Layer (BTL)
Definition: btl_wv_frag.h:234
Definition: ompi_free_list.h:39
ompi_free_list_t send_user_free
free list of frags only; used for pining user memory
Definition: btl_wv.h:266
State of ELAN endpoint connection.
Definition: btl_elan_endpoint.h:33
Definition: ompi_free_list.h:62
Definition: btl_wv_frag.h:247
Definition: opal_list.h:147
Definition: btl_wv_frag.h:288
Definition: btl_wv_frag.h:275
Describes a region/segment of memory that is addressable by an BTL.
Definition: btl.h:236
#define OBJ_CLASS_DECLARATION(NAME)
Declaration for class descriptor.
Definition: opal_object.h:236