On Tue, Jul 11, 2017 at 12:21 AM, Marek Olšák <mar...@gmail.com> wrote: > From: Marek Olšák <marek.ol...@amd.com> > > 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.
Can't this cause the queue to grow uncontrollably, like on GPU hangs, making already difficult to debug situations worse? Perhaps util_queue_add_job() could have a non-blocking-fail option and the caller could then retry after releasing the mutex for a bit. Gražvydas _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev