19 #ifndef _COPPERPLATE_CLUSTER_H
20 #define _COPPERPLATE_CLUSTER_H
22 #include <boilerplate/hash.h>
23 #include <copperplate/init.h>
24 #include <copperplate/syncobj.h>
26 #ifdef CONFIG_XENO_PSHARED
34 struct hash_table table;
48 struct pvhashobj hobj;
52 struct pvhash_table table;
63 struct pvhashobj hobj;
67 struct pvhash_table table;
75 #define pvclusterobj clusterobj
76 #define pvcluster cluster
77 #define pvsyncluster syncluster
81 struct syncluster_wait_struct {
89 int pvcluster_init(
struct pvcluster *c,
const char *name);
91 void pvcluster_destroy(
struct pvcluster *c);
93 int pvcluster_addobj(
struct pvcluster *c,
const char *name,
94 struct pvclusterobj *cobj);
96 int pvcluster_addobj_dup(
struct pvcluster *c,
const char *name,
97 struct pvclusterobj *cobj);
99 int pvcluster_delobj(
struct pvcluster *c,
100 struct pvclusterobj *cobj);
102 struct pvclusterobj *pvcluster_findobj(
struct pvcluster *c,
105 int pvsyncluster_init(
struct pvsyncluster *sc,
const char *name);
107 void pvsyncluster_destroy(
struct pvsyncluster *sc);
109 int pvsyncluster_addobj(
struct pvsyncluster *sc,
const char *name,
110 struct pvclusterobj *cobj);
112 int pvsyncluster_delobj(
struct pvsyncluster *sc,
113 struct pvclusterobj *cobj);
115 int pvsyncluster_findobj(
struct pvsyncluster *sc,
117 const struct timespec *timeout,
118 struct pvclusterobj **cobjp) __must_check;
120 #ifdef CONFIG_XENO_PSHARED
122 int cluster_init(
struct cluster *c,
const char *name);
124 int cluster_addobj(
struct cluster *c,
const char *name,
125 struct clusterobj *cobj);
127 int cluster_addobj_dup(
struct cluster *c,
const char *name,
128 struct clusterobj *cobj);
130 int cluster_delobj(
struct cluster *c,
131 struct clusterobj *cobj);
133 struct clusterobj *cluster_findobj(
struct cluster *c,
136 int syncluster_init(
struct syncluster *sc,
const char *name);
138 int syncluster_addobj(
struct syncluster *sc,
const char *name,
139 struct clusterobj *cobj);
141 int syncluster_delobj(
struct syncluster *sc,
142 struct clusterobj *cobj);
144 int syncluster_findobj(
struct syncluster *sc,
146 const struct timespec *timeout,
147 struct clusterobj **cobjp) __must_check;
151 static inline int cluster_init(
struct cluster *c,
const char *name)
153 return pvcluster_init(c, name);
156 static inline int cluster_addobj(
struct cluster *c,
const char *name,
157 struct clusterobj *cobj)
159 return pvcluster_addobj(c, name, cobj);
162 static inline int cluster_addobj_dup(
struct cluster *c,
const char *name,
163 struct clusterobj *cobj)
165 return pvcluster_addobj_dup(c, name, cobj);
168 static inline int cluster_delobj(
struct cluster *c,
169 struct clusterobj *cobj)
171 return pvcluster_delobj(c, cobj);
174 static inline struct clusterobj *cluster_findobj(
struct cluster *c,
177 return pvcluster_findobj(c, name);
180 static inline int syncluster_init(
struct syncluster *sc,
183 return pvsyncluster_init(sc, name);
186 static inline int syncluster_addobj(
struct syncluster *sc,
188 struct clusterobj *cobj)
190 return pvsyncluster_addobj(sc, name, cobj);
193 static inline int syncluster_delobj(
struct syncluster *sc,
194 struct clusterobj *cobj)
196 return pvsyncluster_delobj(sc, cobj);
199 static inline __must_check
200 int syncluster_findobj(
struct syncluster *sc,
202 const struct timespec *timeout,
203 struct clusterobj **cobjp)
205 return pvsyncluster_findobj(sc, name, timeout, cobjp);