Lines Matching refs:ts
116 turnstile_ctor(turnstile_t *ts)
119 memset(ts, 0, sizeof(*ts));
120 sleepq_init(&ts->ts_sleepq[TS_READER_Q]);
121 sleepq_init(&ts->ts_sleepq[TS_WRITER_Q]);
130 turnstile_remove(turnstile_t *ts, lwp_t *l, int q)
134 KASSERT(l->l_ts == ts);
140 if ((nts = ts->ts_free) != NULL) {
141 KASSERT(TS_ALL_WAITERS(ts) > 1);
143 ts->ts_free = nts->ts_free;
150 KASSERT(TS_ALL_WAITERS(ts) == 1);
151 LIST_REMOVE(ts, ts_chain);
154 ts->ts_waiters[q]--;
155 sleepq_remove(&ts->ts_sleepq[q], l, true);
167 turnstile_t *ts;
175 LIST_FOREACH(ts, tc, ts_chain)
176 if (ts->ts_obj == obj)
177 return (ts);
225 turnstile_t *ts;
283 ts = l->l_ts;
284 KASSERT(ts->ts_inheritor == owner || ts->ts_inheritor == NULL);
285 if (ts->ts_inheritor == NULL) {
286 ts->ts_inheritor = owner;
287 ts->ts_eprio = prio;
288 SLIST_INSERT_HEAD(&owner->l_pi_lenders, ts, ts_pichain);
290 } else if (prio > ts->ts_eprio) {
291 ts->ts_eprio = prio;
312 turnstile_unlendpri(turnstile_t *ts)
321 KASSERT(ts->ts_inheritor != NULL);
322 ts->ts_inheritor = NULL;
332 * - remove ts from the list.
341 KASSERT(lwp_eprio(l) >= ts->ts_eprio);
343 if (iter == ts) {
370 turnstile_block(turnstile_t *ts, int q, wchan_t obj, syncobj_t *sobj)
389 if (ts == NULL) {
394 ts = l->l_ts;
395 KASSERT(TS_ALL_WAITERS(ts) == 0);
396 KASSERT(LIST_EMPTY(&ts->ts_sleepq[TS_READER_Q]));
397 KASSERT(LIST_EMPTY(&ts->ts_sleepq[TS_WRITER_Q]));
398 ts->ts_obj = obj;
399 ts->ts_inheritor = NULL;
400 LIST_INSERT_HEAD(tc, ts, ts_chain);
409 ots->ts_free = ts->ts_free;
410 ts->ts_free = ots;
411 l->l_ts = ts;
413 KASSERT(ts->ts_obj == obj);
414 KASSERT(TS_ALL_WAITERS(ts) != 0);
415 KASSERT(!LIST_EMPTY(&ts->ts_sleepq[TS_READER_Q]) ||
416 !LIST_EMPTY(&ts->ts_sleepq[TS_WRITER_Q]));
419 sq = &ts->ts_sleepq[q];
420 ts->ts_waiters[q]++;
444 turnstile_wakeup(turnstile_t *ts, int q, int count, lwp_t *nl)
451 hash = TS_HASH(ts->ts_obj);
453 sq = &ts->ts_sleepq[q];
457 KASSERT(count <= TS_WAITERS(ts, q));
459 KASSERT(ts->ts_inheritor == curlwp || ts->ts_inheritor == NULL);
465 if (ts->ts_inheritor != NULL) {
466 turnstile_unlendpri(ts);
478 turnstile_remove(ts, nl, q);
483 turnstile_remove(ts, l, q);
528 turnstile_t *ts;
537 LIST_FOREACH(ts, tc, ts_chain)
538 if (ts->ts_obj == obj)
541 if (ts == NULL) {
546 rsq = &ts->ts_sleepq[TS_READER_Q];
547 wsq = &ts->ts_sleepq[TS_WRITER_Q];
550 (*pr)("=> %d waiting readers:", TS_WAITERS(ts, TS_READER_Q));
556 (*pr)("=> %d waiting writers:", TS_WAITERS(ts, TS_WRITER_Q));