diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ftrace_event.h | 17 | ||||
-rw-r--r-- | include/linux/syscalls.h | 10 | ||||
-rw-r--r-- | include/trace/ftrace.h | 13 | ||||
-rw-r--r-- | include/trace/syscall.h | 6 |
4 files changed, 32 insertions, 14 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index 393a8394df0..4f77932b098 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -70,18 +70,25 @@ struct trace_iterator { | |||
70 | }; | 70 | }; |
71 | 71 | ||
72 | 72 | ||
73 | struct trace_event; | ||
74 | |||
73 | typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter, | 75 | typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter, |
74 | int flags); | 76 | int flags, struct trace_event *event); |
75 | struct trace_event { | 77 | |
76 | struct hlist_node node; | 78 | struct trace_event_functions { |
77 | struct list_head list; | ||
78 | int type; | ||
79 | trace_print_func trace; | 79 | trace_print_func trace; |
80 | trace_print_func raw; | 80 | trace_print_func raw; |
81 | trace_print_func hex; | 81 | trace_print_func hex; |
82 | trace_print_func binary; | 82 | trace_print_func binary; |
83 | }; | 83 | }; |
84 | 84 | ||
85 | struct trace_event { | ||
86 | struct hlist_node node; | ||
87 | struct list_head list; | ||
88 | int type; | ||
89 | struct trace_event_functions *funcs; | ||
90 | }; | ||
91 | |||
85 | extern int register_ftrace_event(struct trace_event *event); | 92 | extern int register_ftrace_event(struct trace_event *event); |
86 | extern int unregister_ftrace_event(struct trace_event *event); | 93 | extern int unregister_ftrace_event(struct trace_event *event); |
87 | 94 | ||
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 211c704a71e..f7256770a20 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -125,9 +125,12 @@ extern struct ftrace_event_class event_class_syscall_exit; | |||
125 | static struct syscall_metadata __syscall_meta_##sname; \ | 125 | static struct syscall_metadata __syscall_meta_##sname; \ |
126 | static struct ftrace_event_call \ | 126 | static struct ftrace_event_call \ |
127 | __attribute__((__aligned__(4))) event_enter_##sname; \ | 127 | __attribute__((__aligned__(4))) event_enter_##sname; \ |
128 | static struct trace_event enter_syscall_print_##sname = { \ | 128 | static struct trace_event_functions enter_syscall_print_funcs_##sname = { \ |
129 | .trace = print_syscall_enter, \ | 129 | .trace = print_syscall_enter, \ |
130 | }; \ | 130 | }; \ |
131 | static struct trace_event enter_syscall_print_##sname = { \ | ||
132 | .funcs = &enter_syscall_print_funcs_##sname, \ | ||
133 | }; \ | ||
131 | static struct ftrace_event_call __used \ | 134 | static struct ftrace_event_call __used \ |
132 | __attribute__((__aligned__(4))) \ | 135 | __attribute__((__aligned__(4))) \ |
133 | __attribute__((section("_ftrace_events"))) \ | 136 | __attribute__((section("_ftrace_events"))) \ |
@@ -142,9 +145,12 @@ extern struct ftrace_event_class event_class_syscall_exit; | |||
142 | static struct syscall_metadata __syscall_meta_##sname; \ | 145 | static struct syscall_metadata __syscall_meta_##sname; \ |
143 | static struct ftrace_event_call \ | 146 | static struct ftrace_event_call \ |
144 | __attribute__((__aligned__(4))) event_exit_##sname; \ | 147 | __attribute__((__aligned__(4))) event_exit_##sname; \ |
145 | static struct trace_event exit_syscall_print_##sname = { \ | 148 | static struct trace_event_functions exit_syscall_print_funcs_##sname = { \ |
146 | .trace = print_syscall_exit, \ | 149 | .trace = print_syscall_exit, \ |
147 | }; \ | 150 | }; \ |
151 | static struct trace_event exit_syscall_print_##sname = { \ | ||
152 | .funcs = &exit_syscall_print_funcs_##sname, \ | ||
153 | }; \ | ||
148 | static struct ftrace_event_call __used \ | 154 | static struct ftrace_event_call __used \ |
149 | __attribute__((__aligned__(4))) \ | 155 | __attribute__((__aligned__(4))) \ |
150 | __attribute__((section("_ftrace_events"))) \ | 156 | __attribute__((section("_ftrace_events"))) \ |
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h index e7eb33420b0..51ed7f3568a 100644 --- a/include/trace/ftrace.h +++ b/include/trace/ftrace.h | |||
@@ -239,7 +239,8 @@ ftrace_raw_output_id_##call(int event_id, const char *name, \ | |||
239 | #undef DEFINE_EVENT | 239 | #undef DEFINE_EVENT |
240 | #define DEFINE_EVENT(template, name, proto, args) \ | 240 | #define DEFINE_EVENT(template, name, proto, args) \ |
241 | static notrace enum print_line_t \ | 241 | static notrace enum print_line_t \ |
242 | ftrace_raw_output_##name(struct trace_iterator *iter, int flags) \ | 242 | ftrace_raw_output_##name(struct trace_iterator *iter, int flags, \ |
243 | struct trace_event *event) \ | ||
243 | { \ | 244 | { \ |
244 | return ftrace_raw_output_id_##template(event_##name.id, \ | 245 | return ftrace_raw_output_id_##template(event_##name.id, \ |
245 | #name, iter, flags); \ | 246 | #name, iter, flags); \ |
@@ -248,7 +249,8 @@ ftrace_raw_output_##name(struct trace_iterator *iter, int flags) \ | |||
248 | #undef DEFINE_EVENT_PRINT | 249 | #undef DEFINE_EVENT_PRINT |
249 | #define DEFINE_EVENT_PRINT(template, call, proto, args, print) \ | 250 | #define DEFINE_EVENT_PRINT(template, call, proto, args, print) \ |
250 | static notrace enum print_line_t \ | 251 | static notrace enum print_line_t \ |
251 | ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ | 252 | ftrace_raw_output_##call(struct trace_iterator *iter, int flags, \ |
253 | struct trace_event *event) \ | ||
252 | { \ | 254 | { \ |
253 | struct trace_seq *s = &iter->seq; \ | 255 | struct trace_seq *s = &iter->seq; \ |
254 | struct ftrace_raw_##template *field; \ | 256 | struct ftrace_raw_##template *field; \ |
@@ -531,11 +533,12 @@ ftrace_raw_event_##call(void *__data, proto) \ | |||
531 | 533 | ||
532 | #undef DEFINE_EVENT | 534 | #undef DEFINE_EVENT |
533 | #define DEFINE_EVENT(template, call, proto, args) \ | 535 | #define DEFINE_EVENT(template, call, proto, args) \ |
534 | \ | 536 | static struct trace_event_functions ftrace_event_type_funcs_##call = { \ |
535 | static struct trace_event ftrace_event_type_##call = { \ | ||
536 | .trace = ftrace_raw_output_##call, \ | 537 | .trace = ftrace_raw_output_##call, \ |
537 | }; \ | 538 | }; \ |
538 | \ | 539 | static struct trace_event ftrace_event_type_##call = { \ |
540 | .funcs = &ftrace_event_type_funcs_##call, \ | ||
541 | }; \ | ||
539 | static inline void ftrace_test_probe_##call(void) \ | 542 | static inline void ftrace_test_probe_##call(void) \ |
540 | { \ | 543 | { \ |
541 | check_trace_callback_type_##call(ftrace_raw_event_##template); \ | 544 | check_trace_callback_type_##call(ftrace_raw_event_##template); \ |
diff --git a/include/trace/syscall.h b/include/trace/syscall.h index 39647743cd9..257e08960d7 100644 --- a/include/trace/syscall.h +++ b/include/trace/syscall.h | |||
@@ -42,8 +42,10 @@ extern int reg_event_syscall_exit(struct ftrace_event_call *call); | |||
42 | extern void unreg_event_syscall_exit(struct ftrace_event_call *call); | 42 | extern void unreg_event_syscall_exit(struct ftrace_event_call *call); |
43 | extern int | 43 | extern int |
44 | ftrace_format_syscall(struct ftrace_event_call *call, struct trace_seq *s); | 44 | ftrace_format_syscall(struct ftrace_event_call *call, struct trace_seq *s); |
45 | enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags); | 45 | enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags, |
46 | enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags); | 46 | struct trace_event *event); |
47 | enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags, | ||
48 | struct trace_event *event); | ||
47 | #endif | 49 | #endif |
48 | 50 | ||
49 | #ifdef CONFIG_PERF_EVENTS | 51 | #ifdef CONFIG_PERF_EVENTS |