aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/ftrace_event.h2
-rw-r--r--include/linux/syscalls.h2
-rw-r--r--include/trace/ftrace.h9
-rw-r--r--kernel/trace/trace_events.c12
-rw-r--r--kernel/trace/trace_export.c2
-rw-r--r--kernel/trace/trace_kprobe.c6
-rw-r--r--kernel/trace/trace_syscalls.c2
7 files changed, 17 insertions, 18 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
index 479c3c1876e6..393a8394df0e 100644
--- a/include/linux/ftrace_event.h
+++ b/include/linux/ftrace_event.h
@@ -133,6 +133,7 @@ struct ftrace_event_class {
133 int (*define_fields)(struct ftrace_event_call *); 133 int (*define_fields)(struct ftrace_event_call *);
134 struct list_head *(*get_fields)(struct ftrace_event_call *); 134 struct list_head *(*get_fields)(struct ftrace_event_call *);
135 struct list_head fields; 135 struct list_head fields;
136 int (*raw_init)(struct ftrace_event_call *);
136}; 137};
137 138
138struct ftrace_event_call { 139struct ftrace_event_call {
@@ -144,7 +145,6 @@ struct ftrace_event_call {
144 int enabled; 145 int enabled;
145 int id; 146 int id;
146 const char *print_fmt; 147 const char *print_fmt;
147 int (*raw_init)(struct ftrace_event_call *);
148 int filter_active; 148 int filter_active;
149 struct event_filter *filter; 149 struct event_filter *filter;
150 void *mod; 150 void *mod;
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index fd0f1f248cd8..211c704a71ed 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -135,7 +135,6 @@ extern struct ftrace_event_class event_class_syscall_exit;
135 .name = "sys_enter"#sname, \ 135 .name = "sys_enter"#sname, \
136 .class = &event_class_syscall_enter, \ 136 .class = &event_class_syscall_enter, \
137 .event = &enter_syscall_print_##sname, \ 137 .event = &enter_syscall_print_##sname, \
138 .raw_init = init_syscall_trace, \
139 .data = (void *)&__syscall_meta_##sname,\ 138 .data = (void *)&__syscall_meta_##sname,\
140 } 139 }
141 140
@@ -153,7 +152,6 @@ extern struct ftrace_event_class event_class_syscall_exit;
153 .name = "sys_exit"#sname, \ 152 .name = "sys_exit"#sname, \
154 .class = &event_class_syscall_exit, \ 153 .class = &event_class_syscall_exit, \
155 .event = &exit_syscall_print_##sname, \ 154 .event = &exit_syscall_print_##sname, \
156 .raw_init = init_syscall_trace, \
157 .data = (void *)&__syscall_meta_##sname,\ 155 .data = (void *)&__syscall_meta_##sname,\
158 } 156 }
159 157
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index c7e3bcd5d52f..e7eb33420b06 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -431,8 +431,9 @@ static inline notrace int ftrace_get_offsets_##call( \
431 * static struct ftrace_event_class __used event_class_<template> = { 431 * static struct ftrace_event_class __used event_class_<template> = {
432 * .system = "<system>", 432 * .system = "<system>",
433 * .define_fields = ftrace_define_fields_<call>, 433 * .define_fields = ftrace_define_fields_<call>,
434 * .fields = LIST_HEAD_INIT(event_class_##call.fields), \ 434 * .fields = LIST_HEAD_INIT(event_class_##call.fields),
435 * .probe = ftrace_raw_event_##call, \ 435 * .raw_init = trace_event_raw_init,
436 * .probe = ftrace_raw_event_##call,
436 * }; 437 * };
437 * 438 *
438 * static struct ftrace_event_call __used 439 * static struct ftrace_event_call __used
@@ -440,7 +441,6 @@ static inline notrace int ftrace_get_offsets_##call( \
440 * __attribute__((section("_ftrace_events"))) event_<call> = { 441 * __attribute__((section("_ftrace_events"))) event_<call> = {
441 * .name = "<call>", 442 * .name = "<call>",
442 * .class = event_class_<template>, 443 * .class = event_class_<template>,
443 * .raw_init = trace_event_raw_init,
444 * .event = &ftrace_event_type_<call>, 444 * .event = &ftrace_event_type_<call>,
445 * .print_fmt = print_fmt_<call>, 445 * .print_fmt = print_fmt_<call>,
446 * }; 446 * };
@@ -566,6 +566,7 @@ static struct ftrace_event_class __used event_class_##call = { \
566 .system = __stringify(TRACE_SYSTEM), \ 566 .system = __stringify(TRACE_SYSTEM), \
567 .define_fields = ftrace_define_fields_##call, \ 567 .define_fields = ftrace_define_fields_##call, \
568 .fields = LIST_HEAD_INIT(event_class_##call.fields),\ 568 .fields = LIST_HEAD_INIT(event_class_##call.fields),\
569 .raw_init = trace_event_raw_init, \
569 .probe = ftrace_raw_event_##call, \ 570 .probe = ftrace_raw_event_##call, \
570 _TRACE_PERF_INIT(call) \ 571 _TRACE_PERF_INIT(call) \
571}; 572};
@@ -579,7 +580,6 @@ __attribute__((section("_ftrace_events"))) event_##call = { \
579 .name = #call, \ 580 .name = #call, \
580 .class = &event_class_##template, \ 581 .class = &event_class_##template, \
581 .event = &ftrace_event_type_##call, \ 582 .event = &ftrace_event_type_##call, \
582 .raw_init = trace_event_raw_init, \
583 .print_fmt = print_fmt_##template, \ 583 .print_fmt = print_fmt_##template, \
584}; 584};
585 585
@@ -594,7 +594,6 @@ __attribute__((section("_ftrace_events"))) event_##call = { \
594 .name = #call, \ 594 .name = #call, \
595 .class = &event_class_##template, \ 595 .class = &event_class_##template, \
596 .event = &ftrace_event_type_##call, \ 596 .event = &ftrace_event_type_##call, \
597 .raw_init = trace_event_raw_init, \
598 .print_fmt = print_fmt_##call, \ 597 .print_fmt = print_fmt_##call, \
599} 598}
600 599
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index acc0f55742c3..8e94255a45e7 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1008,8 +1008,8 @@ static int __trace_add_event_call(struct ftrace_event_call *call)
1008 if (!call->name) 1008 if (!call->name)
1009 return -EINVAL; 1009 return -EINVAL;
1010 1010
1011 if (call->raw_init) { 1011 if (call->class->raw_init) {
1012 ret = call->raw_init(call); 1012 ret = call->class->raw_init(call);
1013 if (ret < 0) { 1013 if (ret < 0) {
1014 if (ret != -ENOSYS) 1014 if (ret != -ENOSYS)
1015 pr_warning("Could not initialize trace " 1015 pr_warning("Could not initialize trace "
@@ -1170,8 +1170,8 @@ static void trace_module_add_events(struct module *mod)
1170 /* The linker may leave blanks */ 1170 /* The linker may leave blanks */
1171 if (!call->name) 1171 if (!call->name)
1172 continue; 1172 continue;
1173 if (call->raw_init) { 1173 if (call->class->raw_init) {
1174 ret = call->raw_init(call); 1174 ret = call->class->raw_init(call);
1175 if (ret < 0) { 1175 if (ret < 0) {
1176 if (ret != -ENOSYS) 1176 if (ret != -ENOSYS)
1177 pr_warning("Could not initialize trace " 1177 pr_warning("Could not initialize trace "
@@ -1324,8 +1324,8 @@ static __init int event_trace_init(void)
1324 /* The linker may leave blanks */ 1324 /* The linker may leave blanks */
1325 if (!call->name) 1325 if (!call->name)
1326 continue; 1326 continue;
1327 if (call->raw_init) { 1327 if (call->class->raw_init) {
1328 ret = call->raw_init(call); 1328 ret = call->class->raw_init(call);
1329 if (ret < 0) { 1329 if (ret < 0) {
1330 if (ret != -ENOSYS) 1330 if (ret != -ENOSYS)
1331 pr_warning("Could not initialize trace " 1331 pr_warning("Could not initialize trace "
diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c
index e700a0c1803f..e878d06c0ac0 100644
--- a/kernel/trace/trace_export.c
+++ b/kernel/trace/trace_export.c
@@ -158,6 +158,7 @@ static int ftrace_raw_init_event(struct ftrace_event_call *call)
158struct ftrace_event_class event_class_ftrace_##call = { \ 158struct ftrace_event_class event_class_ftrace_##call = { \
159 .system = __stringify(TRACE_SYSTEM), \ 159 .system = __stringify(TRACE_SYSTEM), \
160 .define_fields = ftrace_define_fields_##call, \ 160 .define_fields = ftrace_define_fields_##call, \
161 .raw_init = ftrace_raw_init_event, \
161}; \ 162}; \
162 \ 163 \
163struct ftrace_event_call __used \ 164struct ftrace_event_call __used \
@@ -166,7 +167,6 @@ __attribute__((section("_ftrace_events"))) event_##call = { \
166 .name = #call, \ 167 .name = #call, \
167 .id = type, \ 168 .id = type, \
168 .class = &event_class_ftrace_##call, \ 169 .class = &event_class_ftrace_##call, \
169 .raw_init = ftrace_raw_init_event, \
170 .print_fmt = print, \ 170 .print_fmt = print, \
171}; \ 171}; \
172 172
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index b14bf745356f..428f4a52de69 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -1359,13 +1359,13 @@ static int register_probe_event(struct trace_probe *tp)
1359 /* Initialize ftrace_event_call */ 1359 /* Initialize ftrace_event_call */
1360 if (probe_is_return(tp)) { 1360 if (probe_is_return(tp)) {
1361 tp->event.trace = print_kretprobe_event; 1361 tp->event.trace = print_kretprobe_event;
1362 call->raw_init = probe_event_raw_init;
1363 INIT_LIST_HEAD(&call->class->fields); 1362 INIT_LIST_HEAD(&call->class->fields);
1363 call->class->raw_init = probe_event_raw_init;
1364 call->class->define_fields = kretprobe_event_define_fields; 1364 call->class->define_fields = kretprobe_event_define_fields;
1365 } else { 1365 } else {
1366 tp->event.trace = print_kprobe_event;
1367 call->raw_init = probe_event_raw_init;
1368 INIT_LIST_HEAD(&call->class->fields); 1366 INIT_LIST_HEAD(&call->class->fields);
1367 tp->event.trace = print_kprobe_event;
1368 call->class->raw_init = probe_event_raw_init;
1369 call->class->define_fields = kprobe_event_define_fields; 1369 call->class->define_fields = kprobe_event_define_fields;
1370 } 1370 }
1371 if (set_print_fmt(tp) < 0) 1371 if (set_print_fmt(tp) < 0)
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
index cceccf0d2e91..1c1b9bf3ccc6 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
@@ -44,6 +44,7 @@ struct ftrace_event_class event_class_syscall_enter = {
44 .reg = syscall_enter_register, 44 .reg = syscall_enter_register,
45 .define_fields = syscall_enter_define_fields, 45 .define_fields = syscall_enter_define_fields,
46 .get_fields = syscall_get_enter_fields, 46 .get_fields = syscall_get_enter_fields,
47 .raw_init = init_syscall_trace,
47}; 48};
48 49
49struct ftrace_event_class event_class_syscall_exit = { 50struct ftrace_event_class event_class_syscall_exit = {
@@ -51,6 +52,7 @@ struct ftrace_event_class event_class_syscall_exit = {
51 .reg = syscall_exit_register, 52 .reg = syscall_exit_register,
52 .define_fields = syscall_exit_define_fields, 53 .define_fields = syscall_exit_define_fields,
53 .get_fields = syscall_get_exit_fields, 54 .get_fields = syscall_get_exit_fields,
55 .raw_init = init_syscall_trace,
54}; 56};
55 57
56extern unsigned long __start_syscalls_metadata[]; 58extern unsigned long __start_syscalls_metadata[];