util/u_queue: add an option to set the minimum thread priority

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák
2017-05-31 22:04:29 +02:00
parent 6f2947fa79
commit 89b6c93ae3
8 changed files with 29 additions and 8 deletions

View File

@@ -147,6 +147,21 @@ util_queue_thread_func(void *input)
u_thread_setname(name);
}
if (queue->flags & UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY) {
#if defined(__linux__)
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[thread_index], SCHED_IDLE,
&sched_param);
#endif
}
while (1) {
struct util_queue_job job;
@@ -197,13 +212,15 @@ bool
util_queue_init(struct util_queue *queue,
const char *name,
unsigned max_jobs,
unsigned num_threads)
unsigned num_threads,
unsigned flags)
{
unsigned i;
memset(queue, 0, sizeof(*queue));
queue->name = name;
queue->num_threads = num_threads;
queue->flags = flags;
queue->max_jobs = max_jobs;
queue->jobs = (struct util_queue_job*)