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 <kenn...@whitecape.org> 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