|
@@ -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;
|
|
|
}
|