aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/builtin-kmem.c39
-rw-r--r--tools/perf/builtin-lock.c15
-rw-r--r--tools/perf/builtin-sched.c37
-rw-r--r--tools/perf/builtin-script.c29
-rw-r--r--tools/perf/util/evsel.h1
-rw-r--r--tools/perf/util/header.c1
-rw-r--r--tools/perf/util/scripting-engines/trace-event-perl.c13
-rw-r--r--tools/perf/util/scripting-engines/trace-event-python.c21
-rw-r--r--tools/perf/util/trace-event-parse.c26
-rw-r--r--tools/perf/util/trace-event.h2
10 files changed, 70 insertions, 114 deletions
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
index ce35015f2dc6..ffb93f424953 100644
--- a/tools/perf/builtin-kmem.c
+++ b/tools/perf/builtin-kmem.c
@@ -1,6 +1,7 @@
1#include "builtin.h" 1#include "builtin.h"
2#include "perf.h" 2#include "perf.h"
3 3
4#include "util/evsel.h"
4#include "util/util.h" 5#include "util/util.h"
5#include "util/cache.h" 6#include "util/cache.h"
6#include "util/symbol.h" 7#include "util/symbol.h"
@@ -57,11 +58,6 @@ static unsigned long nr_allocs, nr_cross_allocs;
57 58
58#define PATH_SYS_NODE "/sys/devices/system/node" 59#define PATH_SYS_NODE "/sys/devices/system/node"
59 60
60struct perf_kmem {
61 struct perf_tool tool;
62 struct perf_session *session;
63};
64
65static void init_cpunode_map(void) 61static void init_cpunode_map(void)
66{ 62{
67 FILE *fp; 63 FILE *fp;
@@ -283,16 +279,10 @@ static void process_free_event(void *data,
283 s_alloc->alloc_cpu = -1; 279 s_alloc->alloc_cpu = -1;
284} 280}
285 281
286static void process_raw_event(struct perf_tool *tool, 282static void process_raw_event(struct perf_evsel *evsel, void *data,
287 union perf_event *raw_event __used, void *data,
288 int cpu, u64 timestamp, struct thread *thread) 283 int cpu, u64 timestamp, struct thread *thread)
289{ 284{
290 struct perf_kmem *kmem = container_of(tool, struct perf_kmem, tool); 285 struct event_format *event = evsel->tp_format;
291 struct event_format *event;
292 int type;
293
294 type = trace_parse_common_type(kmem->session->pevent, data);
295 event = pevent_find_event(kmem->session->pevent, type);
296 286
297 if (!strcmp(event->name, "kmalloc") || 287 if (!strcmp(event->name, "kmalloc") ||
298 !strcmp(event->name, "kmem_cache_alloc")) { 288 !strcmp(event->name, "kmem_cache_alloc")) {
@@ -313,10 +303,10 @@ static void process_raw_event(struct perf_tool *tool,
313 } 303 }
314} 304}
315 305
316static int process_sample_event(struct perf_tool *tool, 306static int process_sample_event(struct perf_tool *tool __used,
317 union perf_event *event, 307 union perf_event *event,
318 struct perf_sample *sample, 308 struct perf_sample *sample,
319 struct perf_evsel *evsel __used, 309 struct perf_evsel *evsel,
320 struct machine *machine) 310 struct machine *machine)
321{ 311{
322 struct thread *thread = machine__findnew_thread(machine, event->ip.pid); 312 struct thread *thread = machine__findnew_thread(machine, event->ip.pid);
@@ -329,18 +319,16 @@ static int process_sample_event(struct perf_tool *tool,
329 319
330 dump_printf(" ... thread: %s:%d\n", thread->comm, thread->pid); 320 dump_printf(" ... thread: %s:%d\n", thread->comm, thread->pid);
331 321
332 process_raw_event(tool, event, sample->raw_data, sample->cpu, 322 process_raw_event(evsel, sample->raw_data, sample->cpu,
333 sample->time, thread); 323 sample->time, thread);
334 324
335 return 0; 325 return 0;
336} 326}
337 327
338static struct perf_kmem perf_kmem = { 328static struct perf_tool perf_kmem = {
339 .tool = { 329 .sample = process_sample_event,
340 .sample = process_sample_event, 330 .comm = perf_event__process_comm,
341 .comm = perf_event__process_comm, 331 .ordered_samples = true,
342 .ordered_samples = true,
343 },
344}; 332};
345 333
346static double fragmentation(unsigned long n_req, unsigned long n_alloc) 334static double fragmentation(unsigned long n_req, unsigned long n_alloc)
@@ -497,13 +485,10 @@ static int __cmd_kmem(void)
497 int err = -EINVAL; 485 int err = -EINVAL;
498 struct perf_session *session; 486 struct perf_session *session;
499 487
500 session = perf_session__new(input_name, O_RDONLY, 0, false, 488 session = perf_session__new(input_name, O_RDONLY, 0, false, &perf_kmem);
501 &perf_kmem.tool);
502 if (session == NULL) 489 if (session == NULL)
503 return -ENOMEM; 490 return -ENOMEM;
504 491
505 perf_kmem.session = session;
506
507 if (perf_session__create_kernel_maps(session) < 0) 492 if (perf_session__create_kernel_maps(session) < 0)
508 goto out_delete; 493 goto out_delete;
509 494
@@ -511,7 +496,7 @@ static int __cmd_kmem(void)
511 goto out_delete; 496 goto out_delete;
512 497
513 setup_pager(); 498 setup_pager();
514 err = perf_session__process_events(session, &perf_kmem.tool); 499 err = perf_session__process_events(session, &perf_kmem);
515 if (err != 0) 500 if (err != 0)
516 goto out_delete; 501 goto out_delete;
517 sort_result(); 502 sort_result();
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
index b3c428548868..142b3033e4be 100644
--- a/tools/perf/builtin-lock.c
+++ b/tools/perf/builtin-lock.c
@@ -1,6 +1,7 @@
1#include "builtin.h" 1#include "builtin.h"
2#include "perf.h" 2#include "perf.h"
3 3
4#include "util/evsel.h"
4#include "util/util.h" 5#include "util/util.h"
5#include "util/cache.h" 6#include "util/cache.h"
6#include "util/symbol.h" 7#include "util/symbol.h"
@@ -718,14 +719,10 @@ process_lock_release_event(void *data,
718 trace_handler->release_event(&release_event, event, cpu, timestamp, thread); 719 trace_handler->release_event(&release_event, event, cpu, timestamp, thread);
719} 720}
720 721
721static void 722static void process_raw_event(struct perf_evsel *evsel, void *data, int cpu,
722process_raw_event(void *data, int cpu, u64 timestamp, struct thread *thread) 723 u64 timestamp, struct thread *thread)
723{ 724{
724 struct event_format *event; 725 struct event_format *event = evsel->tp_format;
725 int type;
726
727 type = trace_parse_common_type(session->pevent, data);
728 event = pevent_find_event(session->pevent, type);
729 726
730 if (!strcmp(event->name, "lock_acquire")) 727 if (!strcmp(event->name, "lock_acquire"))
731 process_lock_acquire_event(data, event, cpu, timestamp, thread); 728 process_lock_acquire_event(data, event, cpu, timestamp, thread);
@@ -849,7 +846,7 @@ static void dump_info(void)
849static int process_sample_event(struct perf_tool *tool __used, 846static int process_sample_event(struct perf_tool *tool __used,
850 union perf_event *event, 847 union perf_event *event,
851 struct perf_sample *sample, 848 struct perf_sample *sample,
852 struct perf_evsel *evsel __used, 849 struct perf_evsel *evsel,
853 struct machine *machine) 850 struct machine *machine)
854{ 851{
855 struct thread *thread = machine__findnew_thread(machine, sample->tid); 852 struct thread *thread = machine__findnew_thread(machine, sample->tid);
@@ -860,7 +857,7 @@ static int process_sample_event(struct perf_tool *tool __used,
860 return -1; 857 return -1;
861 } 858 }
862 859
863 process_raw_event(sample->raw_data, sample->cpu, sample->time, thread); 860 process_raw_event(evsel, sample->raw_data, sample->cpu, sample->time, thread);
864 861
865 return 0; 862 return 0;
866} 863}
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index 7a9ad2b1ee76..30ef82aca885 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -43,11 +43,6 @@ static u64 sleep_measurement_overhead;
43 43
44static unsigned long nr_tasks; 44static unsigned long nr_tasks;
45 45
46struct perf_sched {
47 struct perf_tool tool;
48 struct perf_session *session;
49};
50
51struct sched_atom; 46struct sched_atom;
52 47
53struct task_desc { 48struct task_desc {
@@ -1596,14 +1591,12 @@ typedef void (*tracepoint_handler)(struct perf_tool *tool, struct event_format *
1596 struct machine *machine, 1591 struct machine *machine,
1597 struct thread *thread); 1592 struct thread *thread);
1598 1593
1599static int perf_sched__process_tracepoint_sample(struct perf_tool *tool, 1594static int perf_sched__process_tracepoint_sample(struct perf_tool *tool __used,
1600 union perf_event *event __used, 1595 union perf_event *event __used,
1601 struct perf_sample *sample, 1596 struct perf_sample *sample,
1602 struct perf_evsel *evsel, 1597 struct perf_evsel *evsel,
1603 struct machine *machine) 1598 struct machine *machine)
1604{ 1599{
1605 struct perf_sched *sched = container_of(tool, struct perf_sched, tool);
1606 struct pevent *pevent = sched->session->pevent;
1607 struct thread *thread = machine__findnew_thread(machine, sample->pid); 1600 struct thread *thread = machine__findnew_thread(machine, sample->pid);
1608 1601
1609 if (thread == NULL) { 1602 if (thread == NULL) {
@@ -1617,25 +1610,18 @@ static int perf_sched__process_tracepoint_sample(struct perf_tool *tool,
1617 1610
1618 if (evsel->handler.func != NULL) { 1611 if (evsel->handler.func != NULL) {
1619 tracepoint_handler f = evsel->handler.func; 1612 tracepoint_handler f = evsel->handler.func;
1620 1613 f(tool, evsel->tp_format, sample, machine, thread);
1621 if (evsel->handler.data == NULL)
1622 evsel->handler.data = pevent_find_event(pevent,
1623 evsel->attr.config);
1624
1625 f(tool, evsel->handler.data, sample, machine, thread);
1626 } 1614 }
1627 1615
1628 return 0; 1616 return 0;
1629} 1617}
1630 1618
1631static struct perf_sched perf_sched = { 1619static struct perf_tool perf_sched = {
1632 .tool = { 1620 .sample = perf_sched__process_tracepoint_sample,
1633 .sample = perf_sched__process_tracepoint_sample, 1621 .comm = perf_event__process_comm,
1634 .comm = perf_event__process_comm, 1622 .lost = perf_event__process_lost,
1635 .lost = perf_event__process_lost, 1623 .fork = perf_event__process_task,
1636 .fork = perf_event__process_task, 1624 .ordered_samples = true,
1637 .ordered_samples = true,
1638 },
1639}; 1625};
1640 1626
1641static void read_events(bool destroy, struct perf_session **psession) 1627static void read_events(bool destroy, struct perf_session **psession)
@@ -1652,18 +1638,15 @@ static void read_events(bool destroy, struct perf_session **psession)
1652 }; 1638 };
1653 struct perf_session *session; 1639 struct perf_session *session;
1654 1640
1655 session = perf_session__new(input_name, O_RDONLY, 0, false, 1641 session = perf_session__new(input_name, O_RDONLY, 0, false, &perf_sched);
1656 &perf_sched.tool);
1657 if (session == NULL) 1642 if (session == NULL)
1658 die("No Memory"); 1643 die("No Memory");
1659 1644
1660 perf_sched.session = session;
1661
1662 err = perf_session__set_tracepoints_handlers(session, handlers); 1645 err = perf_session__set_tracepoints_handlers(session, handlers);
1663 assert(err == 0); 1646 assert(err == 0);
1664 1647
1665 if (perf_session__has_traces(session, "record -R")) { 1648 if (perf_session__has_traces(session, "record -R")) {
1666 err = perf_session__process_events(session, &perf_sched.tool); 1649 err = perf_session__process_events(session, &perf_sched);
1667 if (err) 1650 if (err)
1668 die("Failed to process events, error %d", err); 1651 die("Failed to process events, error %d", err);
1669 1652
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 1e60ab70b2b1..8dba4707b03f 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -262,14 +262,11 @@ static int perf_session__check_output_opt(struct perf_session *session)
262 return 0; 262 return 0;
263} 263}
264 264
265static void print_sample_start(struct pevent *pevent, 265static void print_sample_start(struct perf_sample *sample,
266 struct perf_sample *sample,
267 struct thread *thread, 266 struct thread *thread,
268 struct perf_evsel *evsel) 267 struct perf_evsel *evsel)
269{ 268{
270 int type;
271 struct perf_event_attr *attr = &evsel->attr; 269 struct perf_event_attr *attr = &evsel->attr;
272 struct event_format *event;
273 const char *evname = NULL; 270 const char *evname = NULL;
274 unsigned long secs; 271 unsigned long secs;
275 unsigned long usecs; 272 unsigned long usecs;
@@ -307,20 +304,7 @@ static void print_sample_start(struct pevent *pevent,
307 } 304 }
308 305
309 if (PRINT_FIELD(EVNAME)) { 306 if (PRINT_FIELD(EVNAME)) {
310 if (attr->type == PERF_TYPE_TRACEPOINT) { 307 evname = perf_evsel__name(evsel);
311 /*
312 * XXX Do we really need this here?
313 * perf_evlist__set_tracepoint_names should have done
314 * this already
315 */
316 type = trace_parse_common_type(pevent,
317 sample->raw_data);
318 event = pevent_find_event(pevent, type);
319 if (event)
320 evname = event->name;
321 } else
322 evname = perf_evsel__name(evsel);
323
324 printf("%s: ", evname ? evname : "[unknown]"); 308 printf("%s: ", evname ? evname : "[unknown]");
325 } 309 }
326} 310}
@@ -416,7 +400,7 @@ static void print_sample_bts(union perf_event *event,
416} 400}
417 401
418static void process_event(union perf_event *event __unused, 402static void process_event(union perf_event *event __unused,
419 struct pevent *pevent, 403 struct pevent *pevent __unused,
420 struct perf_sample *sample, 404 struct perf_sample *sample,
421 struct perf_evsel *evsel, 405 struct perf_evsel *evsel,
422 struct machine *machine, 406 struct machine *machine,
@@ -427,7 +411,7 @@ static void process_event(union perf_event *event __unused,
427 if (output[attr->type].fields == 0) 411 if (output[attr->type].fields == 0)
428 return; 412 return;
429 413
430 print_sample_start(pevent, sample, thread, evsel); 414 print_sample_start(sample, thread, evsel);
431 415
432 if (is_bts_event(attr)) { 416 if (is_bts_event(attr)) {
433 print_sample_bts(event, sample, evsel, machine, thread); 417 print_sample_bts(event, sample, evsel, machine, thread);
@@ -435,9 +419,8 @@ static void process_event(union perf_event *event __unused,
435 } 419 }
436 420
437 if (PRINT_FIELD(TRACE)) 421 if (PRINT_FIELD(TRACE))
438 print_trace_event(pevent, sample->cpu, sample->raw_data, 422 event_format__print(evsel->tp_format, sample->cpu,
439 sample->raw_size); 423 sample->raw_data, sample->raw_size);
440
441 if (PRINT_FIELD(ADDR)) 424 if (PRINT_FIELD(ADDR))
442 print_sample_addr(event, sample, machine, thread, attr); 425 print_sample_addr(event, sample, machine, thread, attr);
443 426
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index b559929983bb..a56c4574b3fe 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -56,6 +56,7 @@ struct perf_evsel {
56 int ids; 56 int ids;
57 struct hists hists; 57 struct hists hists;
58 char *name; 58 char *name;
59 struct event_format *tp_format;
59 union { 60 union {
60 void *priv; 61 void *priv;
61 off_t id_offset; 62 off_t id_offset;
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index e2b4864bd11e..b2da439bce7a 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -2123,6 +2123,7 @@ static int perf_evsel__set_tracepoint_name(struct perf_evsel *evsel,
2123 if (event->name == NULL) 2123 if (event->name == NULL)
2124 return -1; 2124 return -1;
2125 2125
2126 evsel->tp_format = event;
2126 return 0; 2127 return 0;
2127} 2128}
2128 2129
diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c
index 02dfa19a467f..c26628116593 100644
--- a/tools/perf/util/scripting-engines/trace-event-perl.c
+++ b/tools/perf/util/scripting-engines/trace-event-perl.c
@@ -237,16 +237,16 @@ static void define_event_symbols(struct event_format *event,
237 define_event_symbols(event, ev_name, args->next); 237 define_event_symbols(event, ev_name, args->next);
238} 238}
239 239
240static inline 240static inline struct event_format *find_cache_event(struct perf_evsel *evsel)
241struct event_format *find_cache_event(struct pevent *pevent, int type)
242{ 241{
243 static char ev_name[256]; 242 static char ev_name[256];
244 struct event_format *event; 243 struct event_format *event;
244 int type = evsel->attr.config;
245 245
246 if (events[type]) 246 if (events[type])
247 return events[type]; 247 return events[type];
248 248
249 events[type] = event = pevent_find_event(pevent, type); 249 events[type] = event = evsel->tp_format;
250 if (!event) 250 if (!event)
251 return NULL; 251 return NULL;
252 252
@@ -269,7 +269,6 @@ static void perl_process_tracepoint(union perf_event *perf_event __unused,
269 unsigned long long val; 269 unsigned long long val;
270 unsigned long s, ns; 270 unsigned long s, ns;
271 struct event_format *event; 271 struct event_format *event;
272 int type;
273 int pid; 272 int pid;
274 int cpu = sample->cpu; 273 int cpu = sample->cpu;
275 void *data = sample->raw_data; 274 void *data = sample->raw_data;
@@ -281,11 +280,9 @@ static void perl_process_tracepoint(union perf_event *perf_event __unused,
281 if (evsel->attr.type != PERF_TYPE_TRACEPOINT) 280 if (evsel->attr.type != PERF_TYPE_TRACEPOINT)
282 return; 281 return;
283 282
284 type = trace_parse_common_type(pevent, data); 283 event = find_cache_event(evsel);
285
286 event = find_cache_event(pevent, type);
287 if (!event) 284 if (!event)
288 die("ug! no event found for type %d", type); 285 die("ug! no event found for type %d", evsel->attr.config);
289 286
290 pid = trace_parse_common_pid(pevent, data); 287 pid = trace_parse_common_pid(pevent, data);
291 288
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index ce4d1b0c3862..8006978d8398 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -27,6 +27,7 @@
27#include <errno.h> 27#include <errno.h>
28 28
29#include "../../perf.h" 29#include "../../perf.h"
30#include "../evsel.h"
30#include "../util.h" 31#include "../util.h"
31#include "../event.h" 32#include "../event.h"
32#include "../thread.h" 33#include "../thread.h"
@@ -194,16 +195,21 @@ static void define_event_symbols(struct event_format *event,
194 define_event_symbols(event, ev_name, args->next); 195 define_event_symbols(event, ev_name, args->next);
195} 196}
196 197
197static inline 198static inline struct event_format *find_cache_event(struct perf_evsel *evsel)
198struct event_format *find_cache_event(struct pevent *pevent, int type)
199{ 199{
200 static char ev_name[256]; 200 static char ev_name[256];
201 struct event_format *event; 201 struct event_format *event;
202 int type = evsel->attr.config;
202 203
204 /*
205 * XXX: Do we really need to cache this since now we have evsel->tp_format
206 * cached already? Need to re-read this "cache" routine that as well calls
207 * define_event_symbols() :-\
208 */
203 if (events[type]) 209 if (events[type])
204 return events[type]; 210 return events[type];
205 211
206 events[type] = event = pevent_find_event(pevent, type); 212 events[type] = event = evsel->tp_format;
207 if (!event) 213 if (!event)
208 return NULL; 214 return NULL;
209 215
@@ -217,7 +223,7 @@ struct event_format *find_cache_event(struct pevent *pevent, int type)
217static void python_process_event(union perf_event *perf_event __unused, 223static void python_process_event(union perf_event *perf_event __unused,
218 struct pevent *pevent, 224 struct pevent *pevent,
219 struct perf_sample *sample, 225 struct perf_sample *sample,
220 struct perf_evsel *evsel __unused, 226 struct perf_evsel *evsel,
221 struct machine *machine __unused, 227 struct machine *machine __unused,
222 struct thread *thread) 228 struct thread *thread)
223{ 229{
@@ -228,7 +234,6 @@ static void python_process_event(union perf_event *perf_event __unused,
228 unsigned long s, ns; 234 unsigned long s, ns;
229 struct event_format *event; 235 struct event_format *event;
230 unsigned n = 0; 236 unsigned n = 0;
231 int type;
232 int pid; 237 int pid;
233 int cpu = sample->cpu; 238 int cpu = sample->cpu;
234 void *data = sample->raw_data; 239 void *data = sample->raw_data;
@@ -239,11 +244,9 @@ static void python_process_event(union perf_event *perf_event __unused,
239 if (!t) 244 if (!t)
240 Py_FatalError("couldn't create Python tuple"); 245 Py_FatalError("couldn't create Python tuple");
241 246
242 type = trace_parse_common_type(pevent, data); 247 event = find_cache_event(evsel);
243
244 event = find_cache_event(pevent, type);
245 if (!event) 248 if (!event)
246 die("ug! no event found for type %d", type); 249 die("ug! no event found for type %d", (int)evsel->attr.config);
247 250
248 pid = trace_parse_common_pid(pevent, data); 251 pid = trace_parse_common_pid(pevent, data);
249 252
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c
index 0715c843c2e7..12088348ac02 100644
--- a/tools/perf/util/trace-event-parse.c
+++ b/tools/perf/util/trace-event-parse.c
@@ -167,20 +167,11 @@ unsigned long long read_size(struct pevent *pevent, void *ptr, int size)
167 return pevent_read_number(pevent, ptr, size); 167 return pevent_read_number(pevent, ptr, size);
168} 168}
169 169
170void print_trace_event(struct pevent *pevent, int cpu, void *data, int size) 170void event_format__print(struct event_format *event,
171 int cpu, void *data, int size)
171{ 172{
172 struct event_format *event;
173 struct pevent_record record; 173 struct pevent_record record;
174 struct trace_seq s; 174 struct trace_seq s;
175 int type;
176
177 type = trace_parse_common_type(pevent, data);
178
179 event = pevent_find_event(pevent, type);
180 if (!event) {
181 warning("ug! no event found for type %d", type);
182 return;
183 }
184 175
185 memset(&record, 0, sizeof(record)); 176 memset(&record, 0, sizeof(record));
186 record.cpu = cpu; 177 record.cpu = cpu;
@@ -192,6 +183,19 @@ void print_trace_event(struct pevent *pevent, int cpu, void *data, int size)
192 trace_seq_do_printf(&s); 183 trace_seq_do_printf(&s);
193} 184}
194 185
186void print_trace_event(struct pevent *pevent, int cpu, void *data, int size)
187{
188 int type = trace_parse_common_type(pevent, data);
189 struct event_format *event = pevent_find_event(pevent, type);
190
191 if (!event) {
192 warning("ug! no event found for type %d", type);
193 return;
194 }
195
196 event_format__print(event, cpu, data, size);
197}
198
195void print_event(struct pevent *pevent, int cpu, void *data, int size, 199void print_event(struct pevent *pevent, int cpu, void *data, int size,
196 unsigned long long nsecs, char *comm) 200 unsigned long long nsecs, char *comm)
197{ 201{
diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h
index 8fef1d6687b7..069d105e0fc0 100644
--- a/tools/perf/util/trace-event.h
+++ b/tools/perf/util/trace-event.h
@@ -32,6 +32,8 @@ int bigendian(void);
32 32
33struct pevent *read_trace_init(int file_bigendian, int host_bigendian); 33struct pevent *read_trace_init(int file_bigendian, int host_bigendian);
34void print_trace_event(struct pevent *pevent, int cpu, void *data, int size); 34void print_trace_event(struct pevent *pevent, int cpu, void *data, int size);
35void event_format__print(struct event_format *event,
36 int cpu, void *data, int size);
35 37
36void print_event(struct pevent *pevent, int cpu, void *data, int size, 38void print_event(struct pevent *pevent, int cpu, void *data, int size,
37 unsigned long long nsecs, char *comm); 39 unsigned long long nsecs, char *comm);