This source file includes following definitions.
- mca_btl_ugni_base_frag_constructor
- mca_btl_ugni_eager_frag_constructor
- mca_btl_ugni_post_descriptor_constructor
- mca_btl_ugni_rdma_desc_constructor
- mca_btl_ugni_rdma_desc_destructor
- mca_btl_ugni_rdma_desc_init
- mca_btl_ugni_frag_init
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "btl_ugni.h"
14 #include "btl_ugni_frag.h"
15
16 static inline void mca_btl_ugni_base_frag_constructor (mca_btl_ugni_base_frag_t *frag)
17 {
18 memset ((char *) frag + sizeof (frag->base), 0, sizeof (*frag) - sizeof (frag->base));
19 frag->segments[0].seg_addr.pval = frag->base.super.ptr;
20 }
21
22 static inline void mca_btl_ugni_eager_frag_constructor (mca_btl_ugni_base_frag_t *frag)
23 {
24 struct mca_btl_ugni_reg_t *reg =
25 (struct mca_btl_ugni_reg_t *) frag->base.super.registration;
26
27 mca_btl_ugni_base_frag_constructor (frag);
28
29 frag->memory_handle = reg->handle;
30 }
31
32 OBJ_CLASS_INSTANCE(mca_btl_ugni_smsg_frag_t, mca_btl_base_descriptor_t,
33 mca_btl_ugni_base_frag_constructor, NULL);
34
35 OBJ_CLASS_INSTANCE(mca_btl_ugni_rdma_frag_t, mca_btl_base_descriptor_t,
36 mca_btl_ugni_base_frag_constructor, NULL);
37
38 OBJ_CLASS_INSTANCE(mca_btl_ugni_eager_frag_t, mca_btl_base_descriptor_t,
39 mca_btl_ugni_eager_frag_constructor, NULL);
40
41 static void mca_btl_ugni_post_descriptor_constructor (mca_btl_ugni_post_descriptor_t *desc)
42 {
43 desc->cq = NULL;
44 }
45
46 OBJ_CLASS_INSTANCE(mca_btl_ugni_post_descriptor_t, opal_free_list_item_t,
47 mca_btl_ugni_post_descriptor_constructor, NULL);
48
49 static void mca_btl_ugni_rdma_desc_constructor (mca_btl_ugni_rdma_desc_t *desc)
50 {
51 desc->device = NULL;
52 desc->gni_handle = 0;
53 desc->tries = 0;
54 }
55
56 static void mca_btl_ugni_rdma_desc_destructor (mca_btl_ugni_rdma_desc_t *desc)
57 {
58 if (0 != desc->gni_handle) {
59 (void) GNI_EpDestroy (desc->gni_handle);
60 desc->gni_handle = 0;
61 }
62 }
63
64 int mca_btl_ugni_rdma_desc_init (opal_free_list_item_t *item, void *ctx)
65 {
66 mca_btl_ugni_rdma_desc_t *rdma_desc = (mca_btl_ugni_rdma_desc_t *) item;
67 mca_btl_ugni_device_t *device = (mca_btl_ugni_device_t *) ctx;
68 gni_return_t grc;
69
70 grc = GNI_EpCreate (device->dev_handle, device->dev_rdma_local_cq.gni_handle, &rdma_desc->gni_handle);
71 rdma_desc->device = device;
72 return mca_btl_rc_ugni_to_opal (grc);
73 }
74
75
76 OBJ_CLASS_INSTANCE(mca_btl_ugni_rdma_desc_t, opal_free_list_item_t,
77 mca_btl_ugni_rdma_desc_constructor, mca_btl_ugni_rdma_desc_destructor);
78
79 int mca_btl_ugni_frag_init (mca_btl_ugni_base_frag_t *frag, void *id)
80 {
81
82
83
84 intptr_t free_list_id = (intptr_t) id & 0xff;
85 mca_btl_ugni_module_t *ugni_module = mca_btl_ugni_component.modules;
86
87 frag->msg_id = opal_pointer_array_add (&ugni_module->pending_smsg_frags_bb, (void *) frag);
88 frag->my_list = ugni_module->frags_lists + free_list_id;
89
90 return OPAL_SUCCESS;
91 }