perf: Convert perf tracing data into a tracing_data event
Bypasses the tracing_data perf header code and replaces it with a synthesized event and processing function that accomplishes the same thing, used when reading/writing perf data to/from a pipe. The tracing data is pretty large, and this patch doesn't attempt to break it down into component events. The tracing_data event itself doesn't actually contain the tracing data, rather it arranges for the event processing code to skip over it after it's read, using the skip return value added to the event processing loop in a previous patch. Signed-off-by: Tom Zanussi <tzanussi@gmail.com> Acked-by: Thomas Gleixner <tglx@linutronix.de> Cc: fweisbec@gmail.com Cc: rostedt@goodmis.org Cc: k-keiichi@bx.jp.nec.com Cc: acme@ghostprotocols.net LKML-Reference: <1270184365-8281-8-git-send-email-tzanussi@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -104,6 +104,11 @@ static void mmap_write_tail(struct mmap_data *md, unsigned long tail)
|
||||
pc->data_tail = tail;
|
||||
}
|
||||
|
||||
static void advance_output(size_t size)
|
||||
{
|
||||
bytes_written += size;
|
||||
}
|
||||
|
||||
static void write_output(void *buf, size_t size)
|
||||
{
|
||||
while (size) {
|
||||
@@ -599,6 +604,17 @@ static int __cmd_record(int argc, const char **argv)
|
||||
pr_err("Couldn't synthesize event_types.\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
err = event__synthesize_tracing_data(output, attrs,
|
||||
nr_counters,
|
||||
process_synthesized_event,
|
||||
session);
|
||||
if (err <= 0) {
|
||||
pr_err("Couldn't record tracing data.\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
advance_output(err);
|
||||
}
|
||||
|
||||
err = event__synthesize_kernel_mmap(process_synthesized_event,
|
||||
|
Reference in New Issue
Block a user