[Mesa-dev] [PATCH 2/2] radeon/llvm: Initialize gallivm targets when initializing the AMDGPU target

Marek Olšák maraeo at gmail.com
Fri Sep 25 05:19:53 PDT 2015


On Thu, Sep 24, 2015 at 6:32 PM, Tom Stellard <thomas.stellard at amd.com> wrote:
> This fixes a race condition in the glx-multithreaded-shader-compile
> test.
>
> CC: "10.6 11.0" <mesa-stable at lists.freedesktop.org>
> ---
>  src/gallium/drivers/radeon/radeon_llvm_emit.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.c b/src/gallium/drivers/radeon/radeon_llvm_emit.c
> index 0002559..045665a 100644
> --- a/src/gallium/drivers/radeon/radeon_llvm_emit.c
> +++ b/src/gallium/drivers/radeon/radeon_llvm_emit.c
> @@ -25,6 +25,7 @@
>   */
>  #include "radeon_llvm_emit.h"
>  #include "radeon_elf_util.h"
> +#include "gallivm/lp_bld_misc.h"
>  #include "util/u_memory.h"
>  #include "pipe/p_shader_tokens.h"
>
> @@ -88,6 +89,7 @@ static void init_r600_target()
>  {
>         static unsigned initialized = 0;
>         if (!initialized) {
> +               gallivm_init_llvm_begin();
>  #if HAVE_LLVM < 0x0307
>                 LLVMInitializeR600TargetInfo();
>                 LLVMInitializeR600Target();
> @@ -101,6 +103,7 @@ static void init_r600_target()
>
>  #endif
>                 initialized = 1;
> +               gallivm_init_llvm_end();

BTW, this code can call the LLVM initialize functions twice, because 2
threads can enter the (!initialized) branch at the same time. Perhaps
gallivm_init_llvm_begin/end should be called outside the branch?

Marek


More information about the mesa-dev mailing list