19 #ifndef _COPPERPLATE_CLUSTER_H 20 #define _COPPERPLATE_CLUSTER_H 22 #include <boilerplate/hash.h> 23 #include <copperplate/syncobj.h> 25 #ifdef CONFIG_XENO_PSHARED 33 struct hash_table table;
41 struct syndictionary {
42 struct hash_table table;
48 struct syndictionary *d;
52 struct pvhashobj hobj;
56 struct pvhash_table table;
65 const void *clusterobj_key(
const struct clusterobj *cobj)
67 return __memptr(__main_heap, cobj->hobj.key);
71 size_t clusterobj_keylen(
const struct clusterobj *cobj)
73 return cobj->hobj.len;
77 pid_t clusterobj_cnode(
const struct clusterobj *cobj)
83 const void *pvclusterobj_key(
const struct pvclusterobj *cobj)
85 return cobj->hobj.key;
89 size_t pvclusterobj_keylen(
const struct pvclusterobj *cobj)
91 return cobj->hobj.len;
95 pid_t pvclusterobj_cnode(
const struct pvclusterobj *cobj)
103 struct pvhashobj hobj;
107 struct pvhash_table table;
115 #define pvclusterobj clusterobj 116 #define pvcluster cluster 117 #define pvsyncluster syncluster 120 const void *clusterobj_key(
const struct pvclusterobj *cobj)
122 return cobj->hobj.key;
126 size_t clusterobj_keylen(
const struct pvclusterobj *cobj)
128 return cobj->hobj.len;
132 pid_t clusterobj_cnode(
const struct pvclusterobj *cobj)
138 const void *pvclusterobj_key(
const struct pvclusterobj *cobj)
140 return clusterobj_key(cobj);
144 size_t pvclusterobj_keylen(
const struct pvclusterobj *cobj)
146 return clusterobj_keylen(cobj);
150 pid_t pvclusterobj_cnode(
const struct pvclusterobj *cobj)
152 return clusterobj_cnode(cobj);
157 struct syncluster_wait_struct {
159 dref_type(
char *) name_ref;
168 int pvcluster_init(
struct pvcluster *c,
const char *name);
170 void pvcluster_destroy(
struct pvcluster *c);
172 int pvcluster_addobj(
struct pvcluster *c,
const char *name,
173 struct pvclusterobj *cobj);
175 int pvcluster_addobj_dup(
struct pvcluster *c,
const char *name,
176 struct pvclusterobj *cobj);
178 int pvcluster_delobj(
struct pvcluster *c,
179 struct pvclusterobj *cobj);
181 struct pvclusterobj *pvcluster_findobj(
struct pvcluster *c,
184 int pvcluster_walk(
struct pvcluster *c,
185 int (*walk)(
struct pvcluster *c,
186 struct pvclusterobj *cobj));
188 int pvsyncluster_init(
struct pvsyncluster *sc,
const char *name);
190 void pvsyncluster_destroy(
struct pvsyncluster *sc);
192 int pvsyncluster_addobj(
struct pvsyncluster *sc,
const char *name,
193 struct pvclusterobj *cobj);
195 int pvsyncluster_delobj(
struct pvsyncluster *sc,
196 struct pvclusterobj *cobj);
198 int pvsyncluster_findobj(
struct pvsyncluster *sc,
200 const struct timespec *timeout,
201 struct pvclusterobj **cobjp) __must_check;
203 #ifdef CONFIG_XENO_PSHARED 205 int cluster_init(
struct cluster *c,
const char *name);
207 int cluster_addobj(
struct cluster *c,
const char *name,
208 struct clusterobj *cobj);
210 int cluster_addobj_dup(
struct cluster *c,
const char *name,
211 struct clusterobj *cobj);
213 int cluster_delobj(
struct cluster *c,
214 struct clusterobj *cobj);
216 struct clusterobj *cluster_findobj(
struct cluster *c,
219 int cluster_walk(
struct cluster *c,
220 int (*walk)(
struct cluster *c,
221 struct clusterobj *cobj));
223 int syncluster_init(
struct syncluster *sc,
const char *name);
225 int syncluster_addobj(
struct syncluster *sc,
const char *name,
226 struct clusterobj *cobj);
228 int syncluster_delobj(
struct syncluster *sc,
229 struct clusterobj *cobj);
231 int syncluster_findobj(
struct syncluster *sc,
233 const struct timespec *timeout,
234 struct clusterobj **cobjp) __must_check;
238 static inline int cluster_init(
struct cluster *c,
const char *name)
240 return pvcluster_init(c, name);
243 static inline int cluster_addobj(
struct cluster *c,
const char *name,
244 struct clusterobj *cobj)
246 return pvcluster_addobj(c, name, cobj);
249 static inline int cluster_addobj_dup(
struct cluster *c,
const char *name,
250 struct clusterobj *cobj)
252 return pvcluster_addobj_dup(c, name, cobj);
255 static inline int cluster_delobj(
struct cluster *c,
256 struct clusterobj *cobj)
258 return pvcluster_delobj(c, cobj);
261 static inline struct clusterobj *cluster_findobj(
struct cluster *c,
264 return pvcluster_findobj(c, name);
267 static inline int cluster_walk(
struct cluster *c,
268 int (*walk)(
struct cluster *c,
269 struct clusterobj *cobj))
271 return pvcluster_walk(c, walk);
274 static inline int syncluster_init(
struct syncluster *sc,
277 return pvsyncluster_init(sc, name);
280 static inline int syncluster_addobj(
struct syncluster *sc,
282 struct clusterobj *cobj)
284 return pvsyncluster_addobj(sc, name, cobj);
287 static inline int syncluster_delobj(
struct syncluster *sc,
288 struct clusterobj *cobj)
290 return pvsyncluster_delobj(sc, cobj);
293 static inline __must_check
294 int syncluster_findobj(
struct syncluster *sc,
296 const struct timespec *timeout,
297 struct clusterobj **cobjp)
299 return pvsyncluster_findobj(sc, name, timeout, cobjp);