diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ftrace_event.h | 6 | ||||
-rw-r--r-- | include/linux/syscalls.h | 6 | ||||
-rw-r--r-- | include/trace/ftrace.h | 44 |
3 files changed, 28 insertions, 28 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index 39e71b0a3bf..496eea898ee 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -113,10 +113,14 @@ void tracing_record_cmdline(struct task_struct *tsk); | |||
113 | 113 | ||
114 | struct event_filter; | 114 | struct event_filter; |
115 | 115 | ||
116 | struct ftrace_event_class { | ||
117 | char *system; | ||
118 | }; | ||
119 | |||
116 | struct ftrace_event_call { | 120 | struct ftrace_event_call { |
117 | struct list_head list; | 121 | struct list_head list; |
122 | struct ftrace_event_class *class; | ||
118 | char *name; | 123 | char *name; |
119 | char *system; | ||
120 | struct dentry *dir; | 124 | struct dentry *dir; |
121 | struct trace_event *event; | 125 | struct trace_event *event; |
122 | int enabled; | 126 | int enabled; |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 057929b0a65..ac5791df250 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -134,6 +134,8 @@ struct perf_event_attr; | |||
134 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) | 134 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) |
135 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) | 135 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) |
136 | 136 | ||
137 | extern struct ftrace_event_class event_class_syscalls; | ||
138 | |||
137 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ | 139 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ |
138 | static const struct syscall_metadata __syscall_meta_##sname; \ | 140 | static const struct syscall_metadata __syscall_meta_##sname; \ |
139 | static struct ftrace_event_call \ | 141 | static struct ftrace_event_call \ |
@@ -146,7 +148,7 @@ struct perf_event_attr; | |||
146 | __attribute__((section("_ftrace_events"))) \ | 148 | __attribute__((section("_ftrace_events"))) \ |
147 | event_enter_##sname = { \ | 149 | event_enter_##sname = { \ |
148 | .name = "sys_enter"#sname, \ | 150 | .name = "sys_enter"#sname, \ |
149 | .system = "syscalls", \ | 151 | .class = &event_class_syscalls, \ |
150 | .event = &enter_syscall_print_##sname, \ | 152 | .event = &enter_syscall_print_##sname, \ |
151 | .raw_init = init_syscall_trace, \ | 153 | .raw_init = init_syscall_trace, \ |
152 | .define_fields = syscall_enter_define_fields, \ | 154 | .define_fields = syscall_enter_define_fields, \ |
@@ -168,7 +170,7 @@ struct perf_event_attr; | |||
168 | __attribute__((section("_ftrace_events"))) \ | 170 | __attribute__((section("_ftrace_events"))) \ |
169 | event_exit_##sname = { \ | 171 | event_exit_##sname = { \ |
170 | .name = "sys_exit"#sname, \ | 172 | .name = "sys_exit"#sname, \ |
171 | .system = "syscalls", \ | 173 | .class = &event_class_syscalls, \ |
172 | .event = &exit_syscall_print_##sname, \ | 174 | .event = &exit_syscall_print_##sname, \ |
173 | .raw_init = init_syscall_trace, \ | 175 | .raw_init = init_syscall_trace, \ |
174 | .define_fields = syscall_exit_define_fields, \ | 176 | .define_fields = syscall_exit_define_fields, \ |
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h index 75dd7787fb3..7dcdfd824aa 100644 --- a/include/trace/ftrace.h +++ b/include/trace/ftrace.h | |||
@@ -62,7 +62,10 @@ | |||
62 | struct trace_entry ent; \ | 62 | struct trace_entry ent; \ |
63 | tstruct \ | 63 | tstruct \ |
64 | char __data[0]; \ | 64 | char __data[0]; \ |
65 | }; | 65 | }; \ |
66 | \ | ||
67 | static struct ftrace_event_class event_class_##name; | ||
68 | |||
66 | #undef DEFINE_EVENT | 69 | #undef DEFINE_EVENT |
67 | #define DEFINE_EVENT(template, name, proto, args) \ | 70 | #define DEFINE_EVENT(template, name, proto, args) \ |
68 | static struct ftrace_event_call \ | 71 | static struct ftrace_event_call \ |
@@ -430,22 +433,6 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \ | |||
430 | * | 433 | * |
431 | * Override the macros in <trace/trace_events.h> to include the following: | 434 | * Override the macros in <trace/trace_events.h> to include the following: |
432 | * | 435 | * |
433 | * static void ftrace_event_<call>(proto) | ||
434 | * { | ||
435 | * event_trace_printk(_RET_IP_, "<call>: " <fmt>); | ||
436 | * } | ||
437 | * | ||
438 | * static int ftrace_reg_event_<call>(struct ftrace_event_call *unused) | ||
439 | * { | ||
440 | * return register_trace_<call>(ftrace_event_<call>); | ||
441 | * } | ||
442 | * | ||
443 | * static void ftrace_unreg_event_<call>(struct ftrace_event_call *unused) | ||
444 | * { | ||
445 | * unregister_trace_<call>(ftrace_event_<call>); | ||
446 | * } | ||
447 | * | ||
448 | * | ||
449 | * For those macros defined with TRACE_EVENT: | 436 | * For those macros defined with TRACE_EVENT: |
450 | * | 437 | * |
451 | * static struct ftrace_event_call event_<call>; | 438 | * static struct ftrace_event_call event_<call>; |
@@ -497,17 +484,21 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \ | |||
497 | * | 484 | * |
498 | * static const char print_fmt_<call>[] = <TP_printk>; | 485 | * static const char print_fmt_<call>[] = <TP_printk>; |
499 | * | 486 | * |
487 | * static struct ftrace_event_class __used event_class_<template> = { | ||
488 | * .system = "<system>", | ||
489 | * }; | ||
490 | * | ||
500 | * static struct ftrace_event_call __used | 491 | * static struct ftrace_event_call __used |
501 | * __attribute__((__aligned__(4))) | 492 | * __attribute__((__aligned__(4))) |
502 | * __attribute__((section("_ftrace_events"))) event_<call> = { | 493 | * __attribute__((section("_ftrace_events"))) event_<call> = { |
503 | * .name = "<call>", | 494 | * .name = "<call>", |
504 | * .system = "<system>", | 495 | * .class = event_class_<template>, |
505 | * .raw_init = trace_event_raw_init, | 496 | * .raw_init = trace_event_raw_init, |
506 | * .regfunc = ftrace_reg_event_<call>, | 497 | * .regfunc = ftrace_raw_reg_event_<call>, |
507 | * .unregfunc = ftrace_unreg_event_<call>, | 498 | * .unregfunc = ftrace_raw_unreg_event_<call>, |
508 | * .print_fmt = print_fmt_<call>, | 499 | * .print_fmt = print_fmt_<call>, |
509 | * .define_fields = ftrace_define_fields_<call>, | 500 | * .define_fields = ftrace_define_fields_<call>, |
510 | * } | 501 | * }; |
511 | * | 502 | * |
512 | */ | 503 | */ |
513 | 504 | ||
@@ -627,7 +618,10 @@ static struct trace_event ftrace_event_type_##call = { \ | |||
627 | 618 | ||
628 | #undef DECLARE_EVENT_CLASS | 619 | #undef DECLARE_EVENT_CLASS |
629 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ | 620 | #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \ |
630 | static const char print_fmt_##call[] = print; | 621 | static const char print_fmt_##call[] = print; \ |
622 | static struct ftrace_event_class __used event_class_##call = { \ | ||
623 | .system = __stringify(TRACE_SYSTEM) \ | ||
624 | }; | ||
631 | 625 | ||
632 | #undef DEFINE_EVENT | 626 | #undef DEFINE_EVENT |
633 | #define DEFINE_EVENT(template, call, proto, args) \ | 627 | #define DEFINE_EVENT(template, call, proto, args) \ |
@@ -636,7 +630,7 @@ static struct ftrace_event_call __used \ | |||
636 | __attribute__((__aligned__(4))) \ | 630 | __attribute__((__aligned__(4))) \ |
637 | __attribute__((section("_ftrace_events"))) event_##call = { \ | 631 | __attribute__((section("_ftrace_events"))) event_##call = { \ |
638 | .name = #call, \ | 632 | .name = #call, \ |
639 | .system = __stringify(TRACE_SYSTEM), \ | 633 | .class = &event_class_##template, \ |
640 | .event = &ftrace_event_type_##call, \ | 634 | .event = &ftrace_event_type_##call, \ |
641 | .raw_init = trace_event_raw_init, \ | 635 | .raw_init = trace_event_raw_init, \ |
642 | .regfunc = ftrace_raw_reg_event_##call, \ | 636 | .regfunc = ftrace_raw_reg_event_##call, \ |
@@ -644,7 +638,7 @@ __attribute__((section("_ftrace_events"))) event_##call = { \ | |||
644 | .print_fmt = print_fmt_##template, \ | 638 | .print_fmt = print_fmt_##template, \ |
645 | .define_fields = ftrace_define_fields_##template, \ | 639 | .define_fields = ftrace_define_fields_##template, \ |
646 | _TRACE_PERF_INIT(call) \ | 640 | _TRACE_PERF_INIT(call) \ |
647 | } | 641 | }; |
648 | 642 | ||
649 | #undef DEFINE_EVENT_PRINT | 643 | #undef DEFINE_EVENT_PRINT |
650 | #define DEFINE_EVENT_PRINT(template, call, proto, args, print) \ | 644 | #define DEFINE_EVENT_PRINT(template, call, proto, args, print) \ |
@@ -655,7 +649,7 @@ static struct ftrace_event_call __used \ | |||
655 | __attribute__((__aligned__(4))) \ | 649 | __attribute__((__aligned__(4))) \ |
656 | __attribute__((section("_ftrace_events"))) event_##call = { \ | 650 | __attribute__((section("_ftrace_events"))) event_##call = { \ |
657 | .name = #call, \ | 651 | .name = #call, \ |
658 | .system = __stringify(TRACE_SYSTEM), \ | 652 | .class = &event_class_##template, \ |
659 | .event = &ftrace_event_type_##call, \ | 653 | .event = &ftrace_event_type_##call, \ |
660 | .raw_init = trace_event_raw_init, \ | 654 | .raw_init = trace_event_raw_init, \ |
661 | .regfunc = ftrace_raw_reg_event_##call, \ | 655 | .regfunc = ftrace_raw_reg_event_##call, \ |