diff options
author | Masami Hiramatsu <mhiramat@kernel.org> | 2018-04-25 08:17:05 -0400 |
---|---|---|
committer | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2018-10-10 22:19:06 -0400 |
commit | eeb07b0615004bce145015b704de85fd3ac6cce0 (patch) | |
tree | a3ddb46aa2539fb9fd2c5d1343e0f0176425dae5 | |
parent | 56de763052792669d61d79a087611da9a7f04d4e (diff) |
tracing: probeevent: Cleanup argument field definition
Cleanup event argument definition code in one place for
maintenancability.
Link: http://lkml.kernel.org/r/152465862529.26224.9068605421476018902.stgit@devbox
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r-- | kernel/trace/trace_kprobe.c | 32 | ||||
-rw-r--r-- | kernel/trace/trace_probe.c | 21 | ||||
-rw-r--r-- | kernel/trace/trace_probe.h | 2 | ||||
-rw-r--r-- | kernel/trace/trace_uprobe.c | 15 |
4 files changed, 29 insertions, 41 deletions
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index 6326c71181aa..1356927e32d0 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c | |||
@@ -1192,49 +1192,25 @@ print_kretprobe_event(struct trace_iterator *iter, int flags, | |||
1192 | 1192 | ||
1193 | static int kprobe_event_define_fields(struct trace_event_call *event_call) | 1193 | static int kprobe_event_define_fields(struct trace_event_call *event_call) |
1194 | { | 1194 | { |
1195 | int ret, i; | 1195 | int ret; |
1196 | struct kprobe_trace_entry_head field; | 1196 | struct kprobe_trace_entry_head field; |
1197 | struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data; | 1197 | struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data; |
1198 | 1198 | ||
1199 | DEFINE_FIELD(unsigned long, ip, FIELD_STRING_IP, 0); | 1199 | DEFINE_FIELD(unsigned long, ip, FIELD_STRING_IP, 0); |
1200 | /* Set argument names as fields */ | ||
1201 | for (i = 0; i < tk->tp.nr_args; i++) { | ||
1202 | struct probe_arg *parg = &tk->tp.args[i]; | ||
1203 | 1200 | ||
1204 | ret = trace_define_field(event_call, parg->type->fmttype, | 1201 | return traceprobe_define_arg_fields(event_call, sizeof(field), &tk->tp); |
1205 | parg->name, | ||
1206 | sizeof(field) + parg->offset, | ||
1207 | parg->type->size, | ||
1208 | parg->type->is_signed, | ||
1209 | FILTER_OTHER); | ||
1210 | if (ret) | ||
1211 | return ret; | ||
1212 | } | ||
1213 | return 0; | ||
1214 | } | 1202 | } |
1215 | 1203 | ||
1216 | static int kretprobe_event_define_fields(struct trace_event_call *event_call) | 1204 | static int kretprobe_event_define_fields(struct trace_event_call *event_call) |
1217 | { | 1205 | { |
1218 | int ret, i; | 1206 | int ret; |
1219 | struct kretprobe_trace_entry_head field; | 1207 | struct kretprobe_trace_entry_head field; |
1220 | struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data; | 1208 | struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data; |
1221 | 1209 | ||
1222 | DEFINE_FIELD(unsigned long, func, FIELD_STRING_FUNC, 0); | 1210 | DEFINE_FIELD(unsigned long, func, FIELD_STRING_FUNC, 0); |
1223 | DEFINE_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP, 0); | 1211 | DEFINE_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP, 0); |
1224 | /* Set argument names as fields */ | ||
1225 | for (i = 0; i < tk->tp.nr_args; i++) { | ||
1226 | struct probe_arg *parg = &tk->tp.args[i]; | ||
1227 | 1212 | ||
1228 | ret = trace_define_field(event_call, parg->type->fmttype, | 1213 | return traceprobe_define_arg_fields(event_call, sizeof(field), &tk->tp); |
1229 | parg->name, | ||
1230 | sizeof(field) + parg->offset, | ||
1231 | parg->type->size, | ||
1232 | parg->type->is_signed, | ||
1233 | FILTER_OTHER); | ||
1234 | if (ret) | ||
1235 | return ret; | ||
1236 | } | ||
1237 | return 0; | ||
1238 | } | 1214 | } |
1239 | 1215 | ||
1240 | #ifdef CONFIG_PERF_EVENTS | 1216 | #ifdef CONFIG_PERF_EVENTS |
diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index e2c184eaa7db..21af28ffba3a 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c | |||
@@ -668,3 +668,24 @@ int set_print_fmt(struct trace_probe *tp, bool is_return) | |||
668 | 668 | ||
669 | return 0; | 669 | return 0; |
670 | } | 670 | } |
671 | |||
672 | int traceprobe_define_arg_fields(struct trace_event_call *event_call, | ||
673 | size_t offset, struct trace_probe *tp) | ||
674 | { | ||
675 | int ret, i; | ||
676 | |||
677 | /* Set argument names as fields */ | ||
678 | for (i = 0; i < tp->nr_args; i++) { | ||
679 | struct probe_arg *parg = &tp->args[i]; | ||
680 | |||
681 | ret = trace_define_field(event_call, parg->type->fmttype, | ||
682 | parg->name, | ||
683 | offset + parg->offset, | ||
684 | parg->type->size, | ||
685 | parg->type->is_signed, | ||
686 | FILTER_OTHER); | ||
687 | if (ret) | ||
688 | return ret; | ||
689 | } | ||
690 | return 0; | ||
691 | } | ||
diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h index 8254a061ac35..a1df7763b797 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h | |||
@@ -429,3 +429,5 @@ create_local_trace_uprobe(char *name, unsigned long offs, | |||
429 | unsigned long ref_ctr_offset, bool is_return); | 429 | unsigned long ref_ctr_offset, bool is_return); |
430 | extern void destroy_local_trace_uprobe(struct trace_event_call *event_call); | 430 | extern void destroy_local_trace_uprobe(struct trace_event_call *event_call); |
431 | #endif | 431 | #endif |
432 | extern int traceprobe_define_arg_fields(struct trace_event_call *event_call, | ||
433 | size_t offset, struct trace_probe *tp); | ||
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index c55753e1079e..28a8f69cec89 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c | |||
@@ -1018,7 +1018,7 @@ probe_event_disable(struct trace_uprobe *tu, struct trace_event_file *file) | |||
1018 | 1018 | ||
1019 | static int uprobe_event_define_fields(struct trace_event_call *event_call) | 1019 | static int uprobe_event_define_fields(struct trace_event_call *event_call) |
1020 | { | 1020 | { |
1021 | int ret, i, size; | 1021 | int ret, size; |
1022 | struct uprobe_trace_entry_head field; | 1022 | struct uprobe_trace_entry_head field; |
1023 | struct trace_uprobe *tu = event_call->data; | 1023 | struct trace_uprobe *tu = event_call->data; |
1024 | 1024 | ||
@@ -1030,19 +1030,8 @@ static int uprobe_event_define_fields(struct trace_event_call *event_call) | |||
1030 | DEFINE_FIELD(unsigned long, vaddr[0], FIELD_STRING_IP, 0); | 1030 | DEFINE_FIELD(unsigned long, vaddr[0], FIELD_STRING_IP, 0); |
1031 | size = SIZEOF_TRACE_ENTRY(false); | 1031 | size = SIZEOF_TRACE_ENTRY(false); |
1032 | } | 1032 | } |
1033 | /* Set argument names as fields */ | ||
1034 | for (i = 0; i < tu->tp.nr_args; i++) { | ||
1035 | struct probe_arg *parg = &tu->tp.args[i]; | ||
1036 | |||
1037 | ret = trace_define_field(event_call, parg->type->fmttype, | ||
1038 | parg->name, size + parg->offset, | ||
1039 | parg->type->size, parg->type->is_signed, | ||
1040 | FILTER_OTHER); | ||
1041 | 1033 | ||
1042 | if (ret) | 1034 | return traceprobe_define_arg_fields(event_call, size, &tu->tp); |
1043 | return ret; | ||
1044 | } | ||
1045 | return 0; | ||
1046 | } | 1035 | } |
1047 | 1036 | ||
1048 | #ifdef CONFIG_PERF_EVENTS | 1037 | #ifdef CONFIG_PERF_EVENTS |