[Mesa-dev] [PATCH 3/7] util/queue: move thread creation into a separate function

Ian Romanick idr at freedesktop.org
Thu Jan 3 19:45:20 UTC 2019


Looks to be a simple enough refactor.  This patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

On 11/28/18 6:59 PM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> ---
>  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);
> 



More information about the mesa-dev mailing list