aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/trace/trace_events.c6
-rw-r--r--kernel/trace/trace_kprobe.c14
-rw-r--r--kernel/trace/trace_syscalls.c8
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)
1073static void __trace_remove_event_call(struct ftrace_event_call *call) 1073static 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
42struct trace_event_functions enter_syscall_print_funcs = {
43 .trace = print_syscall_enter,
44};
45
46struct trace_event_functions exit_syscall_print_funcs = {
47 .trace = print_syscall_exit,
48};
49
42struct ftrace_event_class event_class_syscall_enter = { 50struct ftrace_event_class event_class_syscall_enter = {
43 .system = "syscalls", 51 .system = "syscalls",
44 .reg = syscall_enter_register, 52 .reg = syscall_enter_register,