Looks to be a simple enough refactor. This patch is Reviewed-by: Ian Romanick <[email protected]>
On 11/28/18 6:59 PM, Marek Olšák wrote: > From: Marek Olšák <[email protected]> > > --- > src/util/u_queue.c | 56 ++++++++++++++++++++++++++-------------------- > 1 file changed, 32 insertions(+), 24 deletions(-) > > diff --git a/src/util/u_queue.c b/src/util/u_queue.c > index 3812c824b6d..48c5c79552d 100644 > --- a/src/util/u_queue.c > +++ b/src/util/u_queue.c > @@ -298,20 +298,51 @@ util_queue_thread_func(void *input) > util_queue_fence_signal(queue->jobs[i].fence); > queue->jobs[i].job = NULL; > } > } > queue->read_idx = queue->write_idx; > queue->num_queued = 0; > mtx_unlock(&queue->lock); > return 0; > } > > +static bool > +util_queue_create_thread(struct util_queue *queue, unsigned index) > +{ > + struct thread_input *input = > + (struct thread_input *) malloc(sizeof(struct thread_input)); > + input->queue = queue; > + input->thread_index = index; > + > + queue->threads[index] = u_thread_create(util_queue_thread_func, input); > + > + if (!queue->threads[index]) { > + free(input); > + return false; > + } > + > + if (queue->flags & UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY) { > +#if defined(__linux__) && defined(SCHED_IDLE) > + struct sched_param sched_param = {0}; > + > + /* The nice() function can only set a maximum of 19. > + * SCHED_IDLE is the same as nice = 20. > + * > + * Note that Linux only allows decreasing the priority. The original > + * priority can't be restored. > + */ > + pthread_setschedparam(queue->threads[index], SCHED_IDLE, &sched_param); > +#endif > + } > + return true; > +} > + > bool > util_queue_init(struct util_queue *queue, > const char *name, > unsigned max_jobs, > unsigned num_threads, > unsigned flags) > { > unsigned i; > > /* Form the thread name from process_name and name, limited to 13 > @@ -357,53 +388,30 @@ util_queue_init(struct util_queue *queue, > queue->num_queued = 0; > cnd_init(&queue->has_queued_cond); > cnd_init(&queue->has_space_cond); > > queue->threads = (thrd_t*) calloc(num_threads, sizeof(thrd_t)); > if (!queue->threads) > goto fail; > > /* start threads */ > for (i = 0; i < num_threads; i++) { > - struct thread_input *input = > - (struct thread_input *) malloc(sizeof(struct thread_input)); > - input->queue = queue; > - input->thread_index = i; > - > - queue->threads[i] = u_thread_create(util_queue_thread_func, input); > - > - if (!queue->threads[i]) { > - free(input); > - > + if (!util_queue_create_thread(queue, i)) { > if (i == 0) { > /* no threads created, fail */ > goto fail; > } else { > /* at least one thread created, so use it */ > queue->num_threads = i; > break; > } > } > - > - if (flags & UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY) { > - #if defined(__linux__) && defined(SCHED_IDLE) > - struct sched_param sched_param = {0}; > - > - /* The nice() function can only set a maximum of 19. > - * SCHED_IDLE is the same as nice = 20. > - * > - * Note that Linux only allows decreasing the priority. The original > - * priority can't be restored. > - */ > - pthread_setschedparam(queue->threads[i], SCHED_IDLE, &sched_param); > - #endif > - } > } > > add_to_atexit_list(queue); > return true; > > fail: > free(queue->threads); > > if (queue->jobs) { > cnd_destroy(&queue->has_space_cond); > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
