Home | History | Annotate | Download | only in rumpkern

Lines Matching defs:uprw

167 struct uprw {
176 #define UPRW(rw) struct uprw *uprw = *(struct uprw **)rw
183 struct uprw *uprw;
188 uprw = rump_hypermalloc(sizeof(*uprw), 0, true, "rwinit");
189 memset(uprw, 0, sizeof(*uprw));
190 rumpuser_cv_init(&uprw->uprw_rucv_reader);
191 rumpuser_cv_init(&uprw->uprw_rucv_writer);
192 memcpy(rw, &uprw, sizeof(void *));
198 UPRW(rw);
200 rumpuser_cv_destroy(uprw->uprw_rucv_reader);
201 rumpuser_cv_destroy(uprw->uprw_rucv_writer);
202 rump_hyperfree(uprw, sizeof(*uprw));
209 UPRW(rw);
218 rucv = uprw->uprw_rucv_reader;
219 wp = &uprw->uprw_rwant;
221 rucv = uprw->uprw_rucv_writer;
222 wp = &uprw->uprw_wwant;
235 UPRW(rw);
239 if (uprw->uprw_owner == NULL && uprw->uprw_wwant == 0) {
240 uprw->uprw_readers++;
245 if (uprw->uprw_owner == NULL && uprw->uprw_readers == 0) {
246 uprw->uprw_owner = curlwp;
258 UPRW(rw);
260 if (uprw->uprw_readers > 0) {
261 uprw->uprw_readers--;
263 KASSERT(uprw->uprw_owner == curlwp);
264 uprw->uprw_owner = NULL;
267 if (uprw->uprw_wwant) {
268 rumpuser_cv_signal(uprw->uprw_rucv_writer);
269 } else if (uprw->uprw_rwant) {
270 rumpuser_cv_signal(uprw->uprw_rucv_reader);
277 UPRW(rw);
279 if (uprw->uprw_readers == 1 && uprw->uprw_owner == NULL) {
280 uprw->uprw_readers = 0;
281 uprw->uprw_owner = curlwp;
291 UPRW(rw);
293 return uprw->uprw_owner == curlwp;
299 UPRW(rw);
301 return uprw->uprw_readers > 0;
307 UPRW(rw);
309 return uprw->uprw_owner || uprw->uprw_readers;