[PATCH libdrm v6 1/1] amdgpu: move asic id table to a separate file
Michel Dänzer
michel at daenzer.net
Wed Jun 7 08:40:54 UTC 2017
On 06/06/17 10:43 PM, Emil Velikov wrote:
> On 31 May 2017 at 21:22, Samuel Li <Samuel.Li at amd.com> wrote:
>
>> --- /dev/null
>> +++ b/amdgpu/amdgpu_asic_id.c
>
>> +static int parse_one_line(const char *line, struct amdgpu_asic_id *id)
>> +{
>> + char *buf, *saveptr;
>> + char *s_did;
>> + char *s_rid;
>> + char *s_name;
>> + char *endptr;
>> + int r = 0;
>> +
>> + buf = strdup(line);
> You don't need the extra strdup here if you use strchr over strtok.
Beware that without strdup here, amdgpu_parse_asic_ids must set line =
NULL after table_line++, so that getline allocates a new buffer for the
next line.
>> +int amdgpu_parse_asic_ids(struct amdgpu_asic_id **p_asic_id_table)
>> +{
>
>> + /* 1st valid line is file version */
>> + while ((n = getline(&line, &len, fp)) != -1) {
>> + /* trim trailing newline */
>> + if (line[n - 1] == '\n')
>> + line[n - 1] = '\0';
> Why do we need this - afaict none of the parsing code cares if we have
> \n or not?
The \n has to be removed somehow, otherwise it ends up as part of the
marketing name returned to the application.
>> + /* end of table */
>> + id = asic_id_table + table_size;
>> + memset(id, 0, sizeof(struct amdgpu_asic_id));
> Here one clears the sentinel, which is needed as we hit realloc above, correct?
>
>> + asic_id_table = realloc(asic_id_table, (table_size+1) *
>> + sizeof(struct amdgpu_asic_id));
> But why do we realloc again?
I asked for that, in order not to waste memory for unused table entries.
>> +free:
>> + free(line);
>> +
>> + if (r && asic_id_table) {
>> + while (table_size--) {
>> + id = asic_id_table + table_size;
>> + free(id->marketing_name);
>> + }
>> + free(asic_id_table);
>> + asic_id_table = NULL;
>> + }
>> +close:
>> + fclose(fp);
>> +
>> + *p_asic_id_table = asic_id_table;
>> +
> Please don't entwine the error path with the normal one.
>
> Setting *p_asic_id_table (or any user provided pointer) when the
> function fails is bad design.
I don't really see the issue with that; it's fine for the only caller of
this function.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the amd-gfx
mailing list