1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #ifndef MCA_SSHMEM_TYPES_H
19 #define MCA_SSHMEM_TYPES_H
20
21 #include "oshmem_config.h"
22
23 BEGIN_C_DECLS
24
25
26
27
28
29 #define MAP_SEGMENT_FLAGS_VALID 0x01
30
31
32
33
34 #define MAP_SEGMENT_SHM_INVALID (-1)
35
36
37
38
39 #define MAP_SEGMENT_RESET_FLAGS(ds_buf) \
40 do { \
41 (ds_buf)->flags = 0x00; \
42 } while (0)
43
44
45
46
47 #define MAP_SEGMENT_SET_VALID(ds_buf) \
48 do { \
49 (ds_buf)->flags |= MAP_SEGMENT_FLAGS_VALID; \
50 } while (0)
51
52
53
54
55 #define MAP_SEGMENT_INVALIDATE(ds_buf) \
56 do { \
57 (ds_buf)->flags &= ~MAP_SEGMENT_FLAGS_VALID; \
58 } while (0)
59
60
61
62
63
64 #define MAP_SEGMENT_IS_VALID(ds_buf) \
65 ( (ds_buf)->flags & MAP_SEGMENT_FLAGS_VALID )
66
67 typedef uint8_t segment_flag_t;
68
69 typedef enum {
70 MAP_SEGMENT_STATIC = 0,
71 MAP_SEGMENT_ALLOC_MMAP,
72 MAP_SEGMENT_ALLOC_SHM,
73 MAP_SEGMENT_ALLOC_IBV,
74 MAP_SEGMENT_ALLOC_IBV_NOSHMR,
75 MAP_SEGMENT_ALLOC_UCX,
76 MAP_SEGMENT_UNKNOWN
77 } segment_type_t;
78
79
80
81
82
83
84
85
86
87
88
89
90 typedef struct sshmem_mkey {
91 void* va_base;
92 uint16_t len;
93 union {
94 void *data;
95 uint64_t key;
96 } u;
97 void *spml_context;
98 } sshmem_mkey_t;
99
100 typedef struct map_base_segment {
101 void *va_base;
102 void *va_end;
103 } map_base_segment_t;
104
105 typedef struct mkey_segment {
106 map_base_segment_t super;
107 void *rva_base;
108 } mkey_segment_t;
109
110 typedef struct segment_allocator segment_allocator_t;
111
112 typedef struct map_segment {
113 map_base_segment_t super;
114 sshmem_mkey_t **mkeys_cache;
115 sshmem_mkey_t *mkeys;
116 segment_flag_t flags;
117 int seg_id;
118 size_t seg_size;
119 segment_type_t type;
120 long alloc_hints;
121 void *context;
122
123 segment_allocator_t *allocator;
124 } map_segment_t;
125
126 struct segment_allocator {
127 int (*realloc)(map_segment_t*, size_t newsize, void *, void **);
128 int (*free)(map_segment_t*, void*);
129 };
130
131 END_C_DECLS
132
133 #endif