This source file includes following definitions.
- ompi_osc_rdma_peer_is_exclusive
- ompi_osc_rdma_peer_test_set_flag
- ompi_osc_rdma_peer_clear_flag
- ompi_osc_rdma_peer_local_base
- ompi_osc_rdma_peer_local_state
- ompi_osc_rdma_peer_is_demand_locked
1
2
3
4
5
6
7
8
9
10
11
12 #ifndef OMPI_OSC_RDMA_PEER_H
13 #define OMPI_OSC_RDMA_PEER_H
14
15 #include "osc_rdma_types.h"
16
17 struct ompi_osc_rdma_module_t;
18
19
20
21
22
23
24 struct ompi_osc_rdma_peer_t {
25 opal_list_item_t super;
26
27
28 struct mca_btl_base_endpoint_t *data_endpoint;
29
30
31 struct mca_btl_base_endpoint_t *state_endpoint;
32
33
34 osc_rdma_base_t state;
35
36
37 mca_btl_base_registration_handle_t *state_handle;
38
39
40 opal_mutex_t lock;
41
42
43 int rank;
44
45
46 opal_atomic_int32_t flags;
47 };
48 typedef struct ompi_osc_rdma_peer_t ompi_osc_rdma_peer_t;
49
50
51
52
53 struct ompi_osc_rdma_peer_dynamic_t {
54 ompi_osc_rdma_peer_t super;
55
56
57 uint32_t region_id;
58
59
60 uint32_t region_count;
61
62
63 struct ompi_osc_rdma_region_t *regions;
64 };
65
66 typedef struct ompi_osc_rdma_peer_dynamic_t ompi_osc_rdma_peer_dynamic_t;
67
68
69
70
71
72 struct ompi_osc_rdma_peer_basic_t {
73 ompi_osc_rdma_peer_t super;
74
75
76 osc_rdma_base_t base;
77
78
79 osc_rdma_base_t local_base;
80
81
82 mca_btl_base_registration_handle_t *base_handle;
83 };
84
85 typedef struct ompi_osc_rdma_peer_basic_t ompi_osc_rdma_peer_basic_t;
86
87
88
89
90
91 struct ompi_osc_rdma_peer_extended_t {
92 ompi_osc_rdma_peer_basic_t super;
93
94
95 osc_rdma_size_t size;
96
97
98 int disp_unit;
99 };
100
101 typedef struct ompi_osc_rdma_peer_extended_t ompi_osc_rdma_peer_extended_t;
102
103
104
105
106 OBJ_CLASS_DECLARATION(ompi_osc_rdma_peer_t);
107 OBJ_CLASS_DECLARATION(ompi_osc_rdma_peer_dynamic_t);
108 OBJ_CLASS_DECLARATION(ompi_osc_rdma_peer_basic_t);
109 OBJ_CLASS_DECLARATION(ompi_osc_rdma_peer_extended_t);
110
111
112
113
114 struct ompi_osc_rdma_rank_data_t {
115
116 unsigned int node_id;
117
118 unsigned int rank;
119 };
120 typedef struct ompi_osc_rdma_rank_data_t ompi_osc_rdma_rank_data_t;
121
122 enum {
123
124 OMPI_OSC_RDMA_PEER_EXCLUSIVE = 0x01,
125
126 OMPI_OSC_RDMA_PEER_LOCAL_BASE = 0x02,
127
128 OMPI_OSC_RDMA_PEER_LOCAL_STATE = 0x04,
129
130 OMPI_OSC_RDMA_PEER_ACCUMULATING = 0x08,
131
132 OMPI_OSC_RDMA_PEER_ACCESS_ACTIVE_EPOCH = 0x10,
133
134 OMPI_OSC_RDMA_PEER_STATE_FREE = 0x20,
135
136 OMPI_OSC_RDMA_PEER_BASE_FREE = 0x40,
137
138 OMPI_OSC_RDMA_PEER_DEMAND_LOCKED = 0x80,
139 };
140
141
142
143
144
145
146
147
148
149
150
151 int ompi_osc_rdma_new_peer (struct ompi_osc_rdma_module_t *module, int peer_id, ompi_osc_rdma_peer_t **peer_out);
152
153
154
155
156
157
158
159
160
161
162 struct ompi_osc_rdma_peer_t *ompi_osc_rdma_peer_lookup (struct ompi_osc_rdma_module_t *module, int peer_id);
163
164
165
166
167
168
169
170
171
172
173 struct mca_btl_base_endpoint_t *ompi_osc_rdma_peer_btl_endpoint (struct ompi_osc_rdma_module_t *module, int peer_id);
174
175
176
177
178
179
180 static inline bool ompi_osc_rdma_peer_is_exclusive (ompi_osc_rdma_peer_t *peer)
181 {
182 return !!(peer->flags & OMPI_OSC_RDMA_PEER_EXCLUSIVE);
183 }
184
185
186
187
188
189
190
191
192
193
194 static inline bool ompi_osc_rdma_peer_test_set_flag (ompi_osc_rdma_peer_t *peer, int flag)
195 {
196 int32_t flags;
197
198 opal_atomic_mb ();
199 flags = peer->flags;
200
201 do {
202 if (flags & flag) {
203 return false;
204 }
205 } while (!OPAL_ATOMIC_COMPARE_EXCHANGE_STRONG_32 (&peer->flags, &flags, flags | flag));
206
207 return true;
208 }
209
210
211
212
213
214
215
216 static inline void ompi_osc_rdma_peer_clear_flag (ompi_osc_rdma_peer_t *peer, int flag)
217 {
218 OPAL_ATOMIC_AND_FETCH32(&peer->flags, ~flag);
219 opal_atomic_mb ();
220 }
221
222
223
224
225
226
227 static inline bool ompi_osc_rdma_peer_local_base (ompi_osc_rdma_peer_t *peer)
228 {
229 return !!(peer->flags & OMPI_OSC_RDMA_PEER_LOCAL_BASE);
230 }
231
232
233
234
235
236
237
238
239
240
241 static inline bool ompi_osc_rdma_peer_local_state (ompi_osc_rdma_peer_t *peer)
242 {
243 return !!(peer->flags & OMPI_OSC_RDMA_PEER_LOCAL_STATE);
244 }
245
246
247
248
249
250
251
252 static inline bool ompi_osc_rdma_peer_is_demand_locked (ompi_osc_rdma_peer_t *peer)
253 {
254 return !!(peer->flags & OMPI_OSC_RDMA_PEER_DEMAND_LOCKED);
255 }
256
257 #endif