diff options
Diffstat (limited to 'kernel/trace')
-rw-r--r-- | kernel/trace/trace_events.c | 6 | ||||
-rw-r--r-- | kernel/trace/trace_kprobe.c | 14 | ||||
-rw-r--r-- | kernel/trace/trace_syscalls.c | 8 |
3 files changed, 17 insertions, 11 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 8e94255a45e7..aafe5bff8f59 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -122,7 +122,7 @@ int trace_event_raw_init(struct ftrace_event_call *call) | |||
122 | { | 122 | { |
123 | int id; | 123 | int id; |
124 | 124 | ||
125 | id = register_ftrace_event(call->event); | 125 | id = register_ftrace_event(&call->event); |
126 | if (!id) | 126 | if (!id) |
127 | return -ENODEV; | 127 | return -ENODEV; |
128 | call->id = id; | 128 | call->id = id; |
@@ -1073,8 +1073,8 @@ static void remove_subsystem_dir(const char *name) | |||
1073 | static void __trace_remove_event_call(struct ftrace_event_call *call) | 1073 | static void __trace_remove_event_call(struct ftrace_event_call *call) |
1074 | { | 1074 | { |
1075 | ftrace_event_enable_disable(call, 0); | 1075 | ftrace_event_enable_disable(call, 0); |
1076 | if (call->event) | 1076 | if (call->event.funcs) |
1077 | __unregister_ftrace_event(call->event); | 1077 | __unregister_ftrace_event(&call->event); |
1078 | debugfs_remove_recursive(call->dir); | 1078 | debugfs_remove_recursive(call->dir); |
1079 | list_del(&call->list); | 1079 | list_del(&call->list); |
1080 | trace_destroy_fields(call); | 1080 | trace_destroy_fields(call); |
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index b989ae229a20..d8061c3e02c9 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c | |||
@@ -204,7 +204,6 @@ struct trace_probe { | |||
204 | const char *symbol; /* symbol name */ | 204 | const char *symbol; /* symbol name */ |
205 | struct ftrace_event_class class; | 205 | struct ftrace_event_class class; |
206 | struct ftrace_event_call call; | 206 | struct ftrace_event_call call; |
207 | struct trace_event event; | ||
208 | unsigned int nr_args; | 207 | unsigned int nr_args; |
209 | struct probe_arg args[]; | 208 | struct probe_arg args[]; |
210 | }; | 209 | }; |
@@ -1020,7 +1019,7 @@ print_kprobe_event(struct trace_iterator *iter, int flags, | |||
1020 | int i; | 1019 | int i; |
1021 | 1020 | ||
1022 | field = (struct kprobe_trace_entry *)iter->ent; | 1021 | field = (struct kprobe_trace_entry *)iter->ent; |
1023 | tp = container_of(event, struct trace_probe, event); | 1022 | tp = container_of(event, struct trace_probe, call.event); |
1024 | 1023 | ||
1025 | if (!trace_seq_printf(s, "%s: (", tp->call.name)) | 1024 | if (!trace_seq_printf(s, "%s: (", tp->call.name)) |
1026 | goto partial; | 1025 | goto partial; |
@@ -1054,7 +1053,7 @@ print_kretprobe_event(struct trace_iterator *iter, int flags, | |||
1054 | int i; | 1053 | int i; |
1055 | 1054 | ||
1056 | field = (struct kretprobe_trace_entry *)iter->ent; | 1055 | field = (struct kretprobe_trace_entry *)iter->ent; |
1057 | tp = container_of(event, struct trace_probe, event); | 1056 | tp = container_of(event, struct trace_probe, call.event); |
1058 | 1057 | ||
1059 | if (!trace_seq_printf(s, "%s: (", tp->call.name)) | 1058 | if (!trace_seq_printf(s, "%s: (", tp->call.name)) |
1060 | goto partial; | 1059 | goto partial; |
@@ -1364,20 +1363,19 @@ static int register_probe_event(struct trace_probe *tp) | |||
1364 | 1363 | ||
1365 | /* Initialize ftrace_event_call */ | 1364 | /* Initialize ftrace_event_call */ |
1366 | if (probe_is_return(tp)) { | 1365 | if (probe_is_return(tp)) { |
1367 | tp->event.funcs = &kretprobe_funcs; | ||
1368 | INIT_LIST_HEAD(&call->class->fields); | 1366 | INIT_LIST_HEAD(&call->class->fields); |
1367 | call->event.funcs = &kretprobe_funcs; | ||
1369 | call->class->raw_init = probe_event_raw_init; | 1368 | call->class->raw_init = probe_event_raw_init; |
1370 | call->class->define_fields = kretprobe_event_define_fields; | 1369 | call->class->define_fields = kretprobe_event_define_fields; |
1371 | } else { | 1370 | } else { |
1372 | INIT_LIST_HEAD(&call->class->fields); | 1371 | INIT_LIST_HEAD(&call->class->fields); |
1373 | tp->event.funcs = &kprobe_funcs; | 1372 | call->event.funcs = &kprobe_funcs; |
1374 | call->class->raw_init = probe_event_raw_init; | 1373 | call->class->raw_init = probe_event_raw_init; |
1375 | call->class->define_fields = kprobe_event_define_fields; | 1374 | call->class->define_fields = kprobe_event_define_fields; |
1376 | } | 1375 | } |
1377 | if (set_print_fmt(tp) < 0) | 1376 | if (set_print_fmt(tp) < 0) |
1378 | return -ENOMEM; | 1377 | return -ENOMEM; |
1379 | call->event = &tp->event; | 1378 | call->id = register_ftrace_event(&call->event); |
1380 | call->id = register_ftrace_event(&tp->event); | ||
1381 | if (!call->id) { | 1379 | if (!call->id) { |
1382 | kfree(call->print_fmt); | 1380 | kfree(call->print_fmt); |
1383 | return -ENODEV; | 1381 | return -ENODEV; |
@@ -1389,7 +1387,7 @@ static int register_probe_event(struct trace_probe *tp) | |||
1389 | if (ret) { | 1387 | if (ret) { |
1390 | pr_info("Failed to register kprobe event: %s\n", call->name); | 1388 | pr_info("Failed to register kprobe event: %s\n", call->name); |
1391 | kfree(call->print_fmt); | 1389 | kfree(call->print_fmt); |
1392 | unregister_ftrace_event(&tp->event); | 1390 | unregister_ftrace_event(&call->event); |
1393 | } | 1391 | } |
1394 | return ret; | 1392 | return ret; |
1395 | } | 1393 | } |
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index 3751c81998cb..7c7cfe95a853 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c | |||
@@ -39,6 +39,14 @@ syscall_get_exit_fields(struct ftrace_event_call *call) | |||
39 | return &entry->exit_fields; | 39 | return &entry->exit_fields; |
40 | } | 40 | } |
41 | 41 | ||
42 | struct trace_event_functions enter_syscall_print_funcs = { | ||
43 | .trace = print_syscall_enter, | ||
44 | }; | ||
45 | |||
46 | struct trace_event_functions exit_syscall_print_funcs = { | ||
47 | .trace = print_syscall_exit, | ||
48 | }; | ||
49 | |||
42 | struct ftrace_event_class event_class_syscall_enter = { | 50 | struct ftrace_event_class event_class_syscall_enter = { |
43 | .system = "syscalls", | 51 | .system = "syscalls", |
44 | .reg = syscall_enter_register, | 52 | .reg = syscall_enter_register, |