Skip to content

Commit 2df813a

Browse files
Patrick Lerda1ace
Patrick Lerda
authored andcommitted
iris: fix iris_ensure_indirect_generation_shader() memory leak
This change ensures that all these allocations are using the same memory context. For instance, this issue is triggered with: "piglit/bin/arb_shader_image_load_store-host-mem-barrier -auto -fbo": Indirect leak of 32816 byte(s) in 1 object(s) allocated from: #0 0x7f49a35447ef in __interceptor_malloc (/usr/lib64/libasan.so.6+0xb17ef) waydroid#1 0x7f49998e4b4f in ralloc_size ../src/util/ralloc.c:118 waydroid#2 0x7f49998e7521 in create_slab ../src/util/ralloc.c:801 waydroid#3 0x7f49998e7521 in gc_alloc_size ../src/util/ralloc.c:840 waydroid#4 0x7f49998e7d11 in gc_zalloc_size ../src/util/ralloc.c:868 waydroid#5 0x7f49999a6126 in nir_alu_instr_create ../src/compiler/nir/nir.c:682 waydroid#6 0x7f49999cba48 in clone_alu ../src/compiler/nir/nir_clone.c:217 waydroid#7 0x7f49999cc85a in clone_instr ../src/compiler/nir/nir_clone.c:456 waydroid#8 0x7f49999cee3a in clone_block ../src/compiler/nir/nir_clone.c:529 waydroid#9 0x7f49999cee3a in clone_cf_list ../src/compiler/nir/nir_clone.c:583 waydroid#10 0x7f49999d03be in clone_function_impl ../src/compiler/nir/nir_clone.c:660 waydroid#11 0x7f49999d13f7 in nir_function_impl_clone ../src/compiler/nir/nir_clone.c:678 #12 0x7f4999a0e2c5 in lower_call_function_impl ../src/compiler/nir/nir_functions.c:397 #13 0x7f4999a0e2c5 in function_link_pass ../src/compiler/nir/nir_functions.c:430 #14 0x7f4999a0e2c5 in function_link_pass ../src/compiler/nir/nir_functions.c:408 #15 0x7f4999a0e2c5 in nir_function_instructions_pass ../src/compiler/nir/nir_builder.h:108 #16 0x7f4999a0e2c5 in nir_link_shader_functions ../src/compiler/nir/nir_functions.c:452 #17 0x7f499ca30b8f in link_libintel_shaders ../src/gallium/drivers/iris/iris_program_cache.c:329 #18 0x7f499ca30b8f in iris_ensure_indirect_generation_shader ../src/gallium/drivers/iris/iris_program_cache.c:374 #19 0x7f499d185267 in gfx9_emit_indirect_generate ../src/gallium/drivers/iris/iris_indirect_gen.c:593 #20 0x7f499d119c79 in iris_upload_indirect_shader_render_state ../src/gallium/drivers/iris/iris_state.c:8744 #21 0x7f499fe86b01 in iris_indirect_draw_vbo ../src/gallium/drivers/iris/iris_draw.c:233 #22 0x7f499fe86b01 in iris_draw_vbo ../src/gallium/drivers/iris/iris_draw.c:343 #23 0x7f499a174e43 in tc_call_draw_indirect ../src/gallium/auxiliary/util/u_threaded_context.c:3828 #24 0x7f499a1557fe in batch_execute ../src/gallium/auxiliary/util/u_threaded_context.c:453 #25 0x7f499a1557fe in tc_batch_execute ../src/gallium/auxiliary/util/u_threaded_context.c:504 #26 0x7f499a167f26 in _tc_sync ../src/gallium/auxiliary/util/u_threaded_context.c:761 #27 0x7f499a168888 in tc_texture_map ../src/gallium/auxiliary/util/u_threaded_context.c:2783 #28 0x7f49986f2631 in pipe_texture_map ../src/gallium/auxiliary/util/u_inlines.h:556 #29 0x7f49986f2631 in _mesa_map_renderbuffer ../src/mesa/main/renderbuffer.c:494 #30 0x7f49991af7ca in readpixels_memcpy ../src/mesa/main/readpix.c:260 #31 0x7f49991af7ca in _mesa_readpixels ../src/mesa/main/readpix.c:898 #32 0x7f499931ee23 in st_ReadPixels ../src/mesa/state_tracker/st_cb_readpixels.c:575 #33 0x7f49991b40b5 in read_pixels ../src/mesa/main/readpix.c:1199 #34 0x7f49991b40b5 in _mesa_ReadnPixelsARB ../src/mesa/main/readpix.c:1216 #35 0x7f49991b4a20 in _mesa_ReadPixels ../src/mesa/main/readpix.c:1231 ... SUMMARY: AddressSanitizer: 323648 byte(s) leaked in 201 allocation(s). Fixes: 5438b19 ("iris: enable generated indirect draws") Signed-off-by: Patrick Lerda <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31313> (cherry picked from commit b6b363c)
1 parent 81b1e83 commit 2df813a

File tree

2 files changed

+5
-6
lines changed

2 files changed

+5
-6
lines changed

.pick_status.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"description": "iris: fix iris_ensure_indirect_generation_shader() memory leak",
2525
"nominated": true,
2626
"nomination_type": 1,
27-
"resolution": 0,
27+
"resolution": 1,
2828
"main_sha": null,
2929
"because_sha": "5438b1910464e4b17fe0248a96a6ed98f0280a20",
3030
"notes": null

src/gallium/drivers/iris/iris_program_cache.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -370,8 +370,7 @@ iris_ensure_indirect_generation_shader(struct iris_batch *batch)
370370

371371
nir_shader *nir = b.shader;
372372

373-
void *mem_ctx = ralloc_context(NULL);
374-
link_libintel_shaders(nir, screen->vtbl.load_shader_lib(screen, mem_ctx));
373+
link_libintel_shaders(nir, screen->vtbl.load_shader_lib(screen, nir));
375374

376375
NIR_PASS_V(nir, nir_lower_vars_to_ssa);
377376
NIR_PASS_V(nir, nir_opt_cse);
@@ -446,7 +445,7 @@ iris_ensure_indirect_generation_shader(struct iris_batch *batch)
446445
.log_data = &ice->dbg,
447446
.debug_flag = DEBUG_WM,
448447
.stats = stats,
449-
.mem_ctx = mem_ctx,
448+
.mem_ctx = nir,
450449
},
451450
.key = &prog_key.wm,
452451
.prog_data = prog_data,
@@ -471,7 +470,7 @@ iris_ensure_indirect_generation_shader(struct iris_batch *batch)
471470
.log_data = &ice->dbg,
472471
.debug_flag = DEBUG_WM,
473472
.stats = stats,
474-
.mem_ctx = mem_ctx,
473+
.mem_ctx = nir,
475474
},
476475
.key = &prog_key.wm,
477476
.prog_data = prog_data,
@@ -490,7 +489,7 @@ iris_ensure_indirect_generation_shader(struct iris_batch *batch)
490489
ice->shaders.uploader_driver,
491490
IRIS_CACHE_BLORP, sizeof(key), &key, program);
492491

493-
ralloc_free(mem_ctx);
492+
ralloc_free(nir);
494493

495494
struct iris_bo *bo = iris_resource_bo(shader->assembly.res);
496495
iris_use_pinned_bo(batch, bo, false, IRIS_DOMAIN_NONE);

0 commit comments

Comments
 (0)