Home | History | Annotate | Download | only in drm

Lines Matching refs:tb

44 task_barrier_init(struct task_barrier *tb)
47 mutex_init(&tb->tb_lock, MUTEX_DEFAULT, IPL_VM);
48 cv_init(&tb->tb_cv, "taskbar");
49 tb->tb_cur = 0;
50 tb->tb_gen = 0;
51 tb->tb_max = 0;
55 task_barrier_destroy(struct task_barrier *tb)
58 KASSERT(tb->tb_cur == 0);
59 cv_destroy(&tb->tb_cv);
60 mutex_destroy(&tb->tb_lock);
64 task_barrier_add_task(struct task_barrier *tb)
67 tb->tb_max++;
71 task_barrier_rem_task(struct task_barrier *tb)
74 tb->tb_max--;
78 task_barrier_enter(struct task_barrier *tb)
81 mutex_enter(&tb->tb_lock);
82 KASSERT(tb->tb_cur < tb->tb_max);
83 if (++tb->tb_cur < tb->tb_max) {
84 unsigned gen = tb->tb_gen;
86 cv_wait(&tb->tb_cv, &tb->tb_lock);
87 } while (gen == tb->tb_gen);
89 tb->tb_gen++;
90 cv_broadcast(&tb->tb_cv);
92 mutex_exit(&tb->tb_lock);
96 task_barrier_exit(struct task_barrier *tb)
99 mutex_enter(&tb->tb_lock);
100 KASSERT(tb->tb_cur > 0);
101 if (--tb->tb_cur > 0) {
102 unsigned gen = tb->tb_gen;
104 cv_wait(&tb->tb_cv, &tb->tb_lock);
105 } while (gen == tb->tb_gen);
107 tb->tb_gen++;
108 cv_broadcast(&tb->tb_cv);
113 task_barrier_full(struct task_barrier *tb)
116 task_barrier_enter(tb);
117 task_barrier_exit(tb);