diff options
-rw-r--r-- | tools/perf/util/session.c | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index b163dfd..6fb4694 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -838,6 +838,35 @@ static struct thread *perf_session__register_idle_thread(struct perf_session *se return thread; } +static void perf_session__warn_about_errors(const struct perf_session *session, + const struct perf_event_ops *ops) +{ + if (ops->lost == event__process_lost && + session->hists.stats.total_lost != 0) { + ui__warning("Processed %Lu events and LOST %Lu!\n\n" + "Check IO/CPU overload!\n\n", + session->hists.stats.total_period, + session->hists.stats.total_lost); + } + + if (session->hists.stats.nr_unknown_events != 0) { + ui__warning("Found %u unknown events!\n\n" + "Is this an older tool processing a perf.data " + "file generated by a more recent tool?\n\n" + "If that is not the case, consider " + "reporting to linux-kernel@vger.kernel.org.\n\n", + session->hists.stats.nr_unknown_events); + } + + if (session->hists.stats.nr_invalid_chains != 0) { + ui__warning("Found invalid callchains!\n\n" + "%u out of %u events were discarded for this reason.\n\n" + "Consider reporting to linux-kernel@vger.kernel.org.\n\n", + session->hists.stats.nr_invalid_chains, + session->hists.stats.nr_events[PERF_RECORD_SAMPLE]); + } +} + #define session_done() (*(volatile int *)(&session_done)) volatile int session_done; @@ -911,6 +940,7 @@ more: done: err = 0; out_err: + perf_session__warn_about_errors(self, ops); perf_session_free_sample_buffers(self); return err; } @@ -1023,32 +1053,7 @@ more: flush_sample_queue(session, ops); out_err: ui_progress__delete(progress); - - if (ops->lost == event__process_lost && - session->hists.stats.total_lost != 0) { - ui__warning("Processed %Lu events and LOST %Lu!\n\n" - "Check IO/CPU overload!\n\n", - session->hists.stats.total_period, - session->hists.stats.total_lost); - } - - if (session->hists.stats.nr_unknown_events != 0) { - ui__warning("Found %u unknown events!\n\n" - "Is this an older tool processing a perf.data " - "file generated by a more recent tool?\n\n" - "If that is not the case, consider " - "reporting to linux-kernel@vger.kernel.org.\n\n", - session->hists.stats.nr_unknown_events); - } - - if (session->hists.stats.nr_invalid_chains != 0) { - ui__warning("Found invalid callchains!\n\n" - "%u out of %u events were discarded for this reason.\n\n" - "Consider reporting to linux-kernel@vger.kernel.org.\n\n", - session->hists.stats.nr_invalid_chains, - session->hists.stats.nr_events[PERF_RECORD_SAMPLE]); - } - + perf_session__warn_about_errors(session, ops); perf_session_free_sample_buffers(session); return err; } |