aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/trace/trace.c24
-rw-r--r--kernel/trace/trace.h28
2 files changed, 33 insertions, 19 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index b6211d604131..d6059a493e7f 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -866,10 +866,6 @@ struct ring_buffer_event *trace_buffer_lock_reserve(struct trace_array *tr,
866 866
867 return event; 867 return event;
868} 868}
869static void ftrace_trace_stack(struct trace_array *tr,
870 unsigned long flags, int skip, int pc);
871static void ftrace_trace_userstack(struct trace_array *tr,
872 unsigned long flags, int pc);
873 869
874static inline void __trace_buffer_unlock_commit(struct trace_array *tr, 870static inline void __trace_buffer_unlock_commit(struct trace_array *tr,
875 struct ring_buffer_event *event, 871 struct ring_buffer_event *event,
@@ -1003,11 +999,11 @@ ftrace(struct trace_array *tr, struct trace_array_cpu *data,
1003 trace_function(tr, ip, parent_ip, flags, pc); 999 trace_function(tr, ip, parent_ip, flags, pc);
1004} 1000}
1005 1001
1002#ifdef CONFIG_STACKTRACE
1006static void __ftrace_trace_stack(struct trace_array *tr, 1003static void __ftrace_trace_stack(struct trace_array *tr,
1007 unsigned long flags, 1004 unsigned long flags,
1008 int skip, int pc) 1005 int skip, int pc)
1009{ 1006{
1010#ifdef CONFIG_STACKTRACE
1011 struct ftrace_event_call *call = &event_kernel_stack; 1007 struct ftrace_event_call *call = &event_kernel_stack;
1012 struct ring_buffer_event *event; 1008 struct ring_buffer_event *event;
1013 struct stack_entry *entry; 1009 struct stack_entry *entry;
@@ -1028,12 +1024,10 @@ static void __ftrace_trace_stack(struct trace_array *tr,
1028 save_stack_trace(&trace); 1024 save_stack_trace(&trace);
1029 if (!filter_check_discard(call, entry, tr->buffer, event)) 1025 if (!filter_check_discard(call, entry, tr->buffer, event))
1030 ring_buffer_unlock_commit(tr->buffer, event); 1026 ring_buffer_unlock_commit(tr->buffer, event);
1031#endif
1032} 1027}
1033 1028
1034static void ftrace_trace_stack(struct trace_array *tr, 1029void ftrace_trace_stack(struct trace_array *tr, unsigned long flags, int skip,
1035 unsigned long flags, 1030 int pc)
1036 int skip, int pc)
1037{ 1031{
1038 if (!(trace_flags & TRACE_ITER_STACKTRACE)) 1032 if (!(trace_flags & TRACE_ITER_STACKTRACE))
1039 return; 1033 return;
@@ -1041,17 +1035,14 @@ static void ftrace_trace_stack(struct trace_array *tr,
1041 __ftrace_trace_stack(tr, flags, skip, pc); 1035 __ftrace_trace_stack(tr, flags, skip, pc);
1042} 1036}
1043 1037
1044void __trace_stack(struct trace_array *tr, 1038void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
1045 unsigned long flags, 1039 int pc)
1046 int skip, int pc)
1047{ 1040{
1048 __ftrace_trace_stack(tr, flags, skip, pc); 1041 __ftrace_trace_stack(tr, flags, skip, pc);
1049} 1042}
1050 1043
1051static void ftrace_trace_userstack(struct trace_array *tr, 1044void ftrace_trace_userstack(struct trace_array *tr, unsigned long flags, int pc)
1052 unsigned long flags, int pc)
1053{ 1045{
1054#ifdef CONFIG_STACKTRACE
1055 struct ftrace_event_call *call = &event_user_stack; 1046 struct ftrace_event_call *call = &event_user_stack;
1056 struct ring_buffer_event *event; 1047 struct ring_buffer_event *event;
1057 struct userstack_entry *entry; 1048 struct userstack_entry *entry;
@@ -1076,7 +1067,6 @@ static void ftrace_trace_userstack(struct trace_array *tr,
1076 save_stack_trace_user(&trace); 1067 save_stack_trace_user(&trace);
1077 if (!filter_check_discard(call, entry, tr->buffer, event)) 1068 if (!filter_check_discard(call, entry, tr->buffer, event))
1078 ring_buffer_unlock_commit(tr->buffer, event); 1069 ring_buffer_unlock_commit(tr->buffer, event);
1079#endif
1080} 1070}
1081 1071
1082#ifdef UNUSED 1072#ifdef UNUSED
@@ -1086,6 +1076,8 @@ static void __trace_userstack(struct trace_array *tr, unsigned long flags)
1086} 1076}
1087#endif /* UNUSED */ 1077#endif /* UNUSED */
1088 1078
1079#endif /* CONFIG_STACKTRACE */
1080
1089static void 1081static void
1090ftrace_trace_special(void *__tr, 1082ftrace_trace_special(void *__tr,
1091 unsigned long arg1, unsigned long arg2, unsigned long arg3, 1083 unsigned long arg1, unsigned long arg2, unsigned long arg3,
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index c7e92732982d..116524d62366 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -489,9 +489,31 @@ void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu);
489void update_max_tr_single(struct trace_array *tr, 489void update_max_tr_single(struct trace_array *tr,
490 struct task_struct *tsk, int cpu); 490 struct task_struct *tsk, int cpu);
491 491
492void __trace_stack(struct trace_array *tr, 492#ifdef CONFIG_STACKTRACE
493 unsigned long flags, 493void ftrace_trace_stack(struct trace_array *tr, unsigned long flags,
494 int skip, int pc); 494 int skip, int pc);
495
496void ftrace_trace_userstack(struct trace_array *tr, unsigned long flags,
497 int pc);
498
499void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
500 int pc);
501#else
502static inline void ftrace_trace_stack(struct trace_array *tr,
503 unsigned long flags, int skip, int pc)
504{
505}
506
507static inline void ftrace_trace_userstack(struct trace_array *tr,
508 unsigned long flags, int pc)
509{
510}
511
512static inline void __trace_stack(struct trace_array *tr, unsigned long flags,
513 int skip, int pc)
514{
515}
516#endif /* CONFIG_STACKTRACE */
495 517
496extern cycle_t ftrace_now(int cpu); 518extern cycle_t ftrace_now(int cpu);
497 519