mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-15 06:56:44 +07:00
perf auxtrace: Add processing for AUX area tracing events
Provide hooks so that an AUX area decoder can process AUX area tracing events. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1428594864-29309-14-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f939715586
commit
73f75fb1bd
@ -615,6 +615,53 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,
|
||||
return err;
|
||||
}
|
||||
|
||||
static bool auxtrace__dont_decode(struct perf_session *session)
|
||||
{
|
||||
return !session->itrace_synth_opts ||
|
||||
session->itrace_synth_opts->dont_decode;
|
||||
}
|
||||
|
||||
int perf_event__process_auxtrace_info(struct perf_tool *tool __maybe_unused,
|
||||
union perf_event *event,
|
||||
struct perf_session *session __maybe_unused)
|
||||
{
|
||||
enum auxtrace_type type = event->auxtrace_info.type;
|
||||
|
||||
if (dump_trace)
|
||||
fprintf(stdout, " type: %u\n", type);
|
||||
|
||||
switch (type) {
|
||||
case PERF_AUXTRACE_UNKNOWN:
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
s64 perf_event__process_auxtrace(struct perf_tool *tool,
|
||||
union perf_event *event,
|
||||
struct perf_session *session)
|
||||
{
|
||||
s64 err;
|
||||
|
||||
if (dump_trace)
|
||||
fprintf(stdout, " size: %#"PRIx64" offset: %#"PRIx64" ref: %#"PRIx64" idx: %u tid: %d cpu: %d\n",
|
||||
event->auxtrace.size, event->auxtrace.offset,
|
||||
event->auxtrace.reference, event->auxtrace.idx,
|
||||
event->auxtrace.tid, event->auxtrace.cpu);
|
||||
|
||||
if (auxtrace__dont_decode(session))
|
||||
return event->auxtrace.size;
|
||||
|
||||
if (!session->auxtrace || event->header.type != PERF_RECORD_AUXTRACE)
|
||||
return -EINVAL;
|
||||
|
||||
err = session->auxtrace->process_auxtrace_event(session, event, tool);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return event->auxtrace.size;
|
||||
}
|
||||
|
||||
#define PERF_ITRACE_DEFAULT_PERIOD_TYPE PERF_ITRACE_PERIOD_NANOSECS
|
||||
#define PERF_ITRACE_DEFAULT_PERIOD 100000
|
||||
#define PERF_ITRACE_DEFAULT_CALLCHAIN_SZ 16
|
||||
@ -801,8 +848,11 @@ void events_stats__auxtrace_error_warn(const struct events_stats *stats)
|
||||
|
||||
int perf_event__process_auxtrace_error(struct perf_tool *tool __maybe_unused,
|
||||
union perf_event *event,
|
||||
struct perf_session *session __maybe_unused)
|
||||
struct perf_session *session)
|
||||
{
|
||||
if (auxtrace__dont_decode(session))
|
||||
return 0;
|
||||
|
||||
perf_event__fprintf_auxtrace_error(event, stdout);
|
||||
return 0;
|
||||
}
|
||||
|
@ -36,6 +36,10 @@ struct record_opts;
|
||||
struct auxtrace_info_event;
|
||||
struct events_stats;
|
||||
|
||||
enum auxtrace_type {
|
||||
PERF_AUXTRACE_UNKNOWN,
|
||||
};
|
||||
|
||||
enum itrace_period_type {
|
||||
PERF_ITRACE_PERIOD_INSTRUCTIONS,
|
||||
PERF_ITRACE_PERIOD_TICKS,
|
||||
@ -87,6 +91,9 @@ struct auxtrace {
|
||||
union perf_event *event,
|
||||
struct perf_sample *sample,
|
||||
struct perf_tool *tool);
|
||||
int (*process_auxtrace_event)(struct perf_session *session,
|
||||
union perf_event *event,
|
||||
struct perf_tool *tool);
|
||||
int (*flush_events)(struct perf_session *session,
|
||||
struct perf_tool *tool);
|
||||
void (*free_events)(struct perf_session *session);
|
||||
@ -348,6 +355,12 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,
|
||||
struct perf_tool *tool,
|
||||
struct perf_session *session,
|
||||
perf_event__handler_t process);
|
||||
int perf_event__process_auxtrace_info(struct perf_tool *tool,
|
||||
union perf_event *event,
|
||||
struct perf_session *session);
|
||||
s64 perf_event__process_auxtrace(struct perf_tool *tool,
|
||||
union perf_event *event,
|
||||
struct perf_session *session);
|
||||
int perf_event__process_auxtrace_error(struct perf_tool *tool,
|
||||
union perf_event *event,
|
||||
struct perf_session *session);
|
||||
|
Loading…
Reference in New Issue
Block a user