diff options
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 110 |
1 files changed, 0 insertions, 110 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 1b73acb40e5..0cfd1a62def 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -942,54 +942,6 @@ trace_function(struct trace_array *tr, | |||
942 | ring_buffer_unlock_commit(tr->buffer, event); | 942 | ring_buffer_unlock_commit(tr->buffer, event); |
943 | } | 943 | } |
944 | 944 | ||
945 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
946 | static int __trace_graph_entry(struct trace_array *tr, | ||
947 | struct ftrace_graph_ent *trace, | ||
948 | unsigned long flags, | ||
949 | int pc) | ||
950 | { | ||
951 | struct ftrace_event_call *call = &event_funcgraph_entry; | ||
952 | struct ring_buffer_event *event; | ||
953 | struct ftrace_graph_ent_entry *entry; | ||
954 | |||
955 | if (unlikely(local_read(&__get_cpu_var(ftrace_cpu_disabled)))) | ||
956 | return 0; | ||
957 | |||
958 | event = trace_buffer_lock_reserve(&global_trace, TRACE_GRAPH_ENT, | ||
959 | sizeof(*entry), flags, pc); | ||
960 | if (!event) | ||
961 | return 0; | ||
962 | entry = ring_buffer_event_data(event); | ||
963 | entry->graph_ent = *trace; | ||
964 | if (!filter_current_check_discard(call, entry, event)) | ||
965 | ring_buffer_unlock_commit(global_trace.buffer, event); | ||
966 | |||
967 | return 1; | ||
968 | } | ||
969 | |||
970 | static void __trace_graph_return(struct trace_array *tr, | ||
971 | struct ftrace_graph_ret *trace, | ||
972 | unsigned long flags, | ||
973 | int pc) | ||
974 | { | ||
975 | struct ftrace_event_call *call = &event_funcgraph_exit; | ||
976 | struct ring_buffer_event *event; | ||
977 | struct ftrace_graph_ret_entry *entry; | ||
978 | |||
979 | if (unlikely(local_read(&__get_cpu_var(ftrace_cpu_disabled)))) | ||
980 | return; | ||
981 | |||
982 | event = trace_buffer_lock_reserve(&global_trace, TRACE_GRAPH_RET, | ||
983 | sizeof(*entry), flags, pc); | ||
984 | if (!event) | ||
985 | return; | ||
986 | entry = ring_buffer_event_data(event); | ||
987 | entry->ret = *trace; | ||
988 | if (!filter_current_check_discard(call, entry, event)) | ||
989 | ring_buffer_unlock_commit(global_trace.buffer, event); | ||
990 | } | ||
991 | #endif | ||
992 | |||
993 | void | 945 | void |
994 | ftrace(struct trace_array *tr, struct trace_array_cpu *data, | 946 | ftrace(struct trace_array *tr, struct trace_array_cpu *data, |
995 | unsigned long ip, unsigned long parent_ip, unsigned long flags, | 947 | unsigned long ip, unsigned long parent_ip, unsigned long flags, |
@@ -1129,68 +1081,6 @@ ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) | |||
1129 | local_irq_restore(flags); | 1081 | local_irq_restore(flags); |
1130 | } | 1082 | } |
1131 | 1083 | ||
1132 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
1133 | int trace_graph_entry(struct ftrace_graph_ent *trace) | ||
1134 | { | ||
1135 | struct trace_array *tr = &global_trace; | ||
1136 | struct trace_array_cpu *data; | ||
1137 | unsigned long flags; | ||
1138 | long disabled; | ||
1139 | int ret; | ||
1140 | int cpu; | ||
1141 | int pc; | ||
1142 | |||
1143 | if (!ftrace_trace_task(current)) | ||
1144 | return 0; | ||
1145 | |||
1146 | if (!ftrace_graph_addr(trace->func)) | ||
1147 | return 0; | ||
1148 | |||
1149 | local_irq_save(flags); | ||
1150 | cpu = raw_smp_processor_id(); | ||
1151 | data = tr->data[cpu]; | ||
1152 | disabled = atomic_inc_return(&data->disabled); | ||
1153 | if (likely(disabled == 1)) { | ||
1154 | pc = preempt_count(); | ||
1155 | ret = __trace_graph_entry(tr, trace, flags, pc); | ||
1156 | } else { | ||
1157 | ret = 0; | ||
1158 | } | ||
1159 | /* Only do the atomic if it is not already set */ | ||
1160 | if (!test_tsk_trace_graph(current)) | ||
1161 | set_tsk_trace_graph(current); | ||
1162 | |||
1163 | atomic_dec(&data->disabled); | ||
1164 | local_irq_restore(flags); | ||
1165 | |||
1166 | return ret; | ||
1167 | } | ||
1168 | |||
1169 | void trace_graph_return(struct ftrace_graph_ret *trace) | ||
1170 | { | ||
1171 | struct trace_array *tr = &global_trace; | ||
1172 | struct trace_array_cpu *data; | ||
1173 | unsigned long flags; | ||
1174 | long disabled; | ||
1175 | int cpu; | ||
1176 | int pc; | ||
1177 | |||
1178 | local_irq_save(flags); | ||
1179 | cpu = raw_smp_processor_id(); | ||
1180 | data = tr->data[cpu]; | ||
1181 | disabled = atomic_inc_return(&data->disabled); | ||
1182 | if (likely(disabled == 1)) { | ||
1183 | pc = preempt_count(); | ||
1184 | __trace_graph_return(tr, trace, flags, pc); | ||
1185 | } | ||
1186 | if (!trace->depth) | ||
1187 | clear_tsk_trace_graph(current); | ||
1188 | atomic_dec(&data->disabled); | ||
1189 | local_irq_restore(flags); | ||
1190 | } | ||
1191 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | ||
1192 | |||
1193 | |||
1194 | /** | 1084 | /** |
1195 | * trace_vbprintk - write binary msg to tracing buffer | 1085 | * trace_vbprintk - write binary msg to tracing buffer |
1196 | * | 1086 | * |