mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 15:27:29 +00:00
perf tools: Stop using a global trace events description list
The pevent thing is per perf.data file, so I made it stop being static and become a perf_session member, so tools processing perf.data files use perf_session and _there_ we read the trace events description into session->pevent and then change everywhere to stop using that single global pevent variable and use the per session one. Note that it _doesn't_ fall backs to trace__event_id, as we're not interested at all in what is present in the /sys/kernel/debug/tracing/events in the workstation doing the analysis, just in what is in the perf.data file. This patch also introduces perf_session__set_tracepoints_handlers that is the perf perf.data/session way to associate handlers to tracepoint events by resolving their IDs using the events descriptions stored in a perf.data file. Make 'perf sched' use it. Reported-by: Dmitry Antipov <dmitry.antipov@linaro.org> Tested-by: Dmitry Antipov <dmitry.antipov@linaro.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: linaro-dev@lists.linaro.org Cc: patches@linaro.org Link: http://lkml.kernel.org/r/20120625232016.GA28525@infradead.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
7a25b2d32b
commit
da3789628f
15 changed files with 314 additions and 182 deletions
|
@ -32,29 +32,25 @@ int header_page_size_size;
|
|||
int header_page_ts_size;
|
||||
int header_page_data_offset;
|
||||
|
||||
struct pevent *perf_pevent;
|
||||
static struct pevent *pevent;
|
||||
|
||||
bool latency_format;
|
||||
|
||||
int read_trace_init(int file_bigendian, int host_bigendian)
|
||||
struct pevent *read_trace_init(int file_bigendian, int host_bigendian)
|
||||
{
|
||||
if (pevent)
|
||||
return 0;
|
||||
struct pevent *pevent = pevent_alloc();
|
||||
|
||||
perf_pevent = pevent_alloc();
|
||||
pevent = perf_pevent;
|
||||
if (pevent != NULL) {
|
||||
pevent_set_flag(pevent, PEVENT_NSEC_OUTPUT);
|
||||
pevent_set_file_bigendian(pevent, file_bigendian);
|
||||
pevent_set_host_bigendian(pevent, host_bigendian);
|
||||
}
|
||||
|
||||
pevent_set_flag(pevent, PEVENT_NSEC_OUTPUT);
|
||||
pevent_set_file_bigendian(pevent, file_bigendian);
|
||||
pevent_set_host_bigendian(pevent, host_bigendian);
|
||||
|
||||
return 0;
|
||||
return pevent;
|
||||
}
|
||||
|
||||
static int get_common_field(struct scripting_context *context,
|
||||
int *offset, int *size, const char *type)
|
||||
{
|
||||
struct pevent *pevent = context->pevent;
|
||||
struct event_format *event;
|
||||
struct format_field *field;
|
||||
|
||||
|
@ -150,7 +146,7 @@ void *raw_field_ptr(struct event_format *event, const char *name, void *data)
|
|||
return data + field->offset;
|
||||
}
|
||||
|
||||
int trace_parse_common_type(void *data)
|
||||
int trace_parse_common_type(struct pevent *pevent, void *data)
|
||||
{
|
||||
struct pevent_record record;
|
||||
|
||||
|
@ -158,7 +154,7 @@ int trace_parse_common_type(void *data)
|
|||
return pevent_data_type(pevent, &record);
|
||||
}
|
||||
|
||||
int trace_parse_common_pid(void *data)
|
||||
int trace_parse_common_pid(struct pevent *pevent, void *data)
|
||||
{
|
||||
struct pevent_record record;
|
||||
|
||||
|
@ -166,27 +162,21 @@ int trace_parse_common_pid(void *data)
|
|||
return pevent_data_pid(pevent, &record);
|
||||
}
|
||||
|
||||
unsigned long long read_size(void *ptr, int size)
|
||||
unsigned long long read_size(struct pevent *pevent, void *ptr, int size)
|
||||
{
|
||||
return pevent_read_number(pevent, ptr, size);
|
||||
}
|
||||
|
||||
struct event_format *trace_find_event(int type)
|
||||
{
|
||||
return pevent_find_event(pevent, type);
|
||||
}
|
||||
|
||||
|
||||
void print_trace_event(int cpu, void *data, int size)
|
||||
void print_trace_event(struct pevent *pevent, int cpu, void *data, int size)
|
||||
{
|
||||
struct event_format *event;
|
||||
struct pevent_record record;
|
||||
struct trace_seq s;
|
||||
int type;
|
||||
|
||||
type = trace_parse_common_type(data);
|
||||
type = trace_parse_common_type(pevent, data);
|
||||
|
||||
event = trace_find_event(type);
|
||||
event = pevent_find_event(pevent, type);
|
||||
if (!event) {
|
||||
warning("ug! no event found for type %d", type);
|
||||
return;
|
||||
|
@ -203,8 +193,8 @@ void print_trace_event(int cpu, void *data, int size)
|
|||
printf("\n");
|
||||
}
|
||||
|
||||
void print_event(int cpu, void *data, int size, unsigned long long nsecs,
|
||||
char *comm)
|
||||
void print_event(struct pevent *pevent, int cpu, void *data, int size,
|
||||
unsigned long long nsecs, char *comm)
|
||||
{
|
||||
struct pevent_record record;
|
||||
struct trace_seq s;
|
||||
|
@ -227,7 +217,8 @@ void print_event(int cpu, void *data, int size, unsigned long long nsecs,
|
|||
printf("\n");
|
||||
}
|
||||
|
||||
void parse_proc_kallsyms(char *file, unsigned int size __unused)
|
||||
void parse_proc_kallsyms(struct pevent *pevent,
|
||||
char *file, unsigned int size __unused)
|
||||
{
|
||||
unsigned long long addr;
|
||||
char *func;
|
||||
|
@ -258,7 +249,8 @@ void parse_proc_kallsyms(char *file, unsigned int size __unused)
|
|||
}
|
||||
}
|
||||
|
||||
void parse_ftrace_printk(char *file, unsigned int size __unused)
|
||||
void parse_ftrace_printk(struct pevent *pevent,
|
||||
char *file, unsigned int size __unused)
|
||||
{
|
||||
unsigned long long addr;
|
||||
char *printk;
|
||||
|
@ -282,17 +274,19 @@ void parse_ftrace_printk(char *file, unsigned int size __unused)
|
|||
}
|
||||
}
|
||||
|
||||
int parse_ftrace_file(char *buf, unsigned long size)
|
||||
int parse_ftrace_file(struct pevent *pevent, char *buf, unsigned long size)
|
||||
{
|
||||
return pevent_parse_event(pevent, buf, size, "ftrace");
|
||||
}
|
||||
|
||||
int parse_event_file(char *buf, unsigned long size, char *sys)
|
||||
int parse_event_file(struct pevent *pevent,
|
||||
char *buf, unsigned long size, char *sys)
|
||||
{
|
||||
return pevent_parse_event(pevent, buf, size, sys);
|
||||
}
|
||||
|
||||
struct event_format *trace_find_next_event(struct event_format *event)
|
||||
struct event_format *trace_find_next_event(struct pevent *pevent,
|
||||
struct event_format *event)
|
||||
{
|
||||
static int idx;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue