aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_events.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace_events.c')
-rw-r--r--kernel/trace/trace_events.c57
1 files changed, 49 insertions, 8 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 0cc51edde3a8..366a78a3e61e 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -212,8 +212,40 @@ void *ftrace_event_buffer_reserve(struct ftrace_event_buffer *fbuffer,
212} 212}
213EXPORT_SYMBOL_GPL(ftrace_event_buffer_reserve); 213EXPORT_SYMBOL_GPL(ftrace_event_buffer_reserve);
214 214
215static DEFINE_SPINLOCK(tracepoint_iter_lock);
216
217static void output_printk(struct ftrace_event_buffer *fbuffer)
218{
219 struct ftrace_event_call *event_call;
220 struct trace_event *event;
221 unsigned long flags;
222 struct trace_iterator *iter = tracepoint_print_iter;
223
224 if (!iter)
225 return;
226
227 event_call = fbuffer->ftrace_file->event_call;
228 if (!event_call || !event_call->event.funcs ||
229 !event_call->event.funcs->trace)
230 return;
231
232 event = &fbuffer->ftrace_file->event_call->event;
233
234 spin_lock_irqsave(&tracepoint_iter_lock, flags);
235 trace_seq_init(&iter->seq);
236 iter->ent = fbuffer->entry;
237 event_call->event.funcs->trace(iter, 0, event);
238 trace_seq_putc(&iter->seq, 0);
239 printk("%s", iter->seq.buffer);
240
241 spin_unlock_irqrestore(&tracepoint_iter_lock, flags);
242}
243
215void ftrace_event_buffer_commit(struct ftrace_event_buffer *fbuffer) 244void ftrace_event_buffer_commit(struct ftrace_event_buffer *fbuffer)
216{ 245{
246 if (tracepoint_printk)
247 output_printk(fbuffer);
248
217 event_trigger_unlock_commit(fbuffer->ftrace_file, fbuffer->buffer, 249 event_trigger_unlock_commit(fbuffer->ftrace_file, fbuffer->buffer,
218 fbuffer->event, fbuffer->entry, 250 fbuffer->event, fbuffer->entry,
219 fbuffer->flags, fbuffer->pc); 251 fbuffer->flags, fbuffer->pc);
@@ -461,7 +493,7 @@ static void remove_event_file_dir(struct ftrace_event_file *file)
461 493
462 if (dir) { 494 if (dir) {
463 spin_lock(&dir->d_lock); /* probably unneeded */ 495 spin_lock(&dir->d_lock); /* probably unneeded */
464 list_for_each_entry(child, &dir->d_subdirs, d_u.d_child) { 496 list_for_each_entry(child, &dir->d_subdirs, d_child) {
465 if (child->d_inode) /* probably unneeded */ 497 if (child->d_inode) /* probably unneeded */
466 child->d_inode->i_private = NULL; 498 child->d_inode->i_private = NULL;
467 } 499 }
@@ -918,7 +950,7 @@ static int f_show(struct seq_file *m, void *v)
918 case FORMAT_HEADER: 950 case FORMAT_HEADER:
919 seq_printf(m, "name: %s\n", ftrace_event_name(call)); 951 seq_printf(m, "name: %s\n", ftrace_event_name(call));
920 seq_printf(m, "ID: %d\n", call->event.type); 952 seq_printf(m, "ID: %d\n", call->event.type);
921 seq_printf(m, "format:\n"); 953 seq_puts(m, "format:\n");
922 return 0; 954 return 0;
923 955
924 case FORMAT_FIELD_SEPERATOR: 956 case FORMAT_FIELD_SEPERATOR:
@@ -1044,7 +1076,8 @@ event_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
1044 mutex_unlock(&event_mutex); 1076 mutex_unlock(&event_mutex);
1045 1077
1046 if (file) 1078 if (file)
1047 r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); 1079 r = simple_read_from_buffer(ubuf, cnt, ppos,
1080 s->buffer, trace_seq_used(s));
1048 1081
1049 kfree(s); 1082 kfree(s);
1050 1083
@@ -1210,7 +1243,8 @@ subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
1210 trace_seq_init(s); 1243 trace_seq_init(s);
1211 1244
1212 print_subsystem_event_filter(system, s); 1245 print_subsystem_event_filter(system, s);
1213 r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); 1246 r = simple_read_from_buffer(ubuf, cnt, ppos,
1247 s->buffer, trace_seq_used(s));
1214 1248
1215 kfree(s); 1249 kfree(s);
1216 1250
@@ -1265,7 +1299,8 @@ show_header(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
1265 trace_seq_init(s); 1299 trace_seq_init(s);
1266 1300
1267 func(s); 1301 func(s);
1268 r = simple_read_from_buffer(ubuf, cnt, ppos, s->buffer, s->len); 1302 r = simple_read_from_buffer(ubuf, cnt, ppos,
1303 s->buffer, trace_seq_used(s));
1269 1304
1270 kfree(s); 1305 kfree(s);
1271 1306
@@ -1988,7 +2023,7 @@ event_enable_print(struct seq_file *m, unsigned long ip,
1988 ftrace_event_name(data->file->event_call)); 2023 ftrace_event_name(data->file->event_call));
1989 2024
1990 if (data->count == -1) 2025 if (data->count == -1)
1991 seq_printf(m, ":unlimited\n"); 2026 seq_puts(m, ":unlimited\n");
1992 else 2027 else
1993 seq_printf(m, ":count=%ld\n", data->count); 2028 seq_printf(m, ":count=%ld\n", data->count);
1994 2029
@@ -2477,8 +2512,14 @@ static __init int event_trace_init(void)
2477#endif 2512#endif
2478 return 0; 2513 return 0;
2479} 2514}
2480early_initcall(event_trace_memsetup); 2515
2481core_initcall(event_trace_enable); 2516void __init trace_event_init(void)
2517{
2518 event_trace_memsetup();
2519 init_ftrace_syscalls();
2520 event_trace_enable();
2521}
2522
2482fs_initcall(event_trace_init); 2523fs_initcall(event_trace_init);
2483 2524
2484#ifdef CONFIG_FTRACE_STARTUP_TEST 2525#ifdef CONFIG_FTRACE_STARTUP_TEST