gallium/u_threaded: call the driver to pin threads to L3 immediately
authorMarek Olšák <marek.olsak@amd.com>
Sun, 22 Mar 2020 18:07:03 +0000 (14:07 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 31 Mar 2020 03:57:49 +0000 (23:57 -0400)
This is thread-safe and we want it to be done immediately for good L3 cache
usage.

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4369>

src/gallium/auxiliary/util/u_threaded_context.c

index 63ca61bb24997675064c43a1d32209345994423b..66e05fb17729f49f17a13d1662e912b335bf9e8d 100644 (file)
@@ -1936,6 +1936,20 @@ tc_set_context_param(struct pipe_context *_pipe,
 {
    struct threaded_context *tc = threaded_context(_pipe);
 
+   if (param == PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE) {
+      /* Pin the gallium thread as requested. */
+      util_pin_thread_to_L3(tc->queue.threads[0], value,
+                            util_cpu_caps.cores_per_L3);
+
+      /* Execute this immediately (without enqueuing).
+       * It's required to be thread-safe.
+       */
+      struct pipe_context *pipe = tc->pipe;
+      if (pipe->set_context_param)
+         pipe->set_context_param(pipe, param, value);
+      return;
+   }
+
    if (tc->pipe->set_context_param) {
       struct tc_context_param *payload =
          tc_add_struct_typed_call(tc, TC_CALL_set_context_param,
@@ -1944,12 +1958,6 @@ tc_set_context_param(struct pipe_context *_pipe,
       payload->param = param;
       payload->value = value;
    }
-
-   if (param == PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE) {
-      /* Pin the gallium thread as requested. */
-      util_pin_thread_to_L3(tc->queue.threads[0], value,
-                            util_cpu_caps.cores_per_L3);
-   }
 }