summaryrefslogtreecommitdiffstats
path: root/src/util/u_queue.c
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2018-10-01 15:51:06 -0400
committerMarek Olšák <[email protected]>2018-10-06 22:05:58 -0400
commitd877451b48a59ab0f9a4210fc736f51da5851c9a (patch)
tree267f260015d8ac2f9664c9d5c575bf0f66ee7e20 /src/util/u_queue.c
parent066aa44fc56d277b3932d124c4962106c6962863 (diff)
util/u_queue: add UTIL_QUEUE_INIT_SET_FULL_THREAD_AFFINITY
Initial version discussed with Rob Clark under a different patch name. This approach leaves his driver unaffected.
Diffstat (limited to 'src/util/u_queue.c')
-rw-r--r--src/util/u_queue.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/util/u_queue.c b/src/util/u_queue.c
index 22d2cdd0fa2..3812c824b6d 100644
--- a/src/util/u_queue.c
+++ b/src/util/u_queue.c
@@ -239,6 +239,20 @@ util_queue_thread_func(void *input)
free(input);
+#ifdef HAVE_PTHREAD_SETAFFINITY
+ if (queue->flags & UTIL_QUEUE_INIT_SET_FULL_THREAD_AFFINITY) {
+ /* Don't inherit the thread affinity from the parent thread.
+ * Set the full mask.
+ */
+ cpu_set_t cpuset;
+ CPU_ZERO(&cpuset);
+ for (unsigned i = 0; i < CPU_SETSIZE; i++)
+ CPU_SET(i, &cpuset);
+
+ pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset);
+ }
+#endif
+
if (strlen(queue->name) > 0) {
char name[16];
util_snprintf(name, sizeof(name), "%s%i", queue->name, thread_index);