gallivm: add coro malloc hooks earlier and always.
authorDave Airlie <airlied@redhat.com>
Mon, 14 Nov 2022 03:47:02 +0000 (13:47 +1000)
committerEric Engestrom <eric@engestrom.ch>
Thu, 17 Nov 2022 14:05:03 +0000 (14:05 +0000)
This fixes GALLIVM_DEBUG=asm for compute shaders, changing
the hooks after dumping causes a segfault because the
memory has already been finalised. Just add the hooks always,
and before dumping anything.

Fixes: f511d2a55337 ("gallivm: rework coroutine malloc/free callouts.")
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19714>
(cherry picked from commit fb7de303ba7cbdb4237d2ae93011bc2845114d35)

.pick_status.json
src/gallium/auxiliary/draw/draw_llvm.c
src/gallium/auxiliary/gallivm/lp_bld_init.c
src/gallium/drivers/llvmpipe/lp_state_cs.c

index 6862152..acf422a 100644 (file)
         "description": "gallivm: add coro malloc hooks earlier and always.",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "f511d2a553377a58b5eea6c6d1170fcc4972237a"
     },
index 1ecff33..50c157b 100644 (file)
@@ -3629,12 +3629,10 @@ draw_tcs_llvm_create_variant(struct draw_llvm *llvm,
       draw_tcs_llvm_dump_variant_key(&variant->key);
    }
 
-   lp_build_coro_declare_malloc_hooks(variant->gallivm);
    draw_tcs_llvm_generate(llvm, variant);
 
    gallivm_compile_module(variant->gallivm);
 
-   lp_build_coro_add_malloc_hooks(variant->gallivm);
    variant->jit_func = (draw_tcs_jit_func)
       gallivm_jit_function(variant->gallivm, variant->function);
 
index cc410cc..584ea73 100644 (file)
@@ -37,6 +37,7 @@
 #include "lp_bld_debug.h"
 #include "lp_bld_misc.h"
 #include "lp_bld_init.h"
+#include "lp_bld_coro.h"
 #include "lp_bld_printf.h"
 
 #include <llvm/Config/llvm-config.h>
@@ -409,6 +410,7 @@ init_gallivm_state(struct gallivm_state *gallivm, const char *name,
    if (!create_pass_manager(gallivm))
       goto fail;
 
+   lp_build_coro_declare_malloc_hooks(gallivm);
    return TRUE;
 
 fail:
@@ -667,6 +669,8 @@ gallivm_compile_module(struct gallivm_state *gallivm)
    lp_init_clock_hook(gallivm);
    LLVMAddGlobalMapping(gallivm->engine, gallivm->get_time_hook, os_time_get_nano);
 
+   lp_build_coro_add_malloc_hooks(gallivm);
+
    if (gallivm_debug & GALLIVM_DEBUG_ASM) {
       LLVMValueRef llvm_func = LLVMGetFirstFunction(gallivm->module);
 
index 8a2c28a..1c9668f 100644 (file)
@@ -148,8 +148,6 @@ generate_compute(struct llvmpipe_context *lp,
       }
    }
 
-   lp_build_coro_declare_malloc_hooks(gallivm);
-
    if (variant->gallivm->cache->data_size)
       return;
 
@@ -831,7 +829,6 @@ generate_variant(struct llvmpipe_context *lp,
 
    gallivm_compile_module(variant->gallivm);
 
-   lp_build_coro_add_malloc_hooks(variant->gallivm);
    variant->nr_instrs += lp_build_count_ir_module(variant->gallivm->module);
 
    variant->jit_function = (lp_jit_cs_func)