This source file includes following definitions.
- common_send_seg_helper
- chunk_seg_constructor
- frag_seg_constructor
- ack_seg_constructor
- recv_seg_constructor
- send_frag_constructor
- send_frag_destructor
- small_send_frag_constructor
- small_send_frag_destructor
- large_send_frag_constructor
- put_dest_frag_constructor
- put_dest_frag_destructor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include "opal_config.h"
23
24 #include <string.h>
25
26 #include "btl_usnic.h"
27 #include "btl_usnic_endpoint.h"
28 #include "btl_usnic_module.h"
29 #include "btl_usnic_frag.h"
30 #include "btl_usnic_ack.h"
31
32 static void
33 common_send_seg_helper(opal_btl_usnic_send_segment_t *seg)
34 {
35 opal_btl_usnic_segment_t *bseg;
36
37
38
39 seg->ss_ptr = (uint8_t *) seg->ss_base.us_list.ptr;
40 seg->ss_send_posted = 0;
41 seg->ss_ack_pending = false;
42
43
44
45 bseg = &seg->ss_base;
46 bseg->us_btl_header = (opal_btl_usnic_btl_header_t *)
47 (seg->ss_ptr + mca_btl_usnic_component.prefix_send_offset);
48 bseg->us_btl_header->sender = mca_btl_usnic_component.my_hashed_rte_name;
49 }
50
51 static void
52 chunk_seg_constructor(
53 opal_btl_usnic_chunk_segment_t *cseg)
54 {
55 opal_btl_usnic_segment_t *bseg;
56
57 bseg = &cseg->ss_base;
58 bseg->us_type = OPAL_BTL_USNIC_SEG_CHUNK;
59
60
61 common_send_seg_helper(cseg);
62
63
64 bseg->us_payload.raw = (uint8_t *)(bseg->us_btl_chunk_header + 1);
65
66 bseg->us_btl_header->payload_type = OPAL_BTL_USNIC_PAYLOAD_TYPE_CHUNK;
67 }
68
69 static void
70 frag_seg_constructor(
71 opal_btl_usnic_frag_segment_t *fseg)
72 {
73 opal_btl_usnic_segment_t *bseg;
74
75 bseg = &fseg->ss_base;
76 bseg->us_type = OPAL_BTL_USNIC_SEG_FRAG;
77
78
79 common_send_seg_helper(fseg);
80
81
82 bseg->us_payload.raw = (uint8_t *)(bseg->us_btl_header + 1);
83
84 bseg->us_btl_header->payload_type = OPAL_BTL_USNIC_PAYLOAD_TYPE_FRAG;
85 }
86
87 static void
88 ack_seg_constructor(
89 opal_btl_usnic_ack_segment_t *ack)
90 {
91 opal_btl_usnic_segment_t *bseg;
92
93 bseg = &ack->ss_base;
94 bseg->us_type = OPAL_BTL_USNIC_SEG_ACK;
95
96
97 common_send_seg_helper(ack);
98
99
100 bseg->us_btl_header->payload_type = OPAL_BTL_USNIC_PAYLOAD_TYPE_ACK;
101 bseg->us_btl_header->payload_len = 0;
102 bseg->us_btl_header->ack_present = 1;
103
104 ack->ss_len = sizeof(bseg->us_btl_header);
105 }
106
107
108 static void
109 recv_seg_constructor(
110 opal_btl_usnic_recv_segment_t *seg)
111 {
112 opal_btl_usnic_segment_t *bseg;
113
114 bseg = &seg->rs_base;
115 bseg->us_type = OPAL_BTL_USNIC_SEG_RECV;
116
117
118 seg->rs_protocol_header = bseg->us_list.ptr;
119 bseg->us_btl_header = (opal_btl_usnic_btl_header_t *)(
120 ((char *) seg->rs_protocol_header) +
121 mca_btl_usnic_component.transport_header_len);
122
123
124
125
126
127
128
129
130 seg->rs_desc.USNIC_RECV_REMOTE = NULL;
131 seg->rs_desc.USNIC_RECV_REMOTE_COUNT = 0;
132
133 seg->rs_desc.USNIC_RECV_LOCAL = &seg->rs_segment;
134 seg->rs_desc.USNIC_RECV_LOCAL_COUNT = 1;
135
136
137
138
139
140
141 bseg->us_payload.ompi_header = (mca_btl_base_header_t *)
142 (bseg->us_btl_header+1);
143 seg->rs_segment.seg_addr.pval = bseg->us_payload.ompi_header;
144 }
145
146 static void
147 send_frag_constructor(opal_btl_usnic_send_frag_t *frag)
148 {
149 mca_btl_base_descriptor_t *desc;
150
151
152 desc = &frag->sf_base.uf_base;
153
154
155
156
157
158
159
160 desc->USNIC_SEND_REMOTE = frag->sf_base.uf_remote_seg;
161 desc->USNIC_SEND_REMOTE_COUNT = 0;
162
163 desc->USNIC_SEND_LOCAL = frag->sf_base.uf_local_seg;
164 frag->sf_base.uf_local_seg[0].seg_len = 0;
165 frag->sf_base.uf_local_seg[1].seg_len = 0;
166 desc->USNIC_SEND_LOCAL_COUNT = 2;
167
168 desc->order = MCA_BTL_NO_ORDER;
169 desc->des_flags = 0;
170
171 OBJ_CONSTRUCT(&frag->sf_convertor, opal_convertor_t);
172 frag->sf_seg_post_cnt = 0;
173 }
174
175 static void
176 send_frag_destructor(opal_btl_usnic_send_frag_t *frag)
177 {
178 #if OPAL_ENABLE_DEBUG
179
180 mca_btl_base_descriptor_t *desc;
181 desc = &frag->sf_base.uf_base;
182 assert(desc->USNIC_SEND_LOCAL == frag->sf_base.uf_local_seg);
183 assert(0 == frag->sf_base.uf_local_seg[0].seg_len);
184 #endif
185
186
187
188
189 OBJ_DESTRUCT(&frag->sf_convertor);
190 }
191
192 static void
193 small_send_frag_constructor(opal_btl_usnic_small_send_frag_t *frag)
194 {
195 opal_btl_usnic_frag_segment_t *fseg;
196
197
198 fseg = &frag->ssf_segment;
199
200 fseg->ss_base.us_list.ptr = frag->ssf_base.sf_base.uf_base.super.ptr;
201 OBJ_CONSTRUCT(fseg, opal_btl_usnic_frag_segment_t);
202
203
204 fseg->ss_parent_frag = (struct opal_btl_usnic_send_frag_t *)frag;
205
206 frag->ssf_base.sf_base.uf_type = OPAL_BTL_USNIC_FRAG_SMALL_SEND;
207
208
209 frag->ssf_base.sf_base.uf_local_seg[0].seg_addr.pval =
210 fseg->ss_base.us_payload.raw;
211 }
212
213 static void
214 small_send_frag_destructor(opal_btl_usnic_small_send_frag_t *frag)
215 {
216 opal_btl_usnic_frag_segment_t *fseg;
217
218 fseg = &frag->ssf_segment;
219 assert(fseg->ss_parent_frag == (struct opal_btl_usnic_send_frag_t *)frag);
220 assert(frag->ssf_base.sf_base.uf_type == OPAL_BTL_USNIC_FRAG_SMALL_SEND);
221 assert(frag->ssf_base.sf_base.uf_local_seg[0].seg_addr.pval ==
222 fseg->ss_base.us_payload.raw);
223 OBJ_DESTRUCT(fseg);
224 }
225
226 static void
227 large_send_frag_constructor(opal_btl_usnic_large_send_frag_t *lfrag)
228 {
229 lfrag->lsf_base.sf_base.uf_type = OPAL_BTL_USNIC_FRAG_LARGE_SEND;
230
231
232 lfrag->lsf_base.sf_base.uf_local_seg[0].seg_addr.pval =
233 &lfrag->lsf_ompi_header;
234
235 lfrag->lsf_buffer = NULL;
236 OBJ_CONSTRUCT(&lfrag->lsf_seg_chain, opal_list_t);
237 lfrag->lsf_pack_on_the_fly = false;
238 }
239
240 static void
241 put_dest_frag_constructor(opal_btl_usnic_put_dest_frag_t *pfrag)
242 {
243 pfrag->uf_type = OPAL_BTL_USNIC_FRAG_PUT_DEST;
244
245
246 pfrag->uf_base.USNIC_PUT_LOCAL = pfrag->uf_remote_seg;
247 pfrag->uf_base.USNIC_PUT_LOCAL_COUNT = 1;
248 }
249
250 static void
251 put_dest_frag_destructor(opal_btl_usnic_put_dest_frag_t *pfrag)
252 {
253 assert(pfrag->uf_base.USNIC_PUT_LOCAL == pfrag->uf_remote_seg);
254 assert(1 == pfrag->uf_base.USNIC_PUT_LOCAL_COUNT);
255 }
256
257 OBJ_CLASS_INSTANCE(opal_btl_usnic_segment_t,
258 opal_free_list_item_t,
259 NULL,
260 NULL);
261
262 OBJ_CLASS_INSTANCE(opal_btl_usnic_frag_segment_t,
263 opal_btl_usnic_segment_t,
264 frag_seg_constructor,
265 NULL);
266
267 OBJ_CLASS_INSTANCE(opal_btl_usnic_chunk_segment_t,
268 opal_btl_usnic_segment_t,
269 chunk_seg_constructor,
270 NULL);
271
272 OBJ_CLASS_INSTANCE(opal_btl_usnic_recv_segment_t,
273 opal_btl_usnic_segment_t,
274 recv_seg_constructor,
275 NULL);
276
277 OBJ_CLASS_INSTANCE(opal_btl_usnic_ack_segment_t,
278 opal_btl_usnic_segment_t,
279 ack_seg_constructor,
280 NULL);
281
282
283
284
285 OBJ_CLASS_INSTANCE(opal_btl_usnic_frag_t,
286 mca_btl_base_descriptor_t,
287 NULL,
288 NULL);
289
290 OBJ_CLASS_INSTANCE(opal_btl_usnic_send_frag_t,
291 opal_btl_usnic_frag_t,
292 send_frag_constructor,
293 send_frag_destructor);
294
295 OBJ_CLASS_INSTANCE(opal_btl_usnic_large_send_frag_t,
296 opal_btl_usnic_send_frag_t,
297 large_send_frag_constructor,
298 NULL);
299
300 OBJ_CLASS_INSTANCE(opal_btl_usnic_small_send_frag_t,
301 opal_btl_usnic_send_frag_t,
302 small_send_frag_constructor,
303 small_send_frag_destructor);
304
305 OBJ_CLASS_INSTANCE(opal_btl_usnic_put_dest_frag_t,
306 opal_btl_usnic_frag_t,
307 put_dest_frag_constructor,
308 put_dest_frag_destructor);
309
310 OBJ_CLASS_INSTANCE(opal_btl_usnic_rx_buf_t,
311 opal_free_list_item_t,
312 NULL,
313 NULL);