[Mesa-dev] [PATCH] i965: Don't leak gen_spec from INTEL_DEBUG=bat handling.

Kenneth Graunke kenneth at whitecape.org
Thu Mar 23 05:25:00 UTC 2017


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



More information about the mesa-dev mailing list