Lines Matching defs:tracker

126 	struct rm_priotracker *tracker;
132 tracker = (struct rm_priotracker *)how;
133 rm_rlock(rm, tracker);
144 struct rm_priotracker *tracker;
148 tracker = NULL;
164 tracker = (struct rm_priotracker *)queue;
165 if ((tracker->rmp_rmlock == rm) &&
166 (tracker->rmp_thread == td)) {
167 how = (uintptr_t)tracker;
171 KASSERT(tracker != NULL,
174 rm_runlock(rm, tracker);
197 * Add or remove tracker from per-cpu list.
203 rm_tracker_add(struct pcpu *pc, struct rm_priotracker *tracker)
207 /* Initialize all tracker pointers */
208 tracker->rmp_cpuQueue.rmq_prev = &pc->pc_rm_queue;
210 tracker->rmp_cpuQueue.rmq_next = next;
213 next->rmq_prev = &tracker->rmp_cpuQueue;
216 pc->pc_rm_queue.rmq_next = &tracker->rmp_cpuQueue;
228 struct rm_priotracker *tracker;
234 tracker = (struct rm_priotracker *)queue;
235 if ((tracker->rmp_rmlock == rm) && (tracker->rmp_thread == td))
242 rm_tracker_remove(struct pcpu *pc, struct rm_priotracker *tracker)
246 next = tracker->rmp_cpuQueue.rmq_next;
247 prev = tracker->rmp_cpuQueue.rmq_prev;
261 struct rm_priotracker *tracker;
267 tracker = (struct rm_priotracker *)queue;
268 if (tracker->rmp_rmlock == rm && tracker->rmp_flags == 0) {
269 tracker->rmp_flags = RMPF_ONQUEUE;
271 LIST_INSERT_HEAD(&rm->rm_activeReaders, tracker,
350 _rm_rlock_hard(struct rmlock *rm, struct rm_priotracker *tracker, int trylock)
363 /* Remove our tracker from the per-cpu list. */
364 rm_tracker_remove(pc, tracker);
368 * rmp_flags must happen after the tracker is removed from the list.
371 if (tracker->rmp_flags) {
372 /* Just add back tracker - we hold the lock. */
373 rm_tracker_add(pc, tracker);
384 * Just grant the lock if this thread already has a tracker
389 LIST_INSERT_HEAD(&rm->rm_activeReaders, tracker,
391 tracker->rmp_flags = RMPF_ONQUEUE;
393 rm_tracker_add(pc, tracker);
422 rm_tracker_add(pc, tracker);
435 _rm_rlock(struct rmlock *rm, struct rm_priotracker *tracker, int trylock)
443 tracker->rmp_flags = 0;
444 tracker->rmp_thread = td;
445 tracker->rmp_rmlock = rm;
456 rm_tracker_add(pc, tracker);
473 return _rm_rlock_hard(rm, tracker, trylock);
477 _rm_unlock_hard(struct thread *td,struct rm_priotracker *tracker)
485 if (!tracker->rmp_flags)
489 LIST_REMOVE(tracker, rmp_qentry);
491 if (tracker->rmp_flags & RMPF_SIGNAL) {
495 rm = tracker->rmp_rmlock;
510 _rm_runlock(struct rmlock *rm, struct rm_priotracker *tracker)
513 struct thread *td = tracker->rmp_thread;
520 rm_tracker_remove(pc, tracker);
527 if (__predict_true(0 == (td->td_owepreempt | tracker->rmp_flags)))
530 _rm_unlock_hard(td, tracker);
635 _rm_rlock_debug(struct rmlock *rm, struct rm_priotracker *tracker,
665 if (_rm_rlock(rm, tracker, trylock)) {
682 _rm_runlock_debug(struct rmlock *rm, struct rm_priotracker *tracker,
694 _rm_runlock(rm, tracker);
719 _rm_rlock_debug(struct rmlock *rm, struct rm_priotracker *tracker,
723 return _rm_rlock(rm, tracker, trylock);
727 _rm_runlock_debug(struct rmlock *rm, struct rm_priotracker *tracker,
731 _rm_runlock(rm, tracker);