freedreno: Fix data races with allocating/freeing struct ir3.
authorEric Anholt <eric@anholt.net>
Thu, 25 Jul 2019 20:09:51 +0000 (13:09 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 29 Jul 2019 19:50:49 +0000 (12:50 -0700)
There is a single ir3_compiler in the screen, and each context may be
compiling ir3 shaders, which call ir3_create.  ralloc doesn't do any
locking on its own, so eventually you can end up racing to break
ralloc's linked lists.

We really don't want struct ir3 to live as long as the compiler (maybe
struct ir3_shader's lifetime, if anything), so you'd better be freeing
it anyway.

Fixes: 8fe20762433d ("freedreno/ir3: convert over to ralloc")
Reviewed-by: Rob Clark <robdclark@gmail.com>
src/freedreno/ir3/ir3.c

index 97f4ae96cd9db1db10db9ab2b713df91fd87e743..5c049a5936f29886ab3f1b14d4b3b17698bdc34d 100644 (file)
@@ -48,7 +48,7 @@ void * ir3_alloc(struct ir3 *shader, int sz)
 struct ir3 * ir3_create(struct ir3_compiler *compiler,
                gl_shader_stage type, unsigned nin, unsigned nout)
 {
-       struct ir3 *shader = rzalloc(compiler, struct ir3);
+       struct ir3 *shader = rzalloc(NULL, struct ir3);
 
        shader->compiler = compiler;
        shader->type = type;