Mesa (master): ac/llvm: export ac_init_llvm_once in targets

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 10 10:17:06 UTC 2020


Module: Mesa
Branch: master
Commit: 50d20dc055decf43f956601d71572f825c2b2eca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=50d20dc055decf43f956601d71572f825c2b2eca

Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date:   Thu Jun 25 15:14:01 2020 +0200

ac/llvm: export ac_init_llvm_once in targets

If a program like mpv uses both radeon_dri.so (because --vo=gpu) and
radeonsi_drv_video.so (because --hwdec=vaapi) then LLVM will be inialized twice.

The commit exports the ac_init_llvm_once so there's only one instance of the
function.

See also 18b12bf5335 ("targets: export radeon winsys_create functions to silence LLVM warning")
which implemented this workaround initially.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/1377
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Acked-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5648>

---

 src/amd/llvm/ac_llvm_util.c              | 5 ++---
 src/amd/vulkan/meson.build               | 1 +
 src/gallium/targets/dri-vdpau.dyn        | 1 +
 src/gallium/targets/dri/dri.sym          | 1 +
 src/gallium/targets/omx/omx.sym          | 1 +
 src/gallium/targets/pipe-loader/pipe.sym | 1 +
 src/gallium/targets/va/va.sym            | 1 +
 src/gallium/targets/vdpau/vdpau.sym      | 1 +
 8 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/amd/llvm/ac_llvm_util.c b/src/amd/llvm/ac_llvm_util.c
index 62e163b0057..937e0dbf1fb 100644
--- a/src/amd/llvm/ac_llvm_util.c
+++ b/src/amd/llvm/ac_llvm_util.c
@@ -78,10 +78,9 @@ static void ac_init_llvm_target()
 	LLVMParseCommandLineOptions(ARRAY_SIZE(argv), argv, NULL);
 }
 
-static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
-
-void ac_init_llvm_once(void)
+PUBLIC void ac_init_llvm_once(void)
 {
+	static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
 	call_once(&ac_init_llvm_target_once_flag, ac_init_llvm_target);
 }
 
diff --git a/src/amd/vulkan/meson.build b/src/amd/vulkan/meson.build
index d4127b9d602..a44e785b223 100644
--- a/src/amd/vulkan/meson.build
+++ b/src/amd/vulkan/meson.build
@@ -176,6 +176,7 @@ if with_symbols_check
     args : [
       '--lib', libvulkan_radeon,
       '--symbols-file', vulkan_icd_symbols,
+      '--ignore-symbol', 'ac_init_llvm_once',
       symbols_check_args,
     ],
     suite : ['amd'],
diff --git a/src/gallium/targets/dri-vdpau.dyn b/src/gallium/targets/dri-vdpau.dyn
index a7919f7d3ba..d37123a8659 100644
--- a/src/gallium/targets/dri-vdpau.dyn
+++ b/src/gallium/targets/dri-vdpau.dyn
@@ -2,4 +2,5 @@
 	nouveau_drm_screen_create;
 	radeon_drm_winsys_create;
 	amdgpu_winsys_create;
+	ac_init_llvm_once;
 };
diff --git a/src/gallium/targets/dri/dri.sym b/src/gallium/targets/dri/dri.sym
index 1fdf18beee7..83914c60cf3 100644
--- a/src/gallium/targets/dri/dri.sym
+++ b/src/gallium/targets/dri/dri.sym
@@ -6,6 +6,7 @@
 		radeon_drm_winsys_create;
 		amdgpu_winsys_create;
 		fd_drm_screen_create;
+		ac_init_llvm_once;
 	local:
 		*;
 };
diff --git a/src/gallium/targets/omx/omx.sym b/src/gallium/targets/omx/omx.sym
index 07b65e57643..1cca4645bbb 100644
--- a/src/gallium/targets/omx/omx.sym
+++ b/src/gallium/targets/omx/omx.sym
@@ -7,6 +7,7 @@
 		# due to LLVM being initialized multiple times.
 		radeon_drm_winsys_create;
 		amdgpu_winsys_create;
+		ac_init_llvm_once;
 	local:
 		*;
 };
diff --git a/src/gallium/targets/pipe-loader/pipe.sym b/src/gallium/targets/pipe-loader/pipe.sym
index 605cb83d802..8054e11ae18 100644
--- a/src/gallium/targets/pipe-loader/pipe.sym
+++ b/src/gallium/targets/pipe-loader/pipe.sym
@@ -7,6 +7,7 @@
 		# due to LLVM being initialized multiple times.
 		radeon_drm_winsys_create;
 		amdgpu_winsys_create;
+		ac_init_llvm_once;
 	local:
 		*;
 };
diff --git a/src/gallium/targets/va/va.sym b/src/gallium/targets/va/va.sym
index 917c3d3c301..3f48ab61e98 100644
--- a/src/gallium/targets/va/va.sym
+++ b/src/gallium/targets/va/va.sym
@@ -6,6 +6,7 @@
 		# due to LLVM being initialized multiple times.
 		radeon_drm_winsys_create;
 		amdgpu_winsys_create;
+		ac_init_llvm_once;
 	local:
 		*;
 };
diff --git a/src/gallium/targets/vdpau/vdpau.sym b/src/gallium/targets/vdpau/vdpau.sym
index 5e71c6285a6..36935e9e14d 100644
--- a/src/gallium/targets/vdpau/vdpau.sym
+++ b/src/gallium/targets/vdpau/vdpau.sym
@@ -4,6 +4,7 @@
                nouveau_drm_screen_create;
                radeon_drm_winsys_create;
                amdgpu_winsys_create;
+               ac_init_llvm_once;
        local:
                *;
 };



More information about the mesa-commit mailing list