aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/ftrace_event.h17
-rw-r--r--include/linux/syscalls.h10
-rw-r--r--include/trace/ftrace.h13
-rw-r--r--include/trace/syscall.h6
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
73struct trace_event;
74
73typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter, 75typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter,
74 int flags); 76 int flags, struct trace_event *event);
75struct trace_event { 77
76 struct hlist_node node; 78struct 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
85struct trace_event {
86 struct hlist_node node;
87 struct list_head list;
88 int type;
89 struct trace_event_functions *funcs;
90};
91
85extern int register_ftrace_event(struct trace_event *event); 92extern int register_ftrace_event(struct trace_event *event);
86extern int unregister_ftrace_event(struct trace_event *event); 93extern 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) \
241static notrace enum print_line_t \ 241static notrace enum print_line_t \
242ftrace_raw_output_##name(struct trace_iterator *iter, int flags) \ 242ftrace_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) \
250static notrace enum print_line_t \ 251static notrace enum print_line_t \
251ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ 252ftrace_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 \ 536static struct trace_event_functions ftrace_event_type_funcs_##call = { \
535static struct trace_event ftrace_event_type_##call = { \
536 .trace = ftrace_raw_output_##call, \ 537 .trace = ftrace_raw_output_##call, \
537}; \ 538}; \
538 \ 539static struct trace_event ftrace_event_type_##call = { \
540 .funcs = &ftrace_event_type_funcs_##call, \
541}; \
539static inline void ftrace_test_probe_##call(void) \ 542static 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);
42extern void unreg_event_syscall_exit(struct ftrace_event_call *call); 42extern void unreg_event_syscall_exit(struct ftrace_event_call *call);
43extern int 43extern int
44ftrace_format_syscall(struct ftrace_event_call *call, struct trace_seq *s); 44ftrace_format_syscall(struct ftrace_event_call *call, struct trace_seq *s);
45enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags); 45enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags,
46enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags); 46 struct trace_event *event);
47enum 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