Re: [Mesa-dev] [PATCH] i965: Don't leak gen_spec from INTEL_DEBUG=bat handling.
On Wednesday, March 22, 2017 10:35:50 PM PDT Jason Ekstrand wrote: > Is the whole spec really a flat thing you an free with a single free()? If > not, maybe we should consider pulling in ralloc to help out. You're right, this patch is totally bogus. ralloc sounds appropriate. signature.asc Description: This is a digitally signed message part. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] i965: Don't leak gen_spec from INTEL_DEBUG=bat handling.
Is the whole spec really a flat thing you an free with a single free()? If not, maybe we should consider pulling in ralloc to help out. On March 22, 2017 22:25:40 Kenneth Graunke wrote: We were loading the XML descriptions on every batchbuffer and leaking them each time. Now, we load it once at screen init time and free it at screen destroy time. Caught by Coverity. CID: 1403203 --- src/mesa/drivers/dri/i965/intel_batchbuffer.c | 2 +- src/mesa/drivers/dri/i965/intel_screen.c | 8 src/mesa/drivers/dri/i965/intel_screen.h | 4 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index 49a00c12ba2..e3fb071300c 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -202,7 +202,7 @@ static void do_batch_dump(struct brw_context *brw) { struct intel_batchbuffer *batch = &brw->batch; - struct gen_spec *spec = gen_spec_load(&brw->screen->devinfo); + struct gen_spec *spec = brw->screen->decoder_spec; if (batch->ring != RENDER_RING) return; diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index c7f111d04af..c8c6698a756 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -38,6 +38,7 @@ #include "util/ralloc.h" #include "brw_defines.h" #include "compiler/nir/nir.h" +#include "common/gen_decoder.h" #include "utils.h" #include "xmlpool.h" @@ -1106,6 +1107,8 @@ intelDestroyScreen(__DRIscreen * sPriv) dri_bufmgr_destroy(screen->bufmgr); driDestroyOptionInfo(&screen->optionCache); + free(screen->decoder_spec); + ralloc_free(screen); sPriv->driverPrivate = NULL; } @@ -1764,6 +1767,11 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen) brw_process_intel_debug_variable(); +#ifdef DEBUG + if (INTEL_DEBUG & DEBUG_BATCH) + screen->decoder_spec = gen_spec_load(devinfo); +#endif + if (INTEL_DEBUG & DEBUG_BUFMGR) dri_bufmgr_set_debug(screen->bufmgr, true); diff --git a/src/mesa/drivers/dri/i965/intel_screen.h b/src/mesa/drivers/dri/i965/intel_screen.h index d8cda58c964..29ce94d6756 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.h +++ b/src/mesa/drivers/dri/i965/intel_screen.h @@ -41,6 +41,8 @@ extern "C" { #endif +struct gen_spec; + struct intel_screen { int deviceID; @@ -103,6 +105,8 @@ struct intel_screen * Number of EUs reported by the I915_PARAM_EU_TOTAL parameter */ int eu_total; + + struct gen_spec *decoder_spec; }; extern void intelDestroyContext(__DRIcontext * driContextPriv); -- 2.12.0 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] i965: Don't leak gen_spec from INTEL_DEBUG=bat handling.
We were loading the XML descriptions on every batchbuffer and leaking them each time. Now, we load it once at screen init time and free it at screen destroy time. Caught by Coverity. CID: 1403203 --- src/mesa/drivers/dri/i965/intel_batchbuffer.c | 2 +- src/mesa/drivers/dri/i965/intel_screen.c | 8 src/mesa/drivers/dri/i965/intel_screen.h | 4 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index 49a00c12ba2..e3fb071300c 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -202,7 +202,7 @@ static void do_batch_dump(struct brw_context *brw) { struct intel_batchbuffer *batch = &brw->batch; - struct gen_spec *spec = gen_spec_load(&brw->screen->devinfo); + struct gen_spec *spec = brw->screen->decoder_spec; if (batch->ring != RENDER_RING) return; diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index c7f111d04af..c8c6698a756 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -38,6 +38,7 @@ #include "util/ralloc.h" #include "brw_defines.h" #include "compiler/nir/nir.h" +#include "common/gen_decoder.h" #include "utils.h" #include "xmlpool.h" @@ -1106,6 +1107,8 @@ intelDestroyScreen(__DRIscreen * sPriv) dri_bufmgr_destroy(screen->bufmgr); driDestroyOptionInfo(&screen->optionCache); + free(screen->decoder_spec); + ralloc_free(screen); sPriv->driverPrivate = NULL; } @@ -1764,6 +1767,11 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen) brw_process_intel_debug_variable(); +#ifdef DEBUG + if (INTEL_DEBUG & DEBUG_BATCH) + screen->decoder_spec = gen_spec_load(devinfo); +#endif + if (INTEL_DEBUG & DEBUG_BUFMGR) dri_bufmgr_set_debug(screen->bufmgr, true); diff --git a/src/mesa/drivers/dri/i965/intel_screen.h b/src/mesa/drivers/dri/i965/intel_screen.h index d8cda58c964..29ce94d6756 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.h +++ b/src/mesa/drivers/dri/i965/intel_screen.h @@ -41,6 +41,8 @@ extern "C" { #endif +struct gen_spec; + struct intel_screen { int deviceID; @@ -103,6 +105,8 @@ struct intel_screen * Number of EUs reported by the I915_PARAM_EU_TOTAL parameter */ int eu_total; + + struct gen_spec *decoder_spec; }; extern void intelDestroyContext(__DRIcontext * driContextPriv); -- 2.12.0 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev