This source file includes following definitions.
- mca_btl_portals4_activate_block
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #ifndef OPAL_BTL_PORTALS4_RECV_H
21 #define OPAL_BTL_PORTALS4_RECV_H
22
23 #include "btl_portals4_frag.h"
24
25 struct mca_btl_portals4_recv_block_t {
26 opal_list_item_t base;
27
28 mca_btl_portals4_module_t *btl;
29
30 void *start;
31 size_t length;
32 ptl_handle_me_t me_h;
33
34 volatile bool full;
35 volatile int32_t pending;
36 };
37 typedef struct mca_btl_portals4_recv_block_t mca_btl_portals4_recv_block_t;
38 OBJ_CLASS_DECLARATION(mca_btl_portals4_recv_block_t);
39
40
41 int mca_btl_portals4_recv_enable(mca_btl_portals4_module_t *btl);
42
43 int mca_btl_portals4_recv_disable(mca_btl_portals4_module_t *btl);
44
45
46
47
48
49 int mca_btl_portals4_recv_block_free(mca_btl_portals4_recv_block_t *block);
50
51
52
53
54
55
56
57
58 mca_btl_portals4_recv_block_t*
59 mca_btl_portals4_recv_block_init(mca_btl_portals4_module_t *btl);
60
61
62
63
64
65
66 static inline int
67 mca_btl_portals4_activate_block(mca_btl_portals4_recv_block_t *block)
68 {
69 int ret;
70 ptl_me_t me;
71 ptl_process_t remote_proc;
72 ptl_match_bits_t match_bits, ignore_bits;
73 mca_btl_portals4_module_t *btl = block->btl;
74
75 if (NULL == block->start) return OPAL_ERROR;
76
77 ignore_bits = BTL_PORTALS4_CONTEXT_MASK | BTL_PORTALS4_SOURCE_MASK | BTL_PORTALS4_TAG_MASK;
78 match_bits = BTL_PORTALS4_SHORT_MSG;
79
80 me.start = block->start;
81 me.length = block->length;
82 me.ct_handle = PTL_CT_NONE;
83 me.min_free = btl->super.btl_eager_limit;
84 me.uid = PTL_UID_ANY;
85 me.options =
86 PTL_ME_OP_PUT |
87 PTL_ME_MANAGE_LOCAL |
88 PTL_ME_EVENT_LINK_DISABLE |
89 PTL_ME_MAY_ALIGN;
90
91 if (mca_btl_portals4_component.use_logical) {
92 remote_proc.rank = PTL_RANK_ANY;
93 } else {
94 remote_proc.phys.nid = PTL_NID_ANY;
95 remote_proc.phys.pid = PTL_PID_ANY;
96 }
97
98 me.match_id = remote_proc;
99 me.match_bits = match_bits;
100 me.ignore_bits = ignore_bits;
101
102 block->pending = 0;
103 block->full = false;
104 opal_atomic_mb();
105
106 ret = PtlMEAppend(btl->portals_ni_h,
107 btl->recv_idx,
108 &me,
109 PTL_PRIORITY_LIST,
110 block,
111 &block->me_h);
112 if (OPAL_UNLIKELY(PTL_OK != ret)) {
113 opal_output_verbose(1, opal_btl_base_framework.framework_output,
114 "%s:%d: PtlMEAppend failed on NI %d: %d",
115 __FILE__, __LINE__, btl->interface_num, ret);
116 return OPAL_ERROR;
117 }
118 OPAL_OUTPUT_VERBOSE((90, opal_btl_base_framework.framework_output, "PtlMEAppend (recv) block=%p me_h=%d start=%p len=%x NI=%d\n",
119 (void *)block, block->me_h, block->start, (unsigned int) block->length, btl->interface_num));
120
121 return OPAL_SUCCESS;
122 }
123
124 #endif