i965: don't require 64bit cmpxchg
authorGrazvydas Ignotas <notasas@gmail.com>
Sun, 5 Mar 2017 21:23:25 +0000 (23:23 +0200)
committerMatt Turner <mattst88@gmail.com>
Mon, 6 Mar 2017 19:07:20 +0000 (11:07 -0800)
There are still some distributions trying to support unfortunate people
with old or exotic CPUs that don't have 64bit atomic operations. The
only thing preventing compile of the Intel driver for them seems to be
initialization of a debug variable.

v2: use call_once() instead of unsafe code, as suggested by Matt Turner

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93089
Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
src/intel/common/gen_debug.c

index 858f04db432d5d4e8d45e3aa7b908ee83ca65bd2..96efdab65f789670e75d6c77965f9591bc67ebdd 100644 (file)
@@ -33,8 +33,8 @@
 
 #include "common/gen_debug.h"
 #include "util/macros.h"
-#include "util/u_atomic.h" /* for p_atomic_cmpxchg */
 #include "util/debug.h"
+#include "c11/threads.h"
 
 uint64_t INTEL_DEBUG = 0;
 
@@ -101,9 +101,17 @@ intel_debug_flag_for_shader_stage(gl_shader_stage stage)
    return flags[stage];
 }
 
+static void
+brw_process_intel_debug_variable_once(void)
+{
+   INTEL_DEBUG = parse_debug_string(getenv("INTEL_DEBUG"), debug_control);
+}
+
 void
 brw_process_intel_debug_variable(void)
 {
-   uint64_t intel_debug = parse_debug_string(getenv("INTEL_DEBUG"), debug_control);
-   (void) p_atomic_cmpxchg(&INTEL_DEBUG, 0, intel_debug);
+   static once_flag process_intel_debug_variable_flag = ONCE_FLAG_INIT;
+
+   call_once(&process_intel_debug_variable_flag,
+             brw_process_intel_debug_variable_once);
 }