From: Ingo Molnar Date: Wed, 27 May 2009 20:13:17 +0000 (+0200) Subject: pref_counter: tools: report: Robustify in case of weird events X-Git-Tag: v2.6.31-rc1~383^2~175 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=55717314c4e3a5180a54228a2f97e50f3496de4c;p=karo-tx-linux.git pref_counter: tools: report: Robustify in case of weird events This error condition: aldebaran:~/linux/linux/Documentation/perf_counter> perf report dso__load_sym: cannot get elf header. failed to open: /etc/ld.so.cache problem processing PERF_EVENT_MMAP, bailing out caused the profile to be very short - as the error was at the beginning of the file and we bailed out completely. Be more permissive and consider the event broken instead. Cc: Peter Zijlstra Cc: Mike Galbraith Cc: Paul Mackerras Cc: Corey Ashford Cc: Marcelo Tosatti Cc: Arnaldo Carvalho de Melo Cc: Thomas Gleixner Cc: John Kacur LKML-Reference: Signed-off-by: Ingo Molnar --- diff --git a/Documentation/perf_counter/builtin-report.c b/Documentation/perf_counter/builtin-report.c index 6df95c2698c6..5993c129d736 100644 --- a/Documentation/perf_counter/builtin-report.c +++ b/Documentation/perf_counter/builtin-report.c @@ -1117,9 +1117,9 @@ more: } if (thread == NULL) { - fprintf(stderr, "problem processing %d event, bailing out\n", + fprintf(stderr, "problem processing %d event, skipping it.\n", event->header.type); - goto done; + goto broken_event; } if (event->header.misc & PERF_EVENT_MISC_KERNEL) { @@ -1149,8 +1149,8 @@ more: if (hist_entry__add(thread, map, dso, sym, ip, level)) { fprintf(stderr, - "problem incrementing symbol count, bailing out\n"); - goto done; + "problem incrementing symbol count, skipping event\n"); + goto broken_event; } } total++; @@ -1169,8 +1169,8 @@ more: event->mmap.filename); } if (thread == NULL || map == NULL) { - fprintf(stderr, "problem processing PERF_EVENT_MMAP, bailing out\n"); - goto done; + fprintf(stderr, "problem processing PERF_EVENT_MMAP, skipping event.\n"); + goto broken_event; } thread__insert_map(thread, map); total_mmap++; @@ -1187,8 +1187,8 @@ more: } if (thread == NULL || thread__set_comm(thread, event->comm.comm)) { - fprintf(stderr, "problem processing PERF_EVENT_COMM, bailing out\n"); - goto done; + fprintf(stderr, "problem processing PERF_EVENT_COMM, skipping event.\n"); + goto broken_event; } total_comm++; break; @@ -1221,7 +1221,6 @@ broken_event: goto more; rc = EXIT_SUCCESS; -done: close(input); if (dump_trace) {