tcp: tcp_get_info() should fetch socket fields once
[pandora-kernel.git] / kernel / trace / trace_events.c
1 /*
2  * event tracer
3  *
4  * Copyright (C) 2008 Red Hat Inc, Steven Rostedt <srostedt@redhat.com>
5  *
6  *  - Added format output of fields of the trace point.
7  *    This was based off of work by Tom Zanussi <tzanussi@gmail.com>.
8  *
9  */
10
11 #define pr_fmt(fmt) fmt
12
13 #include <linux/workqueue.h>
14 #include <linux/spinlock.h>
15 #include <linux/kthread.h>
16 #include <linux/tracefs.h>
17 #include <linux/uaccess.h>
18 #include <linux/module.h>
19 #include <linux/ctype.h>
20 #include <linux/slab.h>
21 #include <linux/delay.h>
22
23 #include <asm/setup.h>
24
25 #include "trace_output.h"
26
27 #undef TRACE_SYSTEM
28 #define TRACE_SYSTEM "TRACE_SYSTEM"
29
30 DEFINE_MUTEX(event_mutex);
31
32 LIST_HEAD(ftrace_events);
33 static LIST_HEAD(ftrace_common_fields);
34
35 #define GFP_TRACE (GFP_KERNEL | __GFP_ZERO)
36
37 static struct kmem_cache *field_cachep;
38 static struct kmem_cache *file_cachep;
39
40 #define SYSTEM_FL_FREE_NAME             (1 << 31)
41
42 static inline int system_refcount(struct event_subsystem *system)
43 {
44         return system->ref_count & ~SYSTEM_FL_FREE_NAME;
45 }
46
47 static int system_refcount_inc(struct event_subsystem *system)
48 {
49         return (system->ref_count++) & ~SYSTEM_FL_FREE_NAME;
50 }
51
52 static int system_refcount_dec(struct event_subsystem *system)
53 {
54         return (--system->ref_count) & ~SYSTEM_FL_FREE_NAME;
55 }
56
57 /* Double loops, do not use break, only goto's work */
58 #define do_for_each_event_file(tr, file)                        \
59         list_for_each_entry(tr, &ftrace_trace_arrays, list) {   \
60                 list_for_each_entry(file, &tr->events, list)
61
62 #define do_for_each_event_file_safe(tr, file)                   \
63         list_for_each_entry(tr, &ftrace_trace_arrays, list) {   \
64                 struct ftrace_event_file *___n;                         \
65                 list_for_each_entry_safe(file, ___n, &tr->events, list)
66
67 #define while_for_each_event_file()             \
68         }
69
70 static struct list_head *
71 trace_get_fields(struct ftrace_event_call *event_call)
72 {
73         if (!event_call->class->get_fields)
74                 return &event_call->class->fields;
75         return event_call->class->get_fields(event_call);
76 }
77
78 static struct ftrace_event_field *
79 __find_event_field(struct list_head *head, char *name)
80 {
81         struct ftrace_event_field *field;
82
83         list_for_each_entry(field, head, link) {
84                 if (!strcmp(field->name, name))
85                         return field;
86         }
87
88         return NULL;
89 }
90
91 struct ftrace_event_field *
92 trace_find_event_field(struct ftrace_event_call *call, char *name)
93 {
94         struct ftrace_event_field *field;
95         struct list_head *head;
96
97         field = __find_event_field(&ftrace_common_fields, name);
98         if (field)
99                 return field;
100
101         head = trace_get_fields(call);
102         return __find_event_field(head, name);
103 }
104
105 static int __trace_define_field(struct list_head *head, const char *type,
106                                 const char *name, int offset, int size,
107                                 int is_signed, int filter_type)
108 {
109         struct ftrace_event_field *field;
110
111         field = kmem_cache_alloc(field_cachep, GFP_TRACE);
112         if (!field)
113                 return -ENOMEM;
114
115         field->name = name;
116         field->type = type;
117
118         if (filter_type == FILTER_OTHER)
119                 field->filter_type = filter_assign_type(type);
120         else
121                 field->filter_type = filter_type;
122
123         field->offset = offset;
124         field->size = size;
125         field->is_signed = is_signed;
126
127         list_add(&field->link, head);
128
129         return 0;
130 }
131
132 int trace_define_field(struct ftrace_event_call *call, const char *type,
133                        const char *name, int offset, int size, int is_signed,
134                        int filter_type)
135 {
136         struct list_head *head;
137
138         if (WARN_ON(!call->class))
139                 return 0;
140
141         head = trace_get_fields(call);
142         return __trace_define_field(head, type, name, offset, size,
143                                     is_signed, filter_type);
144 }
145 EXPORT_SYMBOL_GPL(trace_define_field);
146
147 #define __common_field(type, item)                                      \
148         ret = __trace_define_field(&ftrace_common_fields, #type,        \
149                                    "common_" #item,                     \
150                                    offsetof(typeof(ent), item),         \
151                                    sizeof(ent.item),                    \
152                                    is_signed_type(type), FILTER_OTHER); \
153         if (ret)                                                        \
154                 return ret;
155
156 static int trace_define_common_fields(void)
157 {
158         int ret;
159         struct trace_entry ent;
160
161         __common_field(unsigned short, type);
162         __common_field(unsigned char, flags);
163         __common_field(unsigned char, preempt_count);
164         __common_field(int, pid);
165
166         return ret;
167 }
168
169 static void trace_destroy_fields(struct ftrace_event_call *call)
170 {
171         struct ftrace_event_field *field, *next;
172         struct list_head *head;
173
174         head = trace_get_fields(call);
175         list_for_each_entry_safe(field, next, head, link) {
176                 list_del(&field->link);
177                 kmem_cache_free(field_cachep, field);
178         }
179 }
180
181 int trace_event_raw_init(struct ftrace_event_call *call)
182 {
183         int id;
184
185         id = register_ftrace_event(&call->event);
186         if (!id)
187                 return -ENODEV;
188
189         return 0;
190 }
191 EXPORT_SYMBOL_GPL(trace_event_raw_init);
192
193 void *ftrace_event_buffer_reserve(struct ftrace_event_buffer *fbuffer,
194                                   struct ftrace_event_file *ftrace_file,
195                                   unsigned long len)
196 {
197         struct ftrace_event_call *event_call = ftrace_file->event_call;
198
199         local_save_flags(fbuffer->flags);
200         fbuffer->pc = preempt_count();
201         fbuffer->ftrace_file = ftrace_file;
202
203         fbuffer->event =
204                 trace_event_buffer_lock_reserve(&fbuffer->buffer, ftrace_file,
205                                                 event_call->event.type, len,
206                                                 fbuffer->flags, fbuffer->pc);
207         if (!fbuffer->event)
208                 return NULL;
209
210         fbuffer->entry = ring_buffer_event_data(fbuffer->event);
211         return fbuffer->entry;
212 }
213 EXPORT_SYMBOL_GPL(ftrace_event_buffer_reserve);
214
215 static DEFINE_SPINLOCK(tracepoint_iter_lock);
216
217 static 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
244 void ftrace_event_buffer_commit(struct ftrace_event_buffer *fbuffer)
245 {
246         if (tracepoint_printk)
247                 output_printk(fbuffer);
248
249         event_trigger_unlock_commit(fbuffer->ftrace_file, fbuffer->buffer,
250                                     fbuffer->event, fbuffer->entry,
251                                     fbuffer->flags, fbuffer->pc);
252 }
253 EXPORT_SYMBOL_GPL(ftrace_event_buffer_commit);
254
255 int ftrace_event_reg(struct ftrace_event_call *call,
256                      enum trace_reg type, void *data)
257 {
258         struct ftrace_event_file *file = data;
259
260         WARN_ON(!(call->flags & TRACE_EVENT_FL_TRACEPOINT));
261         switch (type) {
262         case TRACE_REG_REGISTER:
263                 return tracepoint_probe_register(call->tp,
264                                                  call->class->probe,
265                                                  file);
266         case TRACE_REG_UNREGISTER:
267                 tracepoint_probe_unregister(call->tp,
268                                             call->class->probe,
269                                             file);
270                 return 0;
271
272 #ifdef CONFIG_PERF_EVENTS
273         case TRACE_REG_PERF_REGISTER:
274                 return tracepoint_probe_register(call->tp,
275                                                  call->class->perf_probe,
276                                                  call);
277         case TRACE_REG_PERF_UNREGISTER:
278                 tracepoint_probe_unregister(call->tp,
279                                             call->class->perf_probe,
280                                             call);
281                 return 0;
282         case TRACE_REG_PERF_OPEN:
283         case TRACE_REG_PERF_CLOSE:
284         case TRACE_REG_PERF_ADD:
285         case TRACE_REG_PERF_DEL:
286                 return 0;
287 #endif
288         }
289         return 0;
290 }
291 EXPORT_SYMBOL_GPL(ftrace_event_reg);
292
293 void trace_event_enable_cmd_record(bool enable)
294 {
295         struct ftrace_event_file *file;
296         struct trace_array *tr;
297
298         mutex_lock(&event_mutex);
299         do_for_each_event_file(tr, file) {
300
301                 if (!(file->flags & FTRACE_EVENT_FL_ENABLED))
302                         continue;
303
304                 if (enable) {
305                         tracing_start_cmdline_record();
306                         set_bit(FTRACE_EVENT_FL_RECORDED_CMD_BIT, &file->flags);
307                 } else {
308                         tracing_stop_cmdline_record();
309                         clear_bit(FTRACE_EVENT_FL_RECORDED_CMD_BIT, &file->flags);
310                 }
311         } while_for_each_event_file();
312         mutex_unlock(&event_mutex);
313 }
314
315 static int __ftrace_event_enable_disable(struct ftrace_event_file *file,
316                                          int enable, int soft_disable)
317 {
318         struct ftrace_event_call *call = file->event_call;
319         int ret = 0;
320         int disable;
321
322         switch (enable) {
323         case 0:
324                 /*
325                  * When soft_disable is set and enable is cleared, the sm_ref
326                  * reference counter is decremented. If it reaches 0, we want
327                  * to clear the SOFT_DISABLED flag but leave the event in the
328                  * state that it was. That is, if the event was enabled and
329                  * SOFT_DISABLED isn't set, then do nothing. But if SOFT_DISABLED
330                  * is set we do not want the event to be enabled before we
331                  * clear the bit.
332                  *
333                  * When soft_disable is not set but the SOFT_MODE flag is,
334                  * we do nothing. Do not disable the tracepoint, otherwise
335                  * "soft enable"s (clearing the SOFT_DISABLED bit) wont work.
336                  */
337                 if (soft_disable) {
338                         if (atomic_dec_return(&file->sm_ref) > 0)
339                                 break;
340                         disable = file->flags & FTRACE_EVENT_FL_SOFT_DISABLED;
341                         clear_bit(FTRACE_EVENT_FL_SOFT_MODE_BIT, &file->flags);
342                 } else
343                         disable = !(file->flags & FTRACE_EVENT_FL_SOFT_MODE);
344
345                 if (disable && (file->flags & FTRACE_EVENT_FL_ENABLED)) {
346                         clear_bit(FTRACE_EVENT_FL_ENABLED_BIT, &file->flags);
347                         if (file->flags & FTRACE_EVENT_FL_RECORDED_CMD) {
348                                 tracing_stop_cmdline_record();
349                                 clear_bit(FTRACE_EVENT_FL_RECORDED_CMD_BIT, &file->flags);
350                         }
351                         call->class->reg(call, TRACE_REG_UNREGISTER, file);
352                 }
353                 /* If in SOFT_MODE, just set the SOFT_DISABLE_BIT, else clear it */
354                 if (file->flags & FTRACE_EVENT_FL_SOFT_MODE)
355                         set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
356                 else
357                         clear_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
358                 break;
359         case 1:
360                 /*
361                  * When soft_disable is set and enable is set, we want to
362                  * register the tracepoint for the event, but leave the event
363                  * as is. That means, if the event was already enabled, we do
364                  * nothing (but set SOFT_MODE). If the event is disabled, we
365                  * set SOFT_DISABLED before enabling the event tracepoint, so
366                  * it still seems to be disabled.
367                  */
368                 if (!soft_disable)
369                         clear_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
370                 else {
371                         if (atomic_inc_return(&file->sm_ref) > 1)
372                                 break;
373                         set_bit(FTRACE_EVENT_FL_SOFT_MODE_BIT, &file->flags);
374                 }
375
376                 if (!(file->flags & FTRACE_EVENT_FL_ENABLED)) {
377
378                         /* Keep the event disabled, when going to SOFT_MODE. */
379                         if (soft_disable)
380                                 set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &file->flags);
381
382                         if (trace_flags & TRACE_ITER_RECORD_CMD) {
383                                 tracing_start_cmdline_record();
384                                 set_bit(FTRACE_EVENT_FL_RECORDED_CMD_BIT, &file->flags);
385                         }
386                         ret = call->class->reg(call, TRACE_REG_REGISTER, file);
387                         if (ret) {
388                                 tracing_stop_cmdline_record();
389                                 pr_info("event trace: Could not enable event "
390                                         "%s\n", ftrace_event_name(call));
391                                 break;
392                         }
393                         set_bit(FTRACE_EVENT_FL_ENABLED_BIT, &file->flags);
394
395                         /* WAS_ENABLED gets set but never cleared. */
396                         call->flags |= TRACE_EVENT_FL_WAS_ENABLED;
397                 }
398                 break;
399         }
400
401         return ret;
402 }
403
404 int trace_event_enable_disable(struct ftrace_event_file *file,
405                                int enable, int soft_disable)
406 {
407         return __ftrace_event_enable_disable(file, enable, soft_disable);
408 }
409
410 static int ftrace_event_enable_disable(struct ftrace_event_file *file,
411                                        int enable)
412 {
413         return __ftrace_event_enable_disable(file, enable, 0);
414 }
415
416 static void ftrace_clear_events(struct trace_array *tr)
417 {
418         struct ftrace_event_file *file;
419
420         mutex_lock(&event_mutex);
421         list_for_each_entry(file, &tr->events, list) {
422                 ftrace_event_enable_disable(file, 0);
423         }
424         mutex_unlock(&event_mutex);
425 }
426
427 static void __put_system(struct event_subsystem *system)
428 {
429         struct event_filter *filter = system->filter;
430
431         WARN_ON_ONCE(system_refcount(system) == 0);
432         if (system_refcount_dec(system))
433                 return;
434
435         list_del(&system->list);
436
437         if (filter) {
438                 kfree(filter->filter_string);
439                 kfree(filter);
440         }
441         if (system->ref_count & SYSTEM_FL_FREE_NAME)
442                 kfree(system->name);
443         kfree(system);
444 }
445
446 static void __get_system(struct event_subsystem *system)
447 {
448         WARN_ON_ONCE(system_refcount(system) == 0);
449         system_refcount_inc(system);
450 }
451
452 static void __get_system_dir(struct ftrace_subsystem_dir *dir)
453 {
454         WARN_ON_ONCE(dir->ref_count == 0);
455         dir->ref_count++;
456         __get_system(dir->subsystem);
457 }
458
459 static void __put_system_dir(struct ftrace_subsystem_dir *dir)
460 {
461         WARN_ON_ONCE(dir->ref_count == 0);
462         /* If the subsystem is about to be freed, the dir must be too */
463         WARN_ON_ONCE(system_refcount(dir->subsystem) == 1 && dir->ref_count != 1);
464
465         __put_system(dir->subsystem);
466         if (!--dir->ref_count)
467                 kfree(dir);
468 }
469
470 static void put_system(struct ftrace_subsystem_dir *dir)
471 {
472         mutex_lock(&event_mutex);
473         __put_system_dir(dir);
474         mutex_unlock(&event_mutex);
475 }
476
477 static void remove_subsystem(struct ftrace_subsystem_dir *dir)
478 {
479         if (!dir)
480                 return;
481
482         if (!--dir->nr_events) {
483                 tracefs_remove_recursive(dir->entry);
484                 list_del(&dir->list);
485                 __put_system_dir(dir);
486         }
487 }
488
489 static void remove_event_file_dir(struct ftrace_event_file *file)
490 {
491         struct dentry *dir = file->dir;
492         struct dentry *child;
493
494         if (dir) {
495                 spin_lock(&dir->d_lock);        /* probably unneeded */
496                 list_for_each_entry(child, &dir->d_subdirs, d_child) {
497                         if (child->d_inode)     /* probably unneeded */
498                                 child->d_inode->i_private = NULL;
499                 }
500                 spin_unlock(&dir->d_lock);
501
502                 tracefs_remove_recursive(dir);
503         }
504
505         list_del(&file->list);
506         remove_subsystem(file->system);
507         free_event_filter(file->filter);
508         kmem_cache_free(file_cachep, file);
509 }
510
511 /*
512  * __ftrace_set_clr_event(NULL, NULL, NULL, set) will set/unset all events.
513  */
514 static int
515 __ftrace_set_clr_event_nolock(struct trace_array *tr, const char *match,
516                               const char *sub, const char *event, int set)
517 {
518         struct ftrace_event_file *file;
519         struct ftrace_event_call *call;
520         const char *name;
521         int ret = -EINVAL;
522
523         list_for_each_entry(file, &tr->events, list) {
524
525                 call = file->event_call;
526                 name = ftrace_event_name(call);
527
528                 if (!name || !call->class || !call->class->reg)
529                         continue;
530
531                 if (call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)
532                         continue;
533
534                 if (match &&
535                     strcmp(match, name) != 0 &&
536                     strcmp(match, call->class->system) != 0)
537                         continue;
538
539                 if (sub && strcmp(sub, call->class->system) != 0)
540                         continue;
541
542                 if (event && strcmp(event, name) != 0)
543                         continue;
544
545                 ftrace_event_enable_disable(file, set);
546
547                 ret = 0;
548         }
549
550         return ret;
551 }
552
553 static int __ftrace_set_clr_event(struct trace_array *tr, const char *match,
554                                   const char *sub, const char *event, int set)
555 {
556         int ret;
557
558         mutex_lock(&event_mutex);
559         ret = __ftrace_set_clr_event_nolock(tr, match, sub, event, set);
560         mutex_unlock(&event_mutex);
561
562         return ret;
563 }
564
565 static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set)
566 {
567         char *event = NULL, *sub = NULL, *match;
568
569         /*
570          * The buf format can be <subsystem>:<event-name>
571          *  *:<event-name> means any event by that name.
572          *  :<event-name> is the same.
573          *
574          *  <subsystem>:* means all events in that subsystem
575          *  <subsystem>: means the same.
576          *
577          *  <name> (no ':') means all events in a subsystem with
578          *  the name <name> or any event that matches <name>
579          */
580
581         match = strsep(&buf, ":");
582         if (buf) {
583                 sub = match;
584                 event = buf;
585                 match = NULL;
586
587                 if (!strlen(sub) || strcmp(sub, "*") == 0)
588                         sub = NULL;
589                 if (!strlen(event) || strcmp(event, "*") == 0)
590                         event = NULL;
591         }
592
593         return __ftrace_set_clr_event(tr, match, sub, event, set);
594 }
595
596 /**
597  * trace_set_clr_event - enable or disable an event
598  * @system: system name to match (NULL for any system)
599  * @event: event name to match (NULL for all events, within system)
600  * @set: 1 to enable, 0 to disable
601  *
602  * This is a way for other parts of the kernel to enable or disable
603  * event recording.
604  *
605  * Returns 0 on success, -EINVAL if the parameters do not match any
606  * registered events.
607  */
608 int trace_set_clr_event(const char *system, const char *event, int set)
609 {
610         struct trace_array *tr = top_trace_array();
611
612         if (!tr)
613                 return -ENODEV;
614
615         return __ftrace_set_clr_event(tr, NULL, system, event, set);
616 }
617 EXPORT_SYMBOL_GPL(trace_set_clr_event);
618
619 /* 128 should be much more than enough */
620 #define EVENT_BUF_SIZE          127
621
622 static ssize_t
623 ftrace_event_write(struct file *file, const char __user *ubuf,
624                    size_t cnt, loff_t *ppos)
625 {
626         struct trace_parser parser;
627         struct seq_file *m = file->private_data;
628         struct trace_array *tr = m->private;
629         ssize_t read, ret;
630
631         if (!cnt)
632                 return 0;
633
634         ret = tracing_update_buffers();
635         if (ret < 0)
636                 return ret;
637
638         if (trace_parser_get_init(&parser, EVENT_BUF_SIZE + 1))
639                 return -ENOMEM;
640
641         read = trace_get_user(&parser, ubuf, cnt, ppos);
642
643         if (read >= 0 && trace_parser_loaded((&parser))) {
644                 int set = 1;
645
646                 if (*parser.buffer == '!')
647                         set = 0;
648
649                 parser.buffer[parser.idx] = 0;
650
651                 ret = ftrace_set_clr_event(tr, parser.buffer + !set, set);
652                 if (ret)
653                         goto out_put;
654         }
655
656         ret = read;
657
658  out_put:
659         trace_parser_put(&parser);
660
661         return ret;
662 }
663
664 static void *
665 t_next(struct seq_file *m, void *v, loff_t *pos)
666 {
667         struct ftrace_event_file *file = v;
668         struct ftrace_event_call *call;
669         struct trace_array *tr = m->private;
670
671         (*pos)++;
672
673         list_for_each_entry_continue(file, &tr->events, list) {
674                 call = file->event_call;
675                 /*
676                  * The ftrace subsystem is for showing formats only.
677                  * They can not be enabled or disabled via the event files.
678                  */
679                 if (call->class && call->class->reg)
680                         return file;
681         }
682
683         return NULL;
684 }
685
686 static void *t_start(struct seq_file *m, loff_t *pos)
687 {
688         struct ftrace_event_file *file;
689         struct trace_array *tr = m->private;
690         loff_t l;
691
692         mutex_lock(&event_mutex);
693
694         file = list_entry(&tr->events, struct ftrace_event_file, list);
695         for (l = 0; l <= *pos; ) {
696                 file = t_next(m, file, &l);
697                 if (!file)
698                         break;
699         }
700         return file;
701 }
702
703 static void *
704 s_next(struct seq_file *m, void *v, loff_t *pos)
705 {
706         struct ftrace_event_file *file = v;
707         struct trace_array *tr = m->private;
708
709         (*pos)++;
710
711         list_for_each_entry_continue(file, &tr->events, list) {
712                 if (file->flags & FTRACE_EVENT_FL_ENABLED)
713                         return file;
714         }
715
716         return NULL;
717 }
718
719 static void *s_start(struct seq_file *m, loff_t *pos)
720 {
721         struct ftrace_event_file *file;
722         struct trace_array *tr = m->private;
723         loff_t l;
724
725         mutex_lock(&event_mutex);
726
727         file = list_entry(&tr->events, struct ftrace_event_file, list);
728         for (l = 0; l <= *pos; ) {
729                 file = s_next(m, file, &l);
730                 if (!file)
731                         break;
732         }
733         return file;
734 }
735
736 static int t_show(struct seq_file *m, void *v)
737 {
738         struct ftrace_event_file *file = v;
739         struct ftrace_event_call *call = file->event_call;
740
741         if (strcmp(call->class->system, TRACE_SYSTEM) != 0)
742                 seq_printf(m, "%s:", call->class->system);
743         seq_printf(m, "%s\n", ftrace_event_name(call));
744
745         return 0;
746 }
747
748 static void t_stop(struct seq_file *m, void *p)
749 {
750         mutex_unlock(&event_mutex);
751 }
752
753 static ssize_t
754 event_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
755                   loff_t *ppos)
756 {
757         struct ftrace_event_file *file;
758         unsigned long flags;
759         char buf[4] = "0";
760
761         mutex_lock(&event_mutex);
762         file = event_file_data(filp);
763         if (likely(file))
764                 flags = file->flags;
765         mutex_unlock(&event_mutex);
766
767         if (!file)
768                 return -ENODEV;
769
770         if (flags & FTRACE_EVENT_FL_ENABLED &&
771             !(flags & FTRACE_EVENT_FL_SOFT_DISABLED))
772                 strcpy(buf, "1");
773
774         if (flags & FTRACE_EVENT_FL_SOFT_DISABLED ||
775             flags & FTRACE_EVENT_FL_SOFT_MODE)
776                 strcat(buf, "*");
777
778         strcat(buf, "\n");
779
780         return simple_read_from_buffer(ubuf, cnt, ppos, buf, strlen(buf));
781 }
782
783 static ssize_t
784 event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
785                    loff_t *ppos)
786 {
787         struct ftrace_event_file *file;
788         unsigned long val;
789         int ret;
790
791         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
792         if (ret)
793                 return ret;
794
795         ret = tracing_update_buffers();
796         if (ret < 0)
797                 return ret;
798
799         switch (val) {
800         case 0:
801         case 1:
802                 ret = -ENODEV;
803                 mutex_lock(&event_mutex);
804                 file = event_file_data(filp);
805                 if (likely(file))
806                         ret = ftrace_event_enable_disable(file, val);
807                 mutex_unlock(&event_mutex);
808                 break;
809
810         default:
811                 return -EINVAL;
812         }
813
814         *ppos += cnt;
815
816         return ret ? ret : cnt;
817 }
818
819 static ssize_t
820 system_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
821                    loff_t *ppos)
822 {
823         const char set_to_char[4] = { '?', '0', '1', 'X' };
824         struct ftrace_subsystem_dir *dir = filp->private_data;
825         struct event_subsystem *system = dir->subsystem;
826         struct ftrace_event_call *call;
827         struct ftrace_event_file *file;
828         struct trace_array *tr = dir->tr;
829         char buf[2];
830         int set = 0;
831         int ret;
832
833         mutex_lock(&event_mutex);
834         list_for_each_entry(file, &tr->events, list) {
835                 call = file->event_call;
836                 if (!ftrace_event_name(call) || !call->class || !call->class->reg)
837                         continue;
838
839                 if (system && strcmp(call->class->system, system->name) != 0)
840                         continue;
841
842                 /*
843                  * We need to find out if all the events are set
844                  * or if all events or cleared, or if we have
845                  * a mixture.
846                  */
847                 set |= (1 << !!(file->flags & FTRACE_EVENT_FL_ENABLED));
848
849                 /*
850                  * If we have a mixture, no need to look further.
851                  */
852                 if (set == 3)
853                         break;
854         }
855         mutex_unlock(&event_mutex);
856
857         buf[0] = set_to_char[set];
858         buf[1] = '\n';
859
860         ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
861
862         return ret;
863 }
864
865 static ssize_t
866 system_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
867                     loff_t *ppos)
868 {
869         struct ftrace_subsystem_dir *dir = filp->private_data;
870         struct event_subsystem *system = dir->subsystem;
871         const char *name = NULL;
872         unsigned long val;
873         ssize_t ret;
874
875         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
876         if (ret)
877                 return ret;
878
879         ret = tracing_update_buffers();
880         if (ret < 0)
881                 return ret;
882
883         if (val != 0 && val != 1)
884                 return -EINVAL;
885
886         /*
887          * Opening of "enable" adds a ref count to system,
888          * so the name is safe to use.
889          */
890         if (system)
891                 name = system->name;
892
893         ret = __ftrace_set_clr_event(dir->tr, NULL, name, NULL, val);
894         if (ret)
895                 goto out;
896
897         ret = cnt;
898
899 out:
900         *ppos += cnt;
901
902         return ret;
903 }
904
905 enum {
906         FORMAT_HEADER           = 1,
907         FORMAT_FIELD_SEPERATOR  = 2,
908         FORMAT_PRINTFMT         = 3,
909 };
910
911 static void *f_next(struct seq_file *m, void *v, loff_t *pos)
912 {
913         struct ftrace_event_call *call = event_file_data(m->private);
914         struct list_head *common_head = &ftrace_common_fields;
915         struct list_head *head = trace_get_fields(call);
916         struct list_head *node = v;
917
918         (*pos)++;
919
920         switch ((unsigned long)v) {
921         case FORMAT_HEADER:
922                 node = common_head;
923                 break;
924
925         case FORMAT_FIELD_SEPERATOR:
926                 node = head;
927                 break;
928
929         case FORMAT_PRINTFMT:
930                 /* all done */
931                 return NULL;
932         }
933
934         node = node->prev;
935         if (node == common_head)
936                 return (void *)FORMAT_FIELD_SEPERATOR;
937         else if (node == head)
938                 return (void *)FORMAT_PRINTFMT;
939         else
940                 return node;
941 }
942
943 static int f_show(struct seq_file *m, void *v)
944 {
945         struct ftrace_event_call *call = event_file_data(m->private);
946         struct ftrace_event_field *field;
947         const char *array_descriptor;
948
949         switch ((unsigned long)v) {
950         case FORMAT_HEADER:
951                 seq_printf(m, "name: %s\n", ftrace_event_name(call));
952                 seq_printf(m, "ID: %d\n", call->event.type);
953                 seq_puts(m, "format:\n");
954                 return 0;
955
956         case FORMAT_FIELD_SEPERATOR:
957                 seq_putc(m, '\n');
958                 return 0;
959
960         case FORMAT_PRINTFMT:
961                 seq_printf(m, "\nprint fmt: %s\n",
962                            call->print_fmt);
963                 return 0;
964         }
965
966         field = list_entry(v, struct ftrace_event_field, link);
967         /*
968          * Smartly shows the array type(except dynamic array).
969          * Normal:
970          *      field:TYPE VAR
971          * If TYPE := TYPE[LEN], it is shown:
972          *      field:TYPE VAR[LEN]
973          */
974         array_descriptor = strchr(field->type, '[');
975
976         if (!strncmp(field->type, "__data_loc", 10))
977                 array_descriptor = NULL;
978
979         if (!array_descriptor)
980                 seq_printf(m, "\tfield:%s %s;\toffset:%u;\tsize:%u;\tsigned:%d;\n",
981                            field->type, field->name, field->offset,
982                            field->size, !!field->is_signed);
983         else
984                 seq_printf(m, "\tfield:%.*s %s%s;\toffset:%u;\tsize:%u;\tsigned:%d;\n",
985                            (int)(array_descriptor - field->type),
986                            field->type, field->name,
987                            array_descriptor, field->offset,
988                            field->size, !!field->is_signed);
989
990         return 0;
991 }
992
993 static void *f_start(struct seq_file *m, loff_t *pos)
994 {
995         void *p = (void *)FORMAT_HEADER;
996         loff_t l = 0;
997
998         /* ->stop() is called even if ->start() fails */
999         mutex_lock(&event_mutex);
1000         if (!event_file_data(m->private))
1001                 return ERR_PTR(-ENODEV);
1002
1003         while (l < *pos && p)
1004                 p = f_next(m, p, &l);
1005
1006         return p;
1007 }
1008
1009 static void f_stop(struct seq_file *m, void *p)
1010 {
1011         mutex_unlock(&event_mutex);
1012 }
1013
1014 static const struct seq_operations trace_format_seq_ops = {
1015         .start          = f_start,
1016         .next           = f_next,
1017         .stop           = f_stop,
1018         .show           = f_show,
1019 };
1020
1021 static int trace_format_open(struct inode *inode, struct file *file)
1022 {
1023         struct seq_file *m;
1024         int ret;
1025
1026         ret = seq_open(file, &trace_format_seq_ops);
1027         if (ret < 0)
1028                 return ret;
1029
1030         m = file->private_data;
1031         m->private = file;
1032
1033         return 0;
1034 }
1035
1036 static ssize_t
1037 event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
1038 {
1039         int id = (long)event_file_data(filp);
1040         char buf[32];
1041         int len;
1042
1043         if (*ppos)
1044                 return 0;
1045
1046         if (unlikely(!id))
1047                 return -ENODEV;
1048
1049         len = sprintf(buf, "%d\n", id);
1050
1051         return simple_read_from_buffer(ubuf, cnt, ppos, buf, len);
1052 }
1053
1054 static ssize_t
1055 event_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
1056                   loff_t *ppos)
1057 {
1058         struct ftrace_event_file *file;
1059         struct trace_seq *s;
1060         int r = -ENODEV;
1061
1062         if (*ppos)
1063                 return 0;
1064
1065         s = kmalloc(sizeof(*s), GFP_KERNEL);
1066
1067         if (!s)
1068                 return -ENOMEM;
1069
1070         trace_seq_init(s);
1071
1072         mutex_lock(&event_mutex);
1073         file = event_file_data(filp);
1074         if (file)
1075                 print_event_filter(file, s);
1076         mutex_unlock(&event_mutex);
1077
1078         if (file)
1079                 r = simple_read_from_buffer(ubuf, cnt, ppos,
1080                                             s->buffer, trace_seq_used(s));
1081
1082         kfree(s);
1083
1084         return r;
1085 }
1086
1087 static ssize_t
1088 event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
1089                    loff_t *ppos)
1090 {
1091         struct ftrace_event_file *file;
1092         char *buf;
1093         int err = -ENODEV;
1094
1095         if (cnt >= PAGE_SIZE)
1096                 return -EINVAL;
1097
1098         buf = (char *)__get_free_page(GFP_TEMPORARY);
1099         if (!buf)
1100                 return -ENOMEM;
1101
1102         if (copy_from_user(buf, ubuf, cnt)) {
1103                 free_page((unsigned long) buf);
1104                 return -EFAULT;
1105         }
1106         buf[cnt] = '\0';
1107
1108         mutex_lock(&event_mutex);
1109         file = event_file_data(filp);
1110         if (file)
1111                 err = apply_event_filter(file, buf);
1112         mutex_unlock(&event_mutex);
1113
1114         free_page((unsigned long) buf);
1115         if (err < 0)
1116                 return err;
1117
1118         *ppos += cnt;
1119
1120         return cnt;
1121 }
1122
1123 static LIST_HEAD(event_subsystems);
1124
1125 static int subsystem_open(struct inode *inode, struct file *filp)
1126 {
1127         struct event_subsystem *system = NULL;
1128         struct ftrace_subsystem_dir *dir = NULL; /* Initialize for gcc */
1129         struct trace_array *tr;
1130         int ret;
1131
1132         if (tracing_is_disabled())
1133                 return -ENODEV;
1134
1135         /* Make sure the system still exists */
1136         mutex_lock(&trace_types_lock);
1137         mutex_lock(&event_mutex);
1138         list_for_each_entry(tr, &ftrace_trace_arrays, list) {
1139                 list_for_each_entry(dir, &tr->systems, list) {
1140                         if (dir == inode->i_private) {
1141                                 /* Don't open systems with no events */
1142                                 if (dir->nr_events) {
1143                                         __get_system_dir(dir);
1144                                         system = dir->subsystem;
1145                                 }
1146                                 goto exit_loop;
1147                         }
1148                 }
1149         }
1150  exit_loop:
1151         mutex_unlock(&event_mutex);
1152         mutex_unlock(&trace_types_lock);
1153
1154         if (!system)
1155                 return -ENODEV;
1156
1157         /* Some versions of gcc think dir can be uninitialized here */
1158         WARN_ON(!dir);
1159
1160         /* Still need to increment the ref count of the system */
1161         if (trace_array_get(tr) < 0) {
1162                 put_system(dir);
1163                 return -ENODEV;
1164         }
1165
1166         ret = tracing_open_generic(inode, filp);
1167         if (ret < 0) {
1168                 trace_array_put(tr);
1169                 put_system(dir);
1170         }
1171
1172         return ret;
1173 }
1174
1175 static int system_tr_open(struct inode *inode, struct file *filp)
1176 {
1177         struct ftrace_subsystem_dir *dir;
1178         struct trace_array *tr = inode->i_private;
1179         int ret;
1180
1181         if (tracing_is_disabled())
1182                 return -ENODEV;
1183
1184         if (trace_array_get(tr) < 0)
1185                 return -ENODEV;
1186
1187         /* Make a temporary dir that has no system but points to tr */
1188         dir = kzalloc(sizeof(*dir), GFP_KERNEL);
1189         if (!dir) {
1190                 trace_array_put(tr);
1191                 return -ENOMEM;
1192         }
1193
1194         dir->tr = tr;
1195
1196         ret = tracing_open_generic(inode, filp);
1197         if (ret < 0) {
1198                 trace_array_put(tr);
1199                 kfree(dir);
1200                 return ret;
1201         }
1202
1203         filp->private_data = dir;
1204
1205         return 0;
1206 }
1207
1208 static int subsystem_release(struct inode *inode, struct file *file)
1209 {
1210         struct ftrace_subsystem_dir *dir = file->private_data;
1211
1212         trace_array_put(dir->tr);
1213
1214         /*
1215          * If dir->subsystem is NULL, then this is a temporary
1216          * descriptor that was made for a trace_array to enable
1217          * all subsystems.
1218          */
1219         if (dir->subsystem)
1220                 put_system(dir);
1221         else
1222                 kfree(dir);
1223
1224         return 0;
1225 }
1226
1227 static ssize_t
1228 subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
1229                       loff_t *ppos)
1230 {
1231         struct ftrace_subsystem_dir *dir = filp->private_data;
1232         struct event_subsystem *system = dir->subsystem;
1233         struct trace_seq *s;
1234         int r;
1235
1236         if (*ppos)
1237                 return 0;
1238
1239         s = kmalloc(sizeof(*s), GFP_KERNEL);
1240         if (!s)
1241                 return -ENOMEM;
1242
1243         trace_seq_init(s);
1244
1245         print_subsystem_event_filter(system, s);
1246         r = simple_read_from_buffer(ubuf, cnt, ppos,
1247                                     s->buffer, trace_seq_used(s));
1248
1249         kfree(s);
1250
1251         return r;
1252 }
1253
1254 static ssize_t
1255 subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
1256                        loff_t *ppos)
1257 {
1258         struct ftrace_subsystem_dir *dir = filp->private_data;
1259         char *buf;
1260         int err;
1261
1262         if (cnt >= PAGE_SIZE)
1263                 return -EINVAL;
1264
1265         buf = (char *)__get_free_page(GFP_TEMPORARY);
1266         if (!buf)
1267                 return -ENOMEM;
1268
1269         if (copy_from_user(buf, ubuf, cnt)) {
1270                 free_page((unsigned long) buf);
1271                 return -EFAULT;
1272         }
1273         buf[cnt] = '\0';
1274
1275         err = apply_subsystem_event_filter(dir, buf);
1276         free_page((unsigned long) buf);
1277         if (err < 0)
1278                 return err;
1279
1280         *ppos += cnt;
1281
1282         return cnt;
1283 }
1284
1285 static ssize_t
1286 show_header(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
1287 {
1288         int (*func)(struct trace_seq *s) = filp->private_data;
1289         struct trace_seq *s;
1290         int r;
1291
1292         if (*ppos)
1293                 return 0;
1294
1295         s = kmalloc(sizeof(*s), GFP_KERNEL);
1296         if (!s)
1297                 return -ENOMEM;
1298
1299         trace_seq_init(s);
1300
1301         func(s);
1302         r = simple_read_from_buffer(ubuf, cnt, ppos,
1303                                     s->buffer, trace_seq_used(s));
1304
1305         kfree(s);
1306
1307         return r;
1308 }
1309
1310 static int ftrace_event_avail_open(struct inode *inode, struct file *file);
1311 static int ftrace_event_set_open(struct inode *inode, struct file *file);
1312 static int ftrace_event_release(struct inode *inode, struct file *file);
1313
1314 static const struct seq_operations show_event_seq_ops = {
1315         .start = t_start,
1316         .next = t_next,
1317         .show = t_show,
1318         .stop = t_stop,
1319 };
1320
1321 static const struct seq_operations show_set_event_seq_ops = {
1322         .start = s_start,
1323         .next = s_next,
1324         .show = t_show,
1325         .stop = t_stop,
1326 };
1327
1328 static const struct file_operations ftrace_avail_fops = {
1329         .open = ftrace_event_avail_open,
1330         .read = seq_read,
1331         .llseek = seq_lseek,
1332         .release = seq_release,
1333 };
1334
1335 static const struct file_operations ftrace_set_event_fops = {
1336         .open = ftrace_event_set_open,
1337         .read = seq_read,
1338         .write = ftrace_event_write,
1339         .llseek = seq_lseek,
1340         .release = ftrace_event_release,
1341 };
1342
1343 static const struct file_operations ftrace_enable_fops = {
1344         .open = tracing_open_generic,
1345         .read = event_enable_read,
1346         .write = event_enable_write,
1347         .llseek = default_llseek,
1348 };
1349
1350 static const struct file_operations ftrace_event_format_fops = {
1351         .open = trace_format_open,
1352         .read = seq_read,
1353         .llseek = seq_lseek,
1354         .release = seq_release,
1355 };
1356
1357 static const struct file_operations ftrace_event_id_fops = {
1358         .read = event_id_read,
1359         .llseek = default_llseek,
1360 };
1361
1362 static const struct file_operations ftrace_event_filter_fops = {
1363         .open = tracing_open_generic,
1364         .read = event_filter_read,
1365         .write = event_filter_write,
1366         .llseek = default_llseek,
1367 };
1368
1369 static const struct file_operations ftrace_subsystem_filter_fops = {
1370         .open = subsystem_open,
1371         .read = subsystem_filter_read,
1372         .write = subsystem_filter_write,
1373         .llseek = default_llseek,
1374         .release = subsystem_release,
1375 };
1376
1377 static const struct file_operations ftrace_system_enable_fops = {
1378         .open = subsystem_open,
1379         .read = system_enable_read,
1380         .write = system_enable_write,
1381         .llseek = default_llseek,
1382         .release = subsystem_release,
1383 };
1384
1385 static const struct file_operations ftrace_tr_enable_fops = {
1386         .open = system_tr_open,
1387         .read = system_enable_read,
1388         .write = system_enable_write,
1389         .llseek = default_llseek,
1390         .release = subsystem_release,
1391 };
1392
1393 static const struct file_operations ftrace_show_header_fops = {
1394         .open = tracing_open_generic,
1395         .read = show_header,
1396         .llseek = default_llseek,
1397 };
1398
1399 static int
1400 ftrace_event_open(struct inode *inode, struct file *file,
1401                   const struct seq_operations *seq_ops)
1402 {
1403         struct seq_file *m;
1404         int ret;
1405
1406         ret = seq_open(file, seq_ops);
1407         if (ret < 0)
1408                 return ret;
1409         m = file->private_data;
1410         /* copy tr over to seq ops */
1411         m->private = inode->i_private;
1412
1413         return ret;
1414 }
1415
1416 static int ftrace_event_release(struct inode *inode, struct file *file)
1417 {
1418         struct trace_array *tr = inode->i_private;
1419
1420         trace_array_put(tr);
1421
1422         return seq_release(inode, file);
1423 }
1424
1425 static int
1426 ftrace_event_avail_open(struct inode *inode, struct file *file)
1427 {
1428         const struct seq_operations *seq_ops = &show_event_seq_ops;
1429
1430         return ftrace_event_open(inode, file, seq_ops);
1431 }
1432
1433 static int
1434 ftrace_event_set_open(struct inode *inode, struct file *file)
1435 {
1436         const struct seq_operations *seq_ops = &show_set_event_seq_ops;
1437         struct trace_array *tr = inode->i_private;
1438         int ret;
1439
1440         if (trace_array_get(tr) < 0)
1441                 return -ENODEV;
1442
1443         if ((file->f_mode & FMODE_WRITE) &&
1444             (file->f_flags & O_TRUNC))
1445                 ftrace_clear_events(tr);
1446
1447         ret = ftrace_event_open(inode, file, seq_ops);
1448         if (ret < 0)
1449                 trace_array_put(tr);
1450         return ret;
1451 }
1452
1453 static struct event_subsystem *
1454 create_new_subsystem(const char *name)
1455 {
1456         struct event_subsystem *system;
1457
1458         /* need to create new entry */
1459         system = kmalloc(sizeof(*system), GFP_KERNEL);
1460         if (!system)
1461                 return NULL;
1462
1463         system->ref_count = 1;
1464
1465         /* Only allocate if dynamic (kprobes and modules) */
1466         if (!core_kernel_data((unsigned long)name)) {
1467                 system->ref_count |= SYSTEM_FL_FREE_NAME;
1468                 system->name = kstrdup(name, GFP_KERNEL);
1469                 if (!system->name)
1470                         goto out_free;
1471         } else
1472                 system->name = name;
1473
1474         system->filter = NULL;
1475
1476         system->filter = kzalloc(sizeof(struct event_filter), GFP_KERNEL);
1477         if (!system->filter)
1478                 goto out_free;
1479
1480         list_add(&system->list, &event_subsystems);
1481
1482         return system;
1483
1484  out_free:
1485         if (system->ref_count & SYSTEM_FL_FREE_NAME)
1486                 kfree(system->name);
1487         kfree(system);
1488         return NULL;
1489 }
1490
1491 static struct dentry *
1492 event_subsystem_dir(struct trace_array *tr, const char *name,
1493                     struct ftrace_event_file *file, struct dentry *parent)
1494 {
1495         struct ftrace_subsystem_dir *dir;
1496         struct event_subsystem *system;
1497         struct dentry *entry;
1498
1499         /* First see if we did not already create this dir */
1500         list_for_each_entry(dir, &tr->systems, list) {
1501                 system = dir->subsystem;
1502                 if (strcmp(system->name, name) == 0) {
1503                         dir->nr_events++;
1504                         file->system = dir;
1505                         return dir->entry;
1506                 }
1507         }
1508
1509         /* Now see if the system itself exists. */
1510         list_for_each_entry(system, &event_subsystems, list) {
1511                 if (strcmp(system->name, name) == 0)
1512                         break;
1513         }
1514         /* Reset system variable when not found */
1515         if (&system->list == &event_subsystems)
1516                 system = NULL;
1517
1518         dir = kmalloc(sizeof(*dir), GFP_KERNEL);
1519         if (!dir)
1520                 goto out_fail;
1521
1522         if (!system) {
1523                 system = create_new_subsystem(name);
1524                 if (!system)
1525                         goto out_free;
1526         } else
1527                 __get_system(system);
1528
1529         dir->entry = tracefs_create_dir(name, parent);
1530         if (!dir->entry) {
1531                 pr_warn("Failed to create system directory %s\n", name);
1532                 __put_system(system);
1533                 goto out_free;
1534         }
1535
1536         dir->tr = tr;
1537         dir->ref_count = 1;
1538         dir->nr_events = 1;
1539         dir->subsystem = system;
1540         file->system = dir;
1541
1542         entry = tracefs_create_file("filter", 0644, dir->entry, dir,
1543                                     &ftrace_subsystem_filter_fops);
1544         if (!entry) {
1545                 kfree(system->filter);
1546                 system->filter = NULL;
1547                 pr_warn("Could not create tracefs '%s/filter' entry\n", name);
1548         }
1549
1550         trace_create_file("enable", 0644, dir->entry, dir,
1551                           &ftrace_system_enable_fops);
1552
1553         list_add(&dir->list, &tr->systems);
1554
1555         return dir->entry;
1556
1557  out_free:
1558         kfree(dir);
1559  out_fail:
1560         /* Only print this message if failed on memory allocation */
1561         if (!dir || !system)
1562                 pr_warn("No memory to create event subsystem %s\n", name);
1563         return NULL;
1564 }
1565
1566 static int
1567 event_create_dir(struct dentry *parent, struct ftrace_event_file *file)
1568 {
1569         struct ftrace_event_call *call = file->event_call;
1570         struct trace_array *tr = file->tr;
1571         struct list_head *head;
1572         struct dentry *d_events;
1573         const char *name;
1574         int ret;
1575
1576         /*
1577          * If the trace point header did not define TRACE_SYSTEM
1578          * then the system would be called "TRACE_SYSTEM".
1579          */
1580         if (strcmp(call->class->system, TRACE_SYSTEM) != 0) {
1581                 d_events = event_subsystem_dir(tr, call->class->system, file, parent);
1582                 if (!d_events)
1583                         return -ENOMEM;
1584         } else
1585                 d_events = parent;
1586
1587         name = ftrace_event_name(call);
1588         file->dir = tracefs_create_dir(name, d_events);
1589         if (!file->dir) {
1590                 pr_warn("Could not create tracefs '%s' directory\n", name);
1591                 return -1;
1592         }
1593
1594         if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE))
1595                 trace_create_file("enable", 0644, file->dir, file,
1596                                   &ftrace_enable_fops);
1597
1598 #ifdef CONFIG_PERF_EVENTS
1599         if (call->event.type && call->class->reg)
1600                 trace_create_file("id", 0444, file->dir,
1601                                   (void *)(long)call->event.type,
1602                                   &ftrace_event_id_fops);
1603 #endif
1604
1605         /*
1606          * Other events may have the same class. Only update
1607          * the fields if they are not already defined.
1608          */
1609         head = trace_get_fields(call);
1610         if (list_empty(head)) {
1611                 ret = call->class->define_fields(call);
1612                 if (ret < 0) {
1613                         pr_warn("Could not initialize trace point events/%s\n",
1614                                 name);
1615                         return -1;
1616                 }
1617         }
1618         trace_create_file("filter", 0644, file->dir, file,
1619                           &ftrace_event_filter_fops);
1620
1621         trace_create_file("trigger", 0644, file->dir, file,
1622                           &event_trigger_fops);
1623
1624         trace_create_file("format", 0444, file->dir, call,
1625                           &ftrace_event_format_fops);
1626
1627         return 0;
1628 }
1629
1630 static void remove_event_from_tracers(struct ftrace_event_call *call)
1631 {
1632         struct ftrace_event_file *file;
1633         struct trace_array *tr;
1634
1635         do_for_each_event_file_safe(tr, file) {
1636                 if (file->event_call != call)
1637                         continue;
1638
1639                 remove_event_file_dir(file);
1640                 /*
1641                  * The do_for_each_event_file_safe() is
1642                  * a double loop. After finding the call for this
1643                  * trace_array, we use break to jump to the next
1644                  * trace_array.
1645                  */
1646                 break;
1647         } while_for_each_event_file();
1648 }
1649
1650 static void event_remove(struct ftrace_event_call *call)
1651 {
1652         struct trace_array *tr;
1653         struct ftrace_event_file *file;
1654
1655         do_for_each_event_file(tr, file) {
1656                 if (file->event_call != call)
1657                         continue;
1658                 ftrace_event_enable_disable(file, 0);
1659                 /*
1660                  * The do_for_each_event_file() is
1661                  * a double loop. After finding the call for this
1662                  * trace_array, we use break to jump to the next
1663                  * trace_array.
1664                  */
1665                 break;
1666         } while_for_each_event_file();
1667
1668         if (call->event.funcs)
1669                 __unregister_ftrace_event(&call->event);
1670         remove_event_from_tracers(call);
1671         list_del(&call->list);
1672 }
1673
1674 static int event_init(struct ftrace_event_call *call)
1675 {
1676         int ret = 0;
1677         const char *name;
1678
1679         name = ftrace_event_name(call);
1680         if (WARN_ON(!name))
1681                 return -EINVAL;
1682
1683         if (call->class->raw_init) {
1684                 ret = call->class->raw_init(call);
1685                 if (ret < 0 && ret != -ENOSYS)
1686                         pr_warn("Could not initialize trace events/%s\n", name);
1687         }
1688
1689         return ret;
1690 }
1691
1692 static int
1693 __register_event(struct ftrace_event_call *call, struct module *mod)
1694 {
1695         int ret;
1696
1697         ret = event_init(call);
1698         if (ret < 0)
1699                 return ret;
1700
1701         list_add(&call->list, &ftrace_events);
1702         call->mod = mod;
1703
1704         return 0;
1705 }
1706
1707 static char *enum_replace(char *ptr, struct trace_enum_map *map, int len)
1708 {
1709         int rlen;
1710         int elen;
1711
1712         /* Find the length of the enum value as a string */
1713         elen = snprintf(ptr, 0, "%ld", map->enum_value);
1714         /* Make sure there's enough room to replace the string with the value */
1715         if (len < elen)
1716                 return NULL;
1717
1718         snprintf(ptr, elen + 1, "%ld", map->enum_value);
1719
1720         /* Get the rest of the string of ptr */
1721         rlen = strlen(ptr + len);
1722         memmove(ptr + elen, ptr + len, rlen);
1723         /* Make sure we end the new string */
1724         ptr[elen + rlen] = 0;
1725
1726         return ptr + elen;
1727 }
1728
1729 static void update_event_printk(struct ftrace_event_call *call,
1730                                 struct trace_enum_map *map)
1731 {
1732         char *ptr;
1733         int quote = 0;
1734         int len = strlen(map->enum_string);
1735
1736         for (ptr = call->print_fmt; *ptr; ptr++) {
1737                 if (*ptr == '\\') {
1738                         ptr++;
1739                         /* paranoid */
1740                         if (!*ptr)
1741                                 break;
1742                         continue;
1743                 }
1744                 if (*ptr == '"') {
1745                         quote ^= 1;
1746                         continue;
1747                 }
1748                 if (quote)
1749                         continue;
1750                 if (isdigit(*ptr)) {
1751                         /* skip numbers */
1752                         do {
1753                                 ptr++;
1754                                 /* Check for alpha chars like ULL */
1755                         } while (isalnum(*ptr));
1756                         /*
1757                          * A number must have some kind of delimiter after
1758                          * it, and we can ignore that too.
1759                          */
1760                         continue;
1761                 }
1762                 if (isalpha(*ptr) || *ptr == '_') {
1763                         if (strncmp(map->enum_string, ptr, len) == 0 &&
1764                             !isalnum(ptr[len]) && ptr[len] != '_') {
1765                                 ptr = enum_replace(ptr, map, len);
1766                                 /* Hmm, enum string smaller than value */
1767                                 if (WARN_ON_ONCE(!ptr))
1768                                         return;
1769                                 /*
1770                                  * No need to decrement here, as enum_replace()
1771                                  * returns the pointer to the character passed
1772                                  * the enum, and two enums can not be placed
1773                                  * back to back without something in between.
1774                                  * We can skip that something in between.
1775                                  */
1776                                 continue;
1777                         }
1778                 skip_more:
1779                         do {
1780                                 ptr++;
1781                         } while (isalnum(*ptr) || *ptr == '_');
1782                         /*
1783                          * If what comes after this variable is a '.' or
1784                          * '->' then we can continue to ignore that string.
1785                          */
1786                         if (*ptr == '.' || (ptr[0] == '-' && ptr[1] == '>')) {
1787                                 ptr += *ptr == '.' ? 1 : 2;
1788                                 goto skip_more;
1789                         }
1790                         /*
1791                          * Once again, we can skip the delimiter that came
1792                          * after the string.
1793                          */
1794                         continue;
1795                 }
1796         }
1797 }
1798
1799 void trace_event_enum_update(struct trace_enum_map **map, int len)
1800 {
1801         struct ftrace_event_call *call, *p;
1802         const char *last_system = NULL;
1803         int last_i;
1804         int i;
1805
1806         down_write(&trace_event_sem);
1807         list_for_each_entry_safe(call, p, &ftrace_events, list) {
1808                 /* events are usually grouped together with systems */
1809                 if (!last_system || call->class->system != last_system) {
1810                         last_i = 0;
1811                         last_system = call->class->system;
1812                 }
1813
1814                 for (i = last_i; i < len; i++) {
1815                         if (call->class->system == map[i]->system) {
1816                                 /* Save the first system if need be */
1817                                 if (!last_i)
1818                                         last_i = i;
1819                                 update_event_printk(call, map[i]);
1820                         }
1821                 }
1822         }
1823         up_write(&trace_event_sem);
1824 }
1825
1826 static struct ftrace_event_file *
1827 trace_create_new_event(struct ftrace_event_call *call,
1828                        struct trace_array *tr)
1829 {
1830         struct ftrace_event_file *file;
1831
1832         file = kmem_cache_alloc(file_cachep, GFP_TRACE);
1833         if (!file)
1834                 return NULL;
1835
1836         file->event_call = call;
1837         file->tr = tr;
1838         atomic_set(&file->sm_ref, 0);
1839         atomic_set(&file->tm_ref, 0);
1840         INIT_LIST_HEAD(&file->triggers);
1841         list_add(&file->list, &tr->events);
1842
1843         return file;
1844 }
1845
1846 /* Add an event to a trace directory */
1847 static int
1848 __trace_add_new_event(struct ftrace_event_call *call, struct trace_array *tr)
1849 {
1850         struct ftrace_event_file *file;
1851
1852         file = trace_create_new_event(call, tr);
1853         if (!file)
1854                 return -ENOMEM;
1855
1856         return event_create_dir(tr->event_dir, file);
1857 }
1858
1859 /*
1860  * Just create a decriptor for early init. A descriptor is required
1861  * for enabling events at boot. We want to enable events before
1862  * the filesystem is initialized.
1863  */
1864 static __init int
1865 __trace_early_add_new_event(struct ftrace_event_call *call,
1866                             struct trace_array *tr)
1867 {
1868         struct ftrace_event_file *file;
1869
1870         file = trace_create_new_event(call, tr);
1871         if (!file)
1872                 return -ENOMEM;
1873
1874         return 0;
1875 }
1876
1877 struct ftrace_module_file_ops;
1878 static void __add_event_to_tracers(struct ftrace_event_call *call);
1879
1880 /* Add an additional event_call dynamically */
1881 int trace_add_event_call(struct ftrace_event_call *call)
1882 {
1883         int ret;
1884         mutex_lock(&trace_types_lock);
1885         mutex_lock(&event_mutex);
1886
1887         ret = __register_event(call, NULL);
1888         if (ret >= 0)
1889                 __add_event_to_tracers(call);
1890
1891         mutex_unlock(&event_mutex);
1892         mutex_unlock(&trace_types_lock);
1893         return ret;
1894 }
1895
1896 /*
1897  * Must be called under locking of trace_types_lock, event_mutex and
1898  * trace_event_sem.
1899  */
1900 static void __trace_remove_event_call(struct ftrace_event_call *call)
1901 {
1902         event_remove(call);
1903         trace_destroy_fields(call);
1904         free_event_filter(call->filter);
1905         call->filter = NULL;
1906 }
1907
1908 static int probe_remove_event_call(struct ftrace_event_call *call)
1909 {
1910         struct trace_array *tr;
1911         struct ftrace_event_file *file;
1912
1913 #ifdef CONFIG_PERF_EVENTS
1914         if (call->perf_refcount)
1915                 return -EBUSY;
1916 #endif
1917         do_for_each_event_file(tr, file) {
1918                 if (file->event_call != call)
1919                         continue;
1920                 /*
1921                  * We can't rely on ftrace_event_enable_disable(enable => 0)
1922                  * we are going to do, FTRACE_EVENT_FL_SOFT_MODE can suppress
1923                  * TRACE_REG_UNREGISTER.
1924                  */
1925                 if (file->flags & FTRACE_EVENT_FL_ENABLED)
1926                         return -EBUSY;
1927                 /*
1928                  * The do_for_each_event_file_safe() is
1929                  * a double loop. After finding the call for this
1930                  * trace_array, we use break to jump to the next
1931                  * trace_array.
1932                  */
1933                 break;
1934         } while_for_each_event_file();
1935
1936         __trace_remove_event_call(call);
1937
1938         return 0;
1939 }
1940
1941 /* Remove an event_call */
1942 int trace_remove_event_call(struct ftrace_event_call *call)
1943 {
1944         int ret;
1945
1946         mutex_lock(&trace_types_lock);
1947         mutex_lock(&event_mutex);
1948         down_write(&trace_event_sem);
1949         ret = probe_remove_event_call(call);
1950         up_write(&trace_event_sem);
1951         mutex_unlock(&event_mutex);
1952         mutex_unlock(&trace_types_lock);
1953
1954         return ret;
1955 }
1956
1957 #define for_each_event(event, start, end)                       \
1958         for (event = start;                                     \
1959              (unsigned long)event < (unsigned long)end;         \
1960              event++)
1961
1962 #ifdef CONFIG_MODULES
1963
1964 static void trace_module_add_events(struct module *mod)
1965 {
1966         struct ftrace_event_call **call, **start, **end;
1967
1968         if (!mod->num_trace_events)
1969                 return;
1970
1971         /* Don't add infrastructure for mods without tracepoints */
1972         if (trace_module_has_bad_taint(mod)) {
1973                 pr_err("%s: module has bad taint, not creating trace events\n",
1974                        mod->name);
1975                 return;
1976         }
1977
1978         start = mod->trace_events;
1979         end = mod->trace_events + mod->num_trace_events;
1980
1981         for_each_event(call, start, end) {
1982                 __register_event(*call, mod);
1983                 __add_event_to_tracers(*call);
1984         }
1985 }
1986
1987 static void trace_module_remove_events(struct module *mod)
1988 {
1989         struct ftrace_event_call *call, *p;
1990         bool clear_trace = false;
1991
1992         down_write(&trace_event_sem);
1993         list_for_each_entry_safe(call, p, &ftrace_events, list) {
1994                 if (call->mod == mod) {
1995                         if (call->flags & TRACE_EVENT_FL_WAS_ENABLED)
1996                                 clear_trace = true;
1997                         __trace_remove_event_call(call);
1998                 }
1999         }
2000         up_write(&trace_event_sem);
2001
2002         /*
2003          * It is safest to reset the ring buffer if the module being unloaded
2004          * registered any events that were used. The only worry is if
2005          * a new module gets loaded, and takes on the same id as the events
2006          * of this module. When printing out the buffer, traced events left
2007          * over from this module may be passed to the new module events and
2008          * unexpected results may occur.
2009          */
2010         if (clear_trace)
2011                 tracing_reset_all_online_cpus();
2012 }
2013
2014 static int trace_module_notify(struct notifier_block *self,
2015                                unsigned long val, void *data)
2016 {
2017         struct module *mod = data;
2018
2019         mutex_lock(&trace_types_lock);
2020         mutex_lock(&event_mutex);
2021         switch (val) {
2022         case MODULE_STATE_COMING:
2023                 trace_module_add_events(mod);
2024                 break;
2025         case MODULE_STATE_GOING:
2026                 trace_module_remove_events(mod);
2027                 break;
2028         }
2029         mutex_unlock(&event_mutex);
2030         mutex_unlock(&trace_types_lock);
2031
2032         return 0;
2033 }
2034
2035 static struct notifier_block trace_module_nb = {
2036         .notifier_call = trace_module_notify,
2037         .priority = 1, /* higher than trace.c module notify */
2038 };
2039 #endif /* CONFIG_MODULES */
2040
2041 /* Create a new event directory structure for a trace directory. */
2042 static void
2043 __trace_add_event_dirs(struct trace_array *tr)
2044 {
2045         struct ftrace_event_call *call;
2046         int ret;
2047
2048         list_for_each_entry(call, &ftrace_events, list) {
2049                 ret = __trace_add_new_event(call, tr);
2050                 if (ret < 0)
2051                         pr_warn("Could not create directory for event %s\n",
2052                                 ftrace_event_name(call));
2053         }
2054 }
2055
2056 struct ftrace_event_file *
2057 find_event_file(struct trace_array *tr, const char *system,  const char *event)
2058 {
2059         struct ftrace_event_file *file;
2060         struct ftrace_event_call *call;
2061         const char *name;
2062
2063         list_for_each_entry(file, &tr->events, list) {
2064
2065                 call = file->event_call;
2066                 name = ftrace_event_name(call);
2067
2068                 if (!name || !call->class || !call->class->reg)
2069                         continue;
2070
2071                 if (call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)
2072                         continue;
2073
2074                 if (strcmp(event, name) == 0 &&
2075                     strcmp(system, call->class->system) == 0)
2076                         return file;
2077         }
2078         return NULL;
2079 }
2080
2081 #ifdef CONFIG_DYNAMIC_FTRACE
2082
2083 /* Avoid typos */
2084 #define ENABLE_EVENT_STR        "enable_event"
2085 #define DISABLE_EVENT_STR       "disable_event"
2086
2087 struct event_probe_data {
2088         struct ftrace_event_file        *file;
2089         unsigned long                   count;
2090         int                             ref;
2091         bool                            enable;
2092 };
2093
2094 static void
2095 event_enable_probe(unsigned long ip, unsigned long parent_ip, void **_data)
2096 {
2097         struct event_probe_data **pdata = (struct event_probe_data **)_data;
2098         struct event_probe_data *data = *pdata;
2099
2100         if (!data)
2101                 return;
2102
2103         if (data->enable)
2104                 clear_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &data->file->flags);
2105         else
2106                 set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &data->file->flags);
2107 }
2108
2109 static void
2110 event_enable_count_probe(unsigned long ip, unsigned long parent_ip, void **_data)
2111 {
2112         struct event_probe_data **pdata = (struct event_probe_data **)_data;
2113         struct event_probe_data *data = *pdata;
2114
2115         if (!data)
2116                 return;
2117
2118         if (!data->count)
2119                 return;
2120
2121         /* Skip if the event is in a state we want to switch to */
2122         if (data->enable == !(data->file->flags & FTRACE_EVENT_FL_SOFT_DISABLED))
2123                 return;
2124
2125         if (data->count != -1)
2126                 (data->count)--;
2127
2128         event_enable_probe(ip, parent_ip, _data);
2129 }
2130
2131 static int
2132 event_enable_print(struct seq_file *m, unsigned long ip,
2133                       struct ftrace_probe_ops *ops, void *_data)
2134 {
2135         struct event_probe_data *data = _data;
2136
2137         seq_printf(m, "%ps:", (void *)ip);
2138
2139         seq_printf(m, "%s:%s:%s",
2140                    data->enable ? ENABLE_EVENT_STR : DISABLE_EVENT_STR,
2141                    data->file->event_call->class->system,
2142                    ftrace_event_name(data->file->event_call));
2143
2144         if (data->count == -1)
2145                 seq_puts(m, ":unlimited\n");
2146         else
2147                 seq_printf(m, ":count=%ld\n", data->count);
2148
2149         return 0;
2150 }
2151
2152 static int
2153 event_enable_init(struct ftrace_probe_ops *ops, unsigned long ip,
2154                   void **_data)
2155 {
2156         struct event_probe_data **pdata = (struct event_probe_data **)_data;
2157         struct event_probe_data *data = *pdata;
2158
2159         data->ref++;
2160         return 0;
2161 }
2162
2163 static void
2164 event_enable_free(struct ftrace_probe_ops *ops, unsigned long ip,
2165                   void **_data)
2166 {
2167         struct event_probe_data **pdata = (struct event_probe_data **)_data;
2168         struct event_probe_data *data = *pdata;
2169
2170         if (WARN_ON_ONCE(data->ref <= 0))
2171                 return;
2172
2173         data->ref--;
2174         if (!data->ref) {
2175                 /* Remove the SOFT_MODE flag */
2176                 __ftrace_event_enable_disable(data->file, 0, 1);
2177                 module_put(data->file->event_call->mod);
2178                 kfree(data);
2179         }
2180         *pdata = NULL;
2181 }
2182
2183 static struct ftrace_probe_ops event_enable_probe_ops = {
2184         .func                   = event_enable_probe,
2185         .print                  = event_enable_print,
2186         .init                   = event_enable_init,
2187         .free                   = event_enable_free,
2188 };
2189
2190 static struct ftrace_probe_ops event_enable_count_probe_ops = {
2191         .func                   = event_enable_count_probe,
2192         .print                  = event_enable_print,
2193         .init                   = event_enable_init,
2194         .free                   = event_enable_free,
2195 };
2196
2197 static struct ftrace_probe_ops event_disable_probe_ops = {
2198         .func                   = event_enable_probe,
2199         .print                  = event_enable_print,
2200         .init                   = event_enable_init,
2201         .free                   = event_enable_free,
2202 };
2203
2204 static struct ftrace_probe_ops event_disable_count_probe_ops = {
2205         .func                   = event_enable_count_probe,
2206         .print                  = event_enable_print,
2207         .init                   = event_enable_init,
2208         .free                   = event_enable_free,
2209 };
2210
2211 static int
2212 event_enable_func(struct ftrace_hash *hash,
2213                   char *glob, char *cmd, char *param, int enabled)
2214 {
2215         struct trace_array *tr = top_trace_array();
2216         struct ftrace_event_file *file;
2217         struct ftrace_probe_ops *ops;
2218         struct event_probe_data *data;
2219         const char *system;
2220         const char *event;
2221         char *number;
2222         bool enable;
2223         int ret;
2224
2225         if (!tr)
2226                 return -ENODEV;
2227
2228         /* hash funcs only work with set_ftrace_filter */
2229         if (!enabled || !param)
2230                 return -EINVAL;
2231
2232         system = strsep(&param, ":");
2233         if (!param)
2234                 return -EINVAL;
2235
2236         event = strsep(&param, ":");
2237
2238         mutex_lock(&event_mutex);
2239
2240         ret = -EINVAL;
2241         file = find_event_file(tr, system, event);
2242         if (!file)
2243                 goto out;
2244
2245         enable = strcmp(cmd, ENABLE_EVENT_STR) == 0;
2246
2247         if (enable)
2248                 ops = param ? &event_enable_count_probe_ops : &event_enable_probe_ops;
2249         else
2250                 ops = param ? &event_disable_count_probe_ops : &event_disable_probe_ops;
2251
2252         if (glob[0] == '!') {
2253                 unregister_ftrace_function_probe_func(glob+1, ops);
2254                 ret = 0;
2255                 goto out;
2256         }
2257
2258         ret = -ENOMEM;
2259         data = kzalloc(sizeof(*data), GFP_KERNEL);
2260         if (!data)
2261                 goto out;
2262
2263         data->enable = enable;
2264         data->count = -1;
2265         data->file = file;
2266
2267         if (!param)
2268                 goto out_reg;
2269
2270         number = strsep(&param, ":");
2271
2272         ret = -EINVAL;
2273         if (!strlen(number))
2274                 goto out_free;
2275
2276         /*
2277          * We use the callback data field (which is a pointer)
2278          * as our counter.
2279          */
2280         ret = kstrtoul(number, 0, &data->count);
2281         if (ret)
2282                 goto out_free;
2283
2284  out_reg:
2285         /* Don't let event modules unload while probe registered */
2286         ret = try_module_get(file->event_call->mod);
2287         if (!ret) {
2288                 ret = -EBUSY;
2289                 goto out_free;
2290         }
2291
2292         ret = __ftrace_event_enable_disable(file, 1, 1);
2293         if (ret < 0)
2294                 goto out_put;
2295         ret = register_ftrace_function_probe(glob, ops, data);
2296         /*
2297          * The above returns on success the # of functions enabled,
2298          * but if it didn't find any functions it returns zero.
2299          * Consider no functions a failure too.
2300          */
2301         if (!ret) {
2302                 ret = -ENOENT;
2303                 goto out_disable;
2304         } else if (ret < 0)
2305                 goto out_disable;
2306         /* Just return zero, not the number of enabled functions */
2307         ret = 0;
2308  out:
2309         mutex_unlock(&event_mutex);
2310         return ret;
2311
2312  out_disable:
2313         __ftrace_event_enable_disable(file, 0, 1);
2314  out_put:
2315         module_put(file->event_call->mod);
2316  out_free:
2317         kfree(data);
2318         goto out;
2319 }
2320
2321 static struct ftrace_func_command event_enable_cmd = {
2322         .name                   = ENABLE_EVENT_STR,
2323         .func                   = event_enable_func,
2324 };
2325
2326 static struct ftrace_func_command event_disable_cmd = {
2327         .name                   = DISABLE_EVENT_STR,
2328         .func                   = event_enable_func,
2329 };
2330
2331 static __init int register_event_cmds(void)
2332 {
2333         int ret;
2334
2335         ret = register_ftrace_command(&event_enable_cmd);
2336         if (WARN_ON(ret < 0))
2337                 return ret;
2338         ret = register_ftrace_command(&event_disable_cmd);
2339         if (WARN_ON(ret < 0))
2340                 unregister_ftrace_command(&event_enable_cmd);
2341         return ret;
2342 }
2343 #else
2344 static inline int register_event_cmds(void) { return 0; }
2345 #endif /* CONFIG_DYNAMIC_FTRACE */
2346
2347 /*
2348  * The top level array has already had its ftrace_event_file
2349  * descriptors created in order to allow for early events to
2350  * be recorded. This function is called after the tracefs has been
2351  * initialized, and we now have to create the files associated
2352  * to the events.
2353  */
2354 static __init void
2355 __trace_early_add_event_dirs(struct trace_array *tr)
2356 {
2357         struct ftrace_event_file *file;
2358         int ret;
2359
2360
2361         list_for_each_entry(file, &tr->events, list) {
2362                 ret = event_create_dir(tr->event_dir, file);
2363                 if (ret < 0)
2364                         pr_warn("Could not create directory for event %s\n",
2365                                 ftrace_event_name(file->event_call));
2366         }
2367 }
2368
2369 /*
2370  * For early boot up, the top trace array requires to have
2371  * a list of events that can be enabled. This must be done before
2372  * the filesystem is set up in order to allow events to be traced
2373  * early.
2374  */
2375 static __init void
2376 __trace_early_add_events(struct trace_array *tr)
2377 {
2378         struct ftrace_event_call *call;
2379         int ret;
2380
2381         list_for_each_entry(call, &ftrace_events, list) {
2382                 /* Early boot up should not have any modules loaded */
2383                 if (WARN_ON_ONCE(call->mod))
2384                         continue;
2385
2386                 ret = __trace_early_add_new_event(call, tr);
2387                 if (ret < 0)
2388                         pr_warn("Could not create early event %s\n",
2389                                 ftrace_event_name(call));
2390         }
2391 }
2392
2393 /* Remove the event directory structure for a trace directory. */
2394 static void
2395 __trace_remove_event_dirs(struct trace_array *tr)
2396 {
2397         struct ftrace_event_file *file, *next;
2398
2399         list_for_each_entry_safe(file, next, &tr->events, list)
2400                 remove_event_file_dir(file);
2401 }
2402
2403 static void __add_event_to_tracers(struct ftrace_event_call *call)
2404 {
2405         struct trace_array *tr;
2406
2407         list_for_each_entry(tr, &ftrace_trace_arrays, list)
2408                 __trace_add_new_event(call, tr);
2409 }
2410
2411 extern struct ftrace_event_call *__start_ftrace_events[];
2412 extern struct ftrace_event_call *__stop_ftrace_events[];
2413
2414 static char bootup_event_buf[COMMAND_LINE_SIZE] __initdata;
2415
2416 static __init int setup_trace_event(char *str)
2417 {
2418         strlcpy(bootup_event_buf, str, COMMAND_LINE_SIZE);
2419         ring_buffer_expanded = true;
2420         tracing_selftest_disabled = true;
2421
2422         return 1;
2423 }
2424 __setup("trace_event=", setup_trace_event);
2425
2426 /* Expects to have event_mutex held when called */
2427 static int
2428 create_event_toplevel_files(struct dentry *parent, struct trace_array *tr)
2429 {
2430         struct dentry *d_events;
2431         struct dentry *entry;
2432
2433         entry = tracefs_create_file("set_event", 0644, parent,
2434                                     tr, &ftrace_set_event_fops);
2435         if (!entry) {
2436                 pr_warn("Could not create tracefs 'set_event' entry\n");
2437                 return -ENOMEM;
2438         }
2439
2440         d_events = tracefs_create_dir("events", parent);
2441         if (!d_events) {
2442                 pr_warn("Could not create tracefs 'events' directory\n");
2443                 return -ENOMEM;
2444         }
2445
2446         /* ring buffer internal formats */
2447         trace_create_file("header_page", 0444, d_events,
2448                           ring_buffer_print_page_header,
2449                           &ftrace_show_header_fops);
2450
2451         trace_create_file("header_event", 0444, d_events,
2452                           ring_buffer_print_entry_header,
2453                           &ftrace_show_header_fops);
2454
2455         trace_create_file("enable", 0644, d_events,
2456                           tr, &ftrace_tr_enable_fops);
2457
2458         tr->event_dir = d_events;
2459
2460         return 0;
2461 }
2462
2463 /**
2464  * event_trace_add_tracer - add a instance of a trace_array to events
2465  * @parent: The parent dentry to place the files/directories for events in
2466  * @tr: The trace array associated with these events
2467  *
2468  * When a new instance is created, it needs to set up its events
2469  * directory, as well as other files associated with events. It also
2470  * creates the event hierachry in the @parent/events directory.
2471  *
2472  * Returns 0 on success.
2473  */
2474 int event_trace_add_tracer(struct dentry *parent, struct trace_array *tr)
2475 {
2476         int ret;
2477
2478         mutex_lock(&event_mutex);
2479
2480         ret = create_event_toplevel_files(parent, tr);
2481         if (ret)
2482                 goto out_unlock;
2483
2484         down_write(&trace_event_sem);
2485         __trace_add_event_dirs(tr);
2486         up_write(&trace_event_sem);
2487
2488  out_unlock:
2489         mutex_unlock(&event_mutex);
2490
2491         return ret;
2492 }
2493
2494 /*
2495  * The top trace array already had its file descriptors created.
2496  * Now the files themselves need to be created.
2497  */
2498 static __init int
2499 early_event_add_tracer(struct dentry *parent, struct trace_array *tr)
2500 {
2501         int ret;
2502
2503         mutex_lock(&event_mutex);
2504
2505         ret = create_event_toplevel_files(parent, tr);
2506         if (ret)
2507                 goto out_unlock;
2508
2509         down_write(&trace_event_sem);
2510         __trace_early_add_event_dirs(tr);
2511         up_write(&trace_event_sem);
2512
2513  out_unlock:
2514         mutex_unlock(&event_mutex);
2515
2516         return ret;
2517 }
2518
2519 int event_trace_del_tracer(struct trace_array *tr)
2520 {
2521         mutex_lock(&event_mutex);
2522
2523         /* Disable any event triggers and associated soft-disabled events */
2524         clear_event_triggers(tr);
2525
2526         /* Disable any running events */
2527         __ftrace_set_clr_event_nolock(tr, NULL, NULL, NULL, 0);
2528
2529         /* Access to events are within rcu_read_lock_sched() */
2530         synchronize_sched();
2531
2532         down_write(&trace_event_sem);
2533         __trace_remove_event_dirs(tr);
2534         tracefs_remove_recursive(tr->event_dir);
2535         up_write(&trace_event_sem);
2536
2537         tr->event_dir = NULL;
2538
2539         mutex_unlock(&event_mutex);
2540
2541         return 0;
2542 }
2543
2544 static __init int event_trace_memsetup(void)
2545 {
2546         field_cachep = KMEM_CACHE(ftrace_event_field, SLAB_PANIC);
2547         file_cachep = KMEM_CACHE(ftrace_event_file, SLAB_PANIC);
2548         return 0;
2549 }
2550
2551 static __init void
2552 early_enable_events(struct trace_array *tr, bool disable_first)
2553 {
2554         char *buf = bootup_event_buf;
2555         char *token;
2556         int ret;
2557
2558         while (true) {
2559                 token = strsep(&buf, ",");
2560
2561                 if (!token)
2562                         break;
2563                 if (!*token)
2564                         continue;
2565
2566                 /* Restarting syscalls requires that we stop them first */
2567                 if (disable_first)
2568                         ftrace_set_clr_event(tr, token, 0);
2569
2570                 ret = ftrace_set_clr_event(tr, token, 1);
2571                 if (ret)
2572                         pr_warn("Failed to enable trace event: %s\n", token);
2573
2574                 /* Put back the comma to allow this to be called again */
2575                 if (buf)
2576                         *(buf - 1) = ',';
2577         }
2578 }
2579
2580 static __init int event_trace_enable(void)
2581 {
2582         struct trace_array *tr = top_trace_array();
2583         struct ftrace_event_call **iter, *call;
2584         int ret;
2585
2586         if (!tr)
2587                 return -ENODEV;
2588
2589         for_each_event(iter, __start_ftrace_events, __stop_ftrace_events) {
2590
2591                 call = *iter;
2592                 ret = event_init(call);
2593                 if (!ret)
2594                         list_add(&call->list, &ftrace_events);
2595         }
2596
2597         /*
2598          * We need the top trace array to have a working set of trace
2599          * points at early init, before the debug files and directories
2600          * are created. Create the file entries now, and attach them
2601          * to the actual file dentries later.
2602          */
2603         __trace_early_add_events(tr);
2604
2605         early_enable_events(tr, false);
2606
2607         trace_printk_start_comm();
2608
2609         register_event_cmds();
2610
2611         register_trigger_cmds();
2612
2613         return 0;
2614 }
2615
2616 /*
2617  * event_trace_enable() is called from trace_event_init() first to
2618  * initialize events and perhaps start any events that are on the
2619  * command line. Unfortunately, there are some events that will not
2620  * start this early, like the system call tracepoints that need
2621  * to set the TIF_SYSCALL_TRACEPOINT flag of pid 1. But event_trace_enable()
2622  * is called before pid 1 starts, and this flag is never set, making
2623  * the syscall tracepoint never get reached, but the event is enabled
2624  * regardless (and not doing anything).
2625  */
2626 static __init int event_trace_enable_again(void)
2627 {
2628         struct trace_array *tr;
2629
2630         tr = top_trace_array();
2631         if (!tr)
2632                 return -ENODEV;
2633
2634         early_enable_events(tr, true);
2635
2636         return 0;
2637 }
2638
2639 early_initcall(event_trace_enable_again);
2640
2641 static __init int event_trace_init(void)
2642 {
2643         struct trace_array *tr;
2644         struct dentry *d_tracer;
2645         struct dentry *entry;
2646         int ret;
2647
2648         tr = top_trace_array();
2649         if (!tr)
2650                 return -ENODEV;
2651
2652         d_tracer = tracing_init_dentry();
2653         if (IS_ERR(d_tracer))
2654                 return 0;
2655
2656         entry = tracefs_create_file("available_events", 0444, d_tracer,
2657                                     tr, &ftrace_avail_fops);
2658         if (!entry)
2659                 pr_warn("Could not create tracefs 'available_events' entry\n");
2660
2661         if (trace_define_common_fields())
2662                 pr_warn("tracing: Failed to allocate common fields");
2663
2664         ret = early_event_add_tracer(d_tracer, tr);
2665         if (ret)
2666                 return ret;
2667
2668 #ifdef CONFIG_MODULES
2669         ret = register_module_notifier(&trace_module_nb);
2670         if (ret)
2671                 pr_warn("Failed to register trace events module notifier\n");
2672 #endif
2673         return 0;
2674 }
2675
2676 void __init trace_event_init(void)
2677 {
2678         event_trace_memsetup();
2679         init_ftrace_syscalls();
2680         event_trace_enable();
2681 }
2682
2683 fs_initcall(event_trace_init);
2684
2685 #ifdef CONFIG_FTRACE_STARTUP_TEST
2686
2687 static DEFINE_SPINLOCK(test_spinlock);
2688 static DEFINE_SPINLOCK(test_spinlock_irq);
2689 static DEFINE_MUTEX(test_mutex);
2690
2691 static __init void test_work(struct work_struct *dummy)
2692 {
2693         spin_lock(&test_spinlock);
2694         spin_lock_irq(&test_spinlock_irq);
2695         udelay(1);
2696         spin_unlock_irq(&test_spinlock_irq);
2697         spin_unlock(&test_spinlock);
2698
2699         mutex_lock(&test_mutex);
2700         msleep(1);
2701         mutex_unlock(&test_mutex);
2702 }
2703
2704 static __init int event_test_thread(void *unused)
2705 {
2706         void *test_malloc;
2707
2708         test_malloc = kmalloc(1234, GFP_KERNEL);
2709         if (!test_malloc)
2710                 pr_info("failed to kmalloc\n");
2711
2712         schedule_on_each_cpu(test_work);
2713
2714         kfree(test_malloc);
2715
2716         set_current_state(TASK_INTERRUPTIBLE);
2717         while (!kthread_should_stop()) {
2718                 schedule();
2719                 set_current_state(TASK_INTERRUPTIBLE);
2720         }
2721         __set_current_state(TASK_RUNNING);
2722
2723         return 0;
2724 }
2725
2726 /*
2727  * Do various things that may trigger events.
2728  */
2729 static __init void event_test_stuff(void)
2730 {
2731         struct task_struct *test_thread;
2732
2733         test_thread = kthread_run(event_test_thread, NULL, "test-events");
2734         msleep(1);
2735         kthread_stop(test_thread);
2736 }
2737
2738 /*
2739  * For every trace event defined, we will test each trace point separately,
2740  * and then by groups, and finally all trace points.
2741  */
2742 static __init void event_trace_self_tests(void)
2743 {
2744         struct ftrace_subsystem_dir *dir;
2745         struct ftrace_event_file *file;
2746         struct ftrace_event_call *call;
2747         struct event_subsystem *system;
2748         struct trace_array *tr;
2749         int ret;
2750
2751         tr = top_trace_array();
2752         if (!tr)
2753                 return;
2754
2755         pr_info("Running tests on trace events:\n");
2756
2757         list_for_each_entry(file, &tr->events, list) {
2758
2759                 call = file->event_call;
2760
2761                 /* Only test those that have a probe */
2762                 if (!call->class || !call->class->probe)
2763                         continue;
2764
2765 /*
2766  * Testing syscall events here is pretty useless, but
2767  * we still do it if configured. But this is time consuming.
2768  * What we really need is a user thread to perform the
2769  * syscalls as we test.
2770  */
2771 #ifndef CONFIG_EVENT_TRACE_TEST_SYSCALLS
2772                 if (call->class->system &&
2773                     strcmp(call->class->system, "syscalls") == 0)
2774                         continue;
2775 #endif
2776
2777                 pr_info("Testing event %s: ", ftrace_event_name(call));
2778
2779                 /*
2780                  * If an event is already enabled, someone is using
2781                  * it and the self test should not be on.
2782                  */
2783                 if (file->flags & FTRACE_EVENT_FL_ENABLED) {
2784                         pr_warn("Enabled event during self test!\n");
2785                         WARN_ON_ONCE(1);
2786                         continue;
2787                 }
2788
2789                 ftrace_event_enable_disable(file, 1);
2790                 event_test_stuff();
2791                 ftrace_event_enable_disable(file, 0);
2792
2793                 pr_cont("OK\n");
2794         }
2795
2796         /* Now test at the sub system level */
2797
2798         pr_info("Running tests on trace event systems:\n");
2799
2800         list_for_each_entry(dir, &tr->systems, list) {
2801
2802                 system = dir->subsystem;
2803
2804                 /* the ftrace system is special, skip it */
2805                 if (strcmp(system->name, "ftrace") == 0)
2806                         continue;
2807
2808                 pr_info("Testing event system %s: ", system->name);
2809
2810                 ret = __ftrace_set_clr_event(tr, NULL, system->name, NULL, 1);
2811                 if (WARN_ON_ONCE(ret)) {
2812                         pr_warn("error enabling system %s\n",
2813                                 system->name);
2814                         continue;
2815                 }
2816
2817                 event_test_stuff();
2818
2819                 ret = __ftrace_set_clr_event(tr, NULL, system->name, NULL, 0);
2820                 if (WARN_ON_ONCE(ret)) {
2821                         pr_warn("error disabling system %s\n",
2822                                 system->name);
2823                         continue;
2824                 }
2825
2826                 pr_cont("OK\n");
2827         }
2828
2829         /* Test with all events enabled */
2830
2831         pr_info("Running tests on all trace events:\n");
2832         pr_info("Testing all events: ");
2833
2834         ret = __ftrace_set_clr_event(tr, NULL, NULL, NULL, 1);
2835         if (WARN_ON_ONCE(ret)) {
2836                 pr_warn("error enabling all events\n");
2837                 return;
2838         }
2839
2840         event_test_stuff();
2841
2842         /* reset sysname */
2843         ret = __ftrace_set_clr_event(tr, NULL, NULL, NULL, 0);
2844         if (WARN_ON_ONCE(ret)) {
2845                 pr_warn("error disabling all events\n");
2846                 return;
2847         }
2848
2849         pr_cont("OK\n");
2850 }
2851
2852 #ifdef CONFIG_FUNCTION_TRACER
2853
2854 static DEFINE_PER_CPU(atomic_t, ftrace_test_event_disable);
2855
2856 static void
2857 function_test_events_call(unsigned long ip, unsigned long parent_ip,
2858                           struct ftrace_ops *op, struct pt_regs *pt_regs)
2859 {
2860         struct ring_buffer_event *event;
2861         struct ring_buffer *buffer;
2862         struct ftrace_entry *entry;
2863         unsigned long flags;
2864         long disabled;
2865         int cpu;
2866         int pc;
2867
2868         pc = preempt_count();
2869         preempt_disable_notrace();
2870         cpu = raw_smp_processor_id();
2871         disabled = atomic_inc_return(&per_cpu(ftrace_test_event_disable, cpu));
2872
2873         if (disabled != 1)
2874                 goto out;
2875
2876         local_save_flags(flags);
2877
2878         event = trace_current_buffer_lock_reserve(&buffer,
2879                                                   TRACE_FN, sizeof(*entry),
2880                                                   flags, pc);
2881         if (!event)
2882                 goto out;
2883         entry   = ring_buffer_event_data(event);
2884         entry->ip                       = ip;
2885         entry->parent_ip                = parent_ip;
2886
2887         trace_buffer_unlock_commit(buffer, event, flags, pc);
2888
2889  out:
2890         atomic_dec(&per_cpu(ftrace_test_event_disable, cpu));
2891         preempt_enable_notrace();
2892 }
2893
2894 static struct ftrace_ops trace_ops __initdata  =
2895 {
2896         .func = function_test_events_call,
2897         .flags = FTRACE_OPS_FL_RECURSION_SAFE,
2898 };
2899
2900 static __init void event_trace_self_test_with_function(void)
2901 {
2902         int ret;
2903         ret = register_ftrace_function(&trace_ops);
2904         if (WARN_ON(ret < 0)) {
2905                 pr_info("Failed to enable function tracer for event tests\n");
2906                 return;
2907         }
2908         pr_info("Running tests again, along with the function tracer\n");
2909         event_trace_self_tests();
2910         unregister_ftrace_function(&trace_ops);
2911 }
2912 #else
2913 static __init void event_trace_self_test_with_function(void)
2914 {
2915 }
2916 #endif
2917
2918 static __init int event_trace_self_tests_init(void)
2919 {
2920         if (!tracing_selftest_disabled) {
2921                 event_trace_self_tests();
2922                 event_trace_self_test_with_function();
2923         }
2924
2925         return 0;
2926 }
2927
2928 late_initcall(event_trace_self_tests_init);
2929
2930 #endif