Re: [PATCH RFC v3 02/12] perf jevents: Add support for system events tables

From: John Garry
Date: Mon May 11 2020 - 11:03:47 EST


On 11/05/2020 12:01, Jiri Olsa wrote:
On Thu, May 07, 2020 at 07:57:41PM +0800, John Garry wrote:

SNIP

+ &sys_event_tables);
+ }
+
print_events_table_prefix(eventsfp, tblname);
return 0;
}
@@ -1180,7 +1253,6 @@ int main(int argc, char *argv[])
} else if (rc < 0) {
/* Make build fail */
fclose(eventsfp);
- free_arch_std_events();
ret = 1;
goto out_free_mapfile;
} else if (rc) {
@@ -1206,27 +1278,31 @@ int main(int argc, char *argv[])
if (close_table)
print_events_table_suffix(eventsfp);
- if (!mapfile) {
- pr_info("%s: No CPU->JSON mapping?\n", prog);
- goto empty_map;
+ if (mapfile) {
+ if (process_mapfile(eventsfp, mapfile)) {
+ pr_err("%s: Error processing mapfile %s\n", prog,
+ mapfile);
+ /* Make build fail */
+ fclose(eventsfp);
+ ret = 1;
+ }
+ } else {
+ pr_err("%s: No CPU->JSON mapping?\n", prog);

shouldn't we jump to empty_map in here? there still needs to be a
mapfile, right?

In theory we could only support sys events :)

But I'll now make this a (empty map) failure case. And I think that another error case handling needs fixing in my patch.


As for this:

+ fprintf(outfp, "struct pmu_sys_events pmu_sys_event_tables[] = {");
>> +
>> + list_for_each_entry(sys_event_table, &sys_event_tables, list) {
>> + fprintf(outfp, "\n\t{\n\t\t.table = %s,\n\t},",
>> + sys_event_table->name);
>> + }
>> + fprintf(outfp, "\n\t{\n\t\t.table = 0\n\t},");
>
> this will add extra tabs:
>
> {
> .table = 0
> },
>
> while the rest of the file starts items without any indent
>

I'll ensure the indent is the same.

BTW, is there anything to be said for removing the empty map feature (and always breaking the perf build instead)? I guess that it was just an early feature for dealing with unstable JSONs.

Thanks,
john


jirka

}
- if (process_mapfile(eventsfp, mapfile)) {
- pr_info("%s: Error processing mapfile %s\n", prog, mapfile);
- /* Make build fail */
+ if (process_system_event_tables(eventsfp)) {
fclose(eventsfp);
- free_arch_std_events();
ret = 1;
}
-
goto out_free_mapfile;
empty_map:
fclose(eventsfp);
create_empty_mapping(output_file);
- free_arch_std_events();
out_free_mapfile:
+ free_arch_std_events();
+ free_sys_event_tables();
free(mapfile);
return ret;
}

SNIP

.