Lines Matching refs:fence
112 do_futex_fence_wait(struct util_queue_fence *fence,
115 uint32_t v = p_atomic_read_relaxed(&fence->val);
122 v = p_atomic_cmpxchg(&fence->val, 1, 2);
127 int r = futex_wait(&fence->val, 2, timeout ? &ts : NULL);
133 v = p_atomic_read_relaxed(&fence->val);
140 _util_queue_fence_wait(struct util_queue_fence *fence)
142 do_futex_fence_wait(fence, false, 0);
146 _util_queue_fence_wait_timeout(struct util_queue_fence *fence,
149 return do_futex_fence_wait(fence, true, abs_timeout);
156 util_queue_fence_signal(struct util_queue_fence *fence)
158 mtx_lock(&fence->mutex);
159 fence->signalled = true;
160 cnd_broadcast(&fence->cond);
161 mtx_unlock(&fence->mutex);
165 _util_queue_fence_wait(struct util_queue_fence *fence)
167 mtx_lock(&fence->mutex);
168 while (!fence->signalled)
169 cnd_wait(&fence->cond, &fence->mutex);
170 mtx_unlock(&fence->mutex);
174 _util_queue_fence_wait_timeout(struct util_queue_fence *fence,
195 mtx_lock(&fence->mutex);
196 while (!fence->signalled) {
197 if (cnd_timedwait(&fence->cond, &fence->mutex, &ts) != thrd_success)
200 mtx_unlock(&fence->mutex);
203 return fence->signalled;
207 util_queue_fence_init(struct util_queue_fence *fence)
209 memset(fence, 0, sizeof(*fence));
210 (void) mtx_init(&fence->mutex, mtx_plain);
211 cnd_init(&fence->cond);
212 fence->signalled = true;
216 util_queue_fence_destroy(struct util_queue_fence *fence)
218 assert(fence->signalled);
221 * util_queue_fence_signal (having set the fence to signalled but still
222 * holding the fence mutex).
224 * A common contract between threads is that as soon as a fence is signalled
226 * util_queue_fence_is_signalled does not lock the fence mutex (for
229 mtx_lock(&fence->mutex);
230 mtx_unlock(&fence->mutex);
232 cnd_destroy(&fence->cond);
233 mtx_destroy(&fence->mutex);
307 if (job.fence)
308 util_queue_fence_signal(job.fence);
320 if (queue->jobs[i].fence)
321 util_queue_fence_signal(queue->jobs[i].fence);
547 struct util_queue_fence *fence,
563 if (fence)
564 util_queue_fence_reset(fence);
615 ptr->fence = fence;
633 * In all cases, the fence is signalled when the function returns.
639 util_queue_drop_job(struct util_queue *queue, struct util_queue_fence *fence)
643 if (util_queue_fence_is_signalled(fence))
649 if (queue->jobs[i].fence == fence) {
662 util_queue_fence_signal(fence);
664 util_queue_fence_wait(fence);