diff options
author | Nicolai Hähnle <[email protected]> | 2017-10-22 17:38:31 +0200 |
---|---|---|
committer | Nicolai Hähnle <[email protected]> | 2017-11-09 11:37:39 +0100 |
commit | d1ff0826370cb1cfbcf741c8eb35caf1fddd7d52 (patch) | |
tree | 26f2e7b1c5f19cb9092fddfc1ce94797c7b9ce4a /src/util/u_queue.c | |
parent | 574c59d4f935cccfa18f7054c660200f8be791ad (diff) |
u_queue: add a futex-based implementation of fences
Fences are now 4 bytes instead of 96 bytes (on my 64-bit system).
Signaling a fence is a single atomic operation in the fast case plus a
syscall in the slow case.
Testing if a fence is signaled is the same as before (a simple comparison),
but waiting on a fence is now no more expensive than just testing it in
the fast (already signaled) case.
v2:
- style fixes
- use p_atomic_xxx macros with the right barriers
Acked-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/util/u_queue.c')
-rw-r--r-- | src/util/u_queue.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/util/u_queue.c b/src/util/u_queue.c index 2272006042f..8293ec661b0 100644 --- a/src/util/u_queue.c +++ b/src/util/u_queue.c @@ -89,6 +89,7 @@ remove_from_atexit_list(struct util_queue *queue) * util_queue_fence */ +#ifdef UTIL_QUEUE_FENCE_STANDARD void util_queue_fence_signal(struct util_queue_fence *fence) { @@ -136,6 +137,7 @@ util_queue_fence_destroy(struct util_queue_fence *fence) cnd_destroy(&fence->cond); mtx_destroy(&fence->mutex); } +#endif /**************************************************************************** * util_queue implementation |