Messages in this thread Patches in this message | | | Subject | Re: [BUG] jevents problem when cross building Re: [PATCH 2/3] perf tools: Allow to enable/disable events via control file | From | John Garry <> | Date | Thu, 10 Dec 2020 19:57:26 +0000 |
| |
On 10/12/2020 18:27, John Garry wrote: >> Its unpublished, I'll send it to the tmp.perf/core branch now. > > I use cross-compile for arm64 to build, and it's ok. > > I notice that the failures are for architectures which don't have an > entry under pmu-events/arch, so maybe we're missing some 'weak' > definition of pmu_sys_event_tables. > > I'll check now. >
Hi Arnaldo,
Can you try this on top:
----8<-----
From 201aa2cb7bc8723765afd84a5d3972248af0f0a1 Mon Sep 17 00:00:00 2001 From: John Garry <john.garry@huawei.com> Date: Thu, 10 Dec 2020 19:45:14 +0000 Subject: [PATCH] perf jevents: Add system events table for empty mapping
For architectures which have no PMU event lists - like arm32 - an empty mapping table is printed. This is how the "pmu_events_map" symbol - referenced in util/pmu.c::perf_pmu__find_map() - is created for those architectures.
Since pmu-events.c now includes a new table - "pmu_sys_event_tables" - which is also referenced from util/pmu.c, also add this for the empty mappings.
Signed-off-by: John Garry <john.garry@huawei.com>
diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c index e930096ad713..28e20d9ec0f5 100644 --- a/tools/perf/pmu-events/jevents.c +++ b/tools/perf/pmu-events/jevents.c @@ -816,19 +816,30 @@ static void print_mapping_test_table(FILE *outfp) fprintf(outfp, "},\n"); }
+static void print_system_event_mapping_table_prefix(FILE *outfp) +{ + fprintf(outfp, "\nstruct pmu_sys_events pmu_sys_event_tables[] = {"); +} + +static void print_system_event_mapping_table_suffix(FILE *outfp) +{ + fprintf(outfp, "\n\t{\n\t\t.table = 0\n\t},"); + + fprintf(outfp, "\n};\n"); +} + static int process_system_event_tables(FILE *outfp) { struct sys_event_table *sys_event_table;
- fprintf(outfp, "\nstruct pmu_sys_events pmu_sys_event_tables[] = {"); + print_system_event_mapping_table_prefix(outfp);
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->soc_id); } - fprintf(outfp, "\n\t{\n\t\t.table = 0\n\t},");
- fprintf(outfp, "\n};\n"); + print_system_event_mapping_table_suffix(outfp);
return 0; } @@ -938,6 +949,9 @@ static void create_empty_mapping(const char *output_file) fprintf(outfp, "#include \"pmu-events/pmu-events.h\"\n"); print_mapping_table_prefix(outfp); print_mapping_table_suffix(outfp); + print_system_event_mapping_table_prefix(outfp); + print_system_event_mapping_table_suffix(outfp); + fclose(outfp); }
---->8---- Obviously I never tested building for one of test architectures which does not use PMU events - sorry!
I'll review this more tomorrow.
Thanks!
> >> >> More results from testing: >> >> 59 13.57 ubuntu:16.04-x-arm : FAIL >> arm-linux-gnueabihf-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 >> 20160609 >> >> [perfbuilder@five ~]$ tail -20 dm.log/ubuntu\:16.04-x-arm >> CC /tmp/build/perf/util/expr.o >> LD /tmp/build/perf/util/intel-pt-decoder/perf-in.o >> LD /tmp/build/perf/util/perf-in.o >> LD /tmp/build/perf/perf-in.o >> LINK /tmp/build/perf/perf >> /tmp/build/perf/perf-in.o: In function `pmu_for_each_sys_event': >> /git/linux/tools/perf/util/pmu.c:816: undefined reference to >> `pmu_sys_event_tables' >> /git/linux/tools/perf/util/pmu.c:816: undefined reference to >> `pmu_sys_event_tables' >> /tmp/build/perf/perf-in.o: In function `pmu_add_sys_aliases': >> /git/linux/tools/perf/util/pmu.c:886: undefined reference to >> `pmu_sys_event_tables' >> /git/linux/tools/perf/util/pmu.c:886: undefined reference to >> `pmu_sys_event_tables' >> collect2: error: ld returned 1 exit status >> Makefile.perf:659: recipe for target '/tmp/build/perf/perf' failed >> make[2]: *** [/tmp/build/perf/perf] Error 1 >> Makefile.perf:232: recipe for target 'sub-make' failed >> make[1]: *** [sub-make] Error 2 >> Makefile:69: recipe for target 'all' failed >> make: *** [all] Error 2 >> make: Leaving directory '/git/linux/tools/perf' >> + exit 1
From 201aa2cb7bc8723765afd84a5d3972248af0f0a1 Mon Sep 17 00:00:00 2001 From: John Garry <john.garry@huawei.com> Date: Thu, 10 Dec 2020 19:45:14 +0000 Subject: [PATCH] perf jevents: Add system events table for empty mapping
For architectures which have no PMU event lists - like arm32 - an empty mapping table is printed. This is how the "pmu_events_map" symbol - referenced in util/pmu.c::perf_pmu__find_map() - is created for those architectures.
Since pmu-events.c now includes a new table - "pmu_sys_event_tables" - which is also referenced from util/pmu.c, also add this for the empty mappings.
Signed-off-by: John Garry <john.garry@huawei.com>
diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c index e930096ad713..28e20d9ec0f5 100644 --- a/tools/perf/pmu-events/jevents.c +++ b/tools/perf/pmu-events/jevents.c @@ -816,19 +816,30 @@ static void print_mapping_test_table(FILE *outfp) fprintf(outfp, "},\n"); } +static void print_system_event_mapping_table_prefix(FILE *outfp) +{ + fprintf(outfp, "\nstruct pmu_sys_events pmu_sys_event_tables[] = {"); +} + +static void print_system_event_mapping_table_suffix(FILE *outfp) +{ + fprintf(outfp, "\n\t{\n\t\t.table = 0\n\t},"); + + fprintf(outfp, "\n};\n"); +} + static int process_system_event_tables(FILE *outfp) { struct sys_event_table *sys_event_table; - fprintf(outfp, "\nstruct pmu_sys_events pmu_sys_event_tables[] = {"); + print_system_event_mapping_table_prefix(outfp); 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->soc_id); } - fprintf(outfp, "\n\t{\n\t\t.table = 0\n\t},"); - fprintf(outfp, "\n};\n"); + print_system_event_mapping_table_suffix(outfp); return 0; } @@ -938,6 +949,9 @@ static void create_empty_mapping(const char *output_file) fprintf(outfp, "#include \"pmu-events/pmu-events.h\"\n"); print_mapping_table_prefix(outfp); print_mapping_table_suffix(outfp); + print_system_event_mapping_table_prefix(outfp); + print_system_event_mapping_table_suffix(outfp); + fclose(outfp); } -- 2.26.2
| |