Mesa (master): intel/decoder: add gen_spec_init method
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Oct 4 09:05:43 UTC 2018
Module: Mesa
Branch: master
Commit: ba3304e7641e5e91b44b14131b4714d0a18c6d58
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ba3304e7641e5e91b44b14131b4714d0a18c6d58
Author: Sagar Ghuge <sagar.ghuge at intel.com>
Date: Wed Sep 5 21:05:21 2018 -0700
intel/decoder: add gen_spec_init method
Initialize gen_spec instance properly when loading hardware xml
description from specifc directory to avoid segmentation fault.
v2: correct function definition (Lionel Landwerlin)
Signed-off-by: Sagar Ghuge <sagar.ghuge at intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
---
src/intel/common/gen_decoder.c | 51 +++++++++++++++++++++++++++++-------------
1 file changed, 35 insertions(+), 16 deletions(-)
diff --git a/src/intel/common/gen_decoder.c b/src/intel/common/gen_decoder.c
index c6c213fcd1..d4db8b89cc 100644
--- a/src/intel/common/gen_decoder.c
+++ b/src/intel/common/gen_decoder.c
@@ -526,6 +526,30 @@ static uint32_t _hash_uint32(const void *key)
return (uint32_t) (uintptr_t) key;
}
+static struct gen_spec *
+gen_spec_init(void)
+{
+ struct gen_spec *spec;
+ spec = rzalloc(NULL, struct gen_spec);
+ if (spec == NULL)
+ return NULL;
+
+ spec->commands =
+ _mesa_hash_table_create(spec, _mesa_hash_string, _mesa_key_string_equal);
+ spec->structs =
+ _mesa_hash_table_create(spec, _mesa_hash_string, _mesa_key_string_equal);
+ spec->registers_by_name =
+ _mesa_hash_table_create(spec, _mesa_hash_string, _mesa_key_string_equal);
+ spec->registers_by_offset =
+ _mesa_hash_table_create(spec, _hash_uint32, _mesa_key_pointer_equal);
+ spec->enums =
+ _mesa_hash_table_create(spec, _mesa_hash_string, _mesa_key_string_equal);
+ spec->access_cache =
+ _mesa_hash_table_create(spec, _mesa_hash_string, _mesa_key_string_equal);
+
+ return spec;
+}
+
struct gen_spec *
gen_spec_load(const struct gen_device_info *devinfo)
{
@@ -560,21 +584,11 @@ gen_spec_load(const struct gen_device_info *devinfo)
XML_SetElementHandler(ctx.parser, start_element, end_element);
XML_SetCharacterDataHandler(ctx.parser, character_data);
- ctx.spec = rzalloc(NULL, struct gen_spec);
-
- ctx.spec->commands =
- _mesa_hash_table_create(ctx.spec, _mesa_hash_string, _mesa_key_string_equal);
- ctx.spec->structs =
- _mesa_hash_table_create(ctx.spec, _mesa_hash_string, _mesa_key_string_equal);
- ctx.spec->registers_by_name =
- _mesa_hash_table_create(ctx.spec, _mesa_hash_string, _mesa_key_string_equal);
- ctx.spec->registers_by_offset =
- _mesa_hash_table_create(ctx.spec, _hash_uint32, _mesa_key_pointer_equal);
- ctx.spec->enums =
- _mesa_hash_table_create(ctx.spec, _mesa_hash_string, _mesa_key_string_equal);
-
- ctx.spec->access_cache =
- _mesa_hash_table_create(ctx.spec, _mesa_hash_string, _mesa_key_string_equal);
+ ctx.spec = gen_spec_init();
+ if (ctx.spec == NULL) {
+ fprintf(stderr, "Failed to create gen_spec\n");
+ return NULL;
+ }
total_length = zlib_inflate(compress_genxmls,
sizeof(compress_genxmls),
@@ -636,7 +650,12 @@ gen_spec_load_from_path(const struct gen_device_info *devinfo,
XML_SetElementHandler(ctx.parser, start_element, end_element);
XML_SetCharacterDataHandler(ctx.parser, character_data);
ctx.loc.filename = filename;
- ctx.spec = rzalloc(NULL, struct gen_spec);
+
+ ctx.spec = gen_spec_init();
+ if (ctx.spec == NULL) {
+ fprintf(stderr, "Failed to create gen_spec\n");
+ return NULL;
+ }
do {
buf = XML_GetBuffer(ctx.parser, XML_BUFFER_SIZE);
More information about the mesa-commit
mailing list