summaryrefslogtreecommitdiff
path: root/src/util/u_queue.h
AgeCommit message (Collapse)AuthorFilesLines
8 daysutil/u_queue: read fence->signalled locked with TSANGert Wollny1-0/+18
When TSAN is enabled we use standard mutexes instead of futexes. With futexes the fence->signalled is read using an atomic operation, to best mimic this let's protect the read with a locked mutex. This avoids TSAN reporting a race condition (false positive with futexes) with Zink when accessing the pipeline cache. Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28650>
2024-04-03util: Turn futex_wake parameter to int32_t for consistence across platformsYonggang Luo1-1/+1
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com> Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28473>
2023-07-18util/u_queue: always enable UTIL_QUEUE_INIT_SCALE_THREADS, remove the flagMarek Olšák1-1/+1
It means that threads are created on demand except for the first one. It reduces process startup time. Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24173>
2023-07-18util/u_queue: fix util_queue_finish deadlock by merging lock and finish_lockMarek Olšák1-2/+2
and by disabling the on-demand thread creation, which breaks the finish logic. Fixes: 3713dc6b2a7 - util/u_queue: add UTIL_QUEUE_INIT_SCALE_THREADS flag Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8363 Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24173>
2022-09-26glthread,hud: draw per-frame values and expose the number of batches per frameMarek Olšák1-0/+1
This is better because we see the statistics for 1 frame instead of 1 second. Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18828>
2021-10-05util/queue: use simple_mtx_t for finish_lockMarek Olšák1-1/+2
Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13152>
2021-06-17util/u_queue: add UTIL_QUEUE_INIT_SCALE_THREADS flagPierre-Eric Pelloux-Prayer1-0/+1
This flag allow to create a single thread initially, but set max_thread to the request thread count. If the queue is full and num_threads is lower than max_threads, we spawn a new thread to help process the queue faster. This avoid creating N threads at queue creation time. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11296>
2021-06-16util/queue: add a global data pointer for the queue objectMike Blumenkrantz1-2/+5
this better enables object-specific (e.g., context) queues where the owner of the queue will always be needed and various pointers will be passed in for tasks Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11312>
2021-01-28util: Use explicit relaxed reads for u_queueWitold Baryluk1-2/+2
These are no-op, but make clang thread sanitizer happy. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8230>
2020-06-16util: enable futex usage on BSDs after 7dc2f4788288Jan Beich1-1/+1
Reviewed-by: Eric Engestrom <eric@engestrom.ch> Cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5460>
2019-09-19util/u_queue: track job size and limit the size of queue growthTimothy Arceri1-1/+4
When both UTIL_QUEUE_INIT_RESIZE_IF_FULL and UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY are set, we can get into a situation where the queue never executes and grows to a huge size due to all other threads being busy. This is the case with the shader cache when attempting to compile a huge number of shaders up front. If all threads are busy compiling shaders the cache queues memory use can climb into the many GBs very fast. The use of these two flags with the shader cache is intended to allow shaders compiled at runtime to be compiled as fast as possible. To avoid huge memory use but still allow the queue to perform optimally in the run time compilation case, we now add the ability to track memory consumed by the jobs in the queue and limit it to a hardcoded 256MB which should be more than enough. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
2019-04-01util/queue: add util_queue_adjust_num_threadsMarek Olšák1-0/+8
for ARB_parallel_shader_compile Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
2019-04-01util/queue: add ability to kill a subset of threadsMarek Olšák1-3/+2
for ARB_parallel_shader_compile
2018-10-06util/u_queue: add UTIL_QUEUE_INIT_SET_FULL_THREAD_AFFINITYMarek Olšák1-0/+1
Initial version discussed with Rob Clark under a different patch name. This approach leaves his driver unaffected.
2018-07-04kutil/queue: add a process name into a thread nameMarek Olšák1-1/+1
v2: simplifications Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> (v1) Reviewed-by: Eric Engestrom <eric.engestrom@intel.com> (v1)
2018-04-27util/u_queue: fix a deadlock in util_queue_finishMarek Olšák1-0/+1
Cc: 18.0 18.1 <mesa-stable@lists.freedesktop.org> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
2017-11-20util/u_queue: really use futex-based fencesNicolai Hähnle1-1/+1
The relevant define changed in the final revision of the simple mutex patch. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
2017-11-10util/u_queue: handle OS_TIMEOUT_INFINITE in util_queue_fence_wait_timeoutNicolai Hähnle1-0/+6
Fixes e.g. piglit/bin/bufferstorage-persistent read -auto Fixes: e6dbc804a87a ("winsys/amdgpu: handle cs_add_fence_dependency for deferred/unsubmitted fences") Reviewed-by: Marek Olšák <marek.olsak@amd.com>
2017-11-09util/u_queue: add util_queue_fence_wait_timeoutNicolai Hähnle1-21/+33
v2: - style fixes - fix missing timeout handling in futex path Reviewed-by: Marek Olšák <marek.olsak@amd.com>
2017-11-09u_queue: add util_queue_finish for waiting for previously added jobsNicolai Hähnle1-0/+2
Schedule one job for every thread, and wait on a barrier inside the job execution function. v2: avoid alloca (fixes Windows build error) Reviewed-by: Marek Olšák <marek.olsak@amd.com> (v1)
2017-11-09u_queue: add a futex-based implementation of fencesNicolai Hähnle1-0/+92
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 <marek.olsak@amd.com>
2017-11-09u_queue: add util_queue_fence_resetNicolai Hähnle1-0/+13
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
2017-11-09u_queue: export util_queue_fence_signalNicolai Hähnle1-0/+1
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
2017-11-09u_queue: group fence functions togetherNicolai Hähnle1-9/+10
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
2017-07-17util/u_queue: add an option to resize the queue when it's fullMarek Olšák1-0/+2
Consider the following situation: mtx_lock(mutex); do_something(); util_queue_add_job(...); mtx_unlock(mutex); If the queue is full, util_queue_add_job will wait for a free slot. If the job which is currently being executed tries to lock the mutex, it will be stuck forever, because util_queue_add_job is stuck. The deadlock can be trivially resolved by increasing the queue size (reallocating the queue) in util_queue_add_job if the queue is full. Then util_queue_add_job becomes wait-free. radeonsi will use it. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
2017-06-26mesa/glthread: add glthread "perf" counters and pass them to gallium HUDMarek Olšák1-0/+14
for HUD integration in following commits. This valuable profiling data will allow us to see on the HUD how well glthread is able to utilize parallelism. This is better than benchmarking, because you can see exactly what's happening and you don't have to be CPU-bound. u_threaded_context has the same counters. Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
2017-06-07util/u_queue: fix a use-before-initialization race for queue->threadsMarek Olšák1-1/+0
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
2017-06-07util/u_queue: add an option to set the minimum thread priorityMarek Olšák1-1/+5
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
2017-06-07util/u_queue: add a way to remove a job when we just want to destroy itMarek Olšák1-0/+2
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
2017-03-13util/u_queue: make u_queue accessible to cppTimothy Arceri1-0/+8
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
2017-03-12gallium/util: move u_queue.{c,h} to src/utilTimothy Arceri1-0/+109
This will allow us to use it outside of gallium for things like compressing shader cache entries. Reviewed-by: Marek Olšák <marek.olsak@amd.com>