Re: [Mesa-dev] [PATCH 1/4] intel/decoder: add gen_spec_init method

2018-09-05 Thread Lionel Landwerlin

On 05/09/2018 18:19, Sagar Ghuge wrote:

Initialize gen_spec instance properly when loading hardware xml
description from specifc directory to avoid segmentation fault.

Signed-off-by: Sagar Ghuge 
---
  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..dbd060d53c 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()



I think in C, you would write : gen_spec_init(void)


With that fixed :


Reviewed-by: Lionel Landwerlin 



+{
+   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);



___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/4] intel/decoder: add gen_spec_init method

2018-09-05 Thread Sagar Ghuge
Initialize gen_spec instance properly when loading hardware xml
description from specifc directory to avoid segmentation fault.

Signed-off-by: Sagar Ghuge 
---
 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..dbd060d53c 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()
+{
+   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);
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev