Merge tag 'trace-v3.20' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-drm-fsl-dcu.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/debugfs.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                 debugfs_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                 debugfs_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 = debugfs_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 = debugfs_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 debugfs '%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 = debugfs_create_dir(name, d_events);
1589         if (!file->dir) {
1590                 pr_warn("Could not create debugfs '%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 struct ftrace_event_file *
1708 trace_create_new_event(struct ftrace_event_call *call,
1709                        struct trace_array *tr)
1710 {
1711         struct ftrace_event_file *file;
1712
1713         file = kmem_cache_alloc(file_cachep, GFP_TRACE);
1714         if (!file)
1715                 return NULL;
1716
1717         file->event_call = call;
1718         file->tr = tr;
1719         atomic_set(&file->sm_ref, 0);
1720         atomic_set(&file->tm_ref, 0);
1721         INIT_LIST_HEAD(&file->triggers);
1722         list_add(&file->list, &tr->events);
1723
1724         return file;
1725 }
1726
1727 /* Add an event to a trace directory */
1728 static int
1729 __trace_add_new_event(struct ftrace_event_call *call, struct trace_array *tr)
1730 {
1731         struct ftrace_event_file *file;
1732
1733         file = trace_create_new_event(call, tr);
1734         if (!file)
1735                 return -ENOMEM;
1736
1737         return event_create_dir(tr->event_dir, file);
1738 }
1739
1740 /*
1741  * Just create a decriptor for early init. A descriptor is required
1742  * for enabling events at boot. We want to enable events before
1743  * the filesystem is initialized.
1744  */
1745 static __init int
1746 __trace_early_add_new_event(struct ftrace_event_call *call,
1747                             struct trace_array *tr)
1748 {
1749         struct ftrace_event_file *file;
1750
1751         file = trace_create_new_event(call, tr);
1752         if (!file)
1753                 return -ENOMEM;
1754
1755         return 0;
1756 }
1757
1758 struct ftrace_module_file_ops;
1759 static void __add_event_to_tracers(struct ftrace_event_call *call);
1760
1761 /* Add an additional event_call dynamically */
1762 int trace_add_event_call(struct ftrace_event_call *call)
1763 {
1764         int ret;
1765         mutex_lock(&trace_types_lock);
1766         mutex_lock(&event_mutex);
1767
1768         ret = __register_event(call, NULL);
1769         if (ret >= 0)
1770                 __add_event_to_tracers(call);
1771
1772         mutex_unlock(&event_mutex);
1773         mutex_unlock(&trace_types_lock);
1774         return ret;
1775 }
1776
1777 /*
1778  * Must be called under locking of trace_types_lock, event_mutex and
1779  * trace_event_sem.
1780  */
1781 static void __trace_remove_event_call(struct ftrace_event_call *call)
1782 {
1783         event_remove(call);
1784         trace_destroy_fields(call);
1785         free_event_filter(call->filter);
1786         call->filter = NULL;
1787 }
1788
1789 static int probe_remove_event_call(struct ftrace_event_call *call)
1790 {
1791         struct trace_array *tr;
1792         struct ftrace_event_file *file;
1793
1794 #ifdef CONFIG_PERF_EVENTS
1795         if (call->perf_refcount)
1796                 return -EBUSY;
1797 #endif
1798         do_for_each_event_file(tr, file) {
1799                 if (file->event_call != call)
1800                         continue;
1801                 /*
1802                  * We can't rely on ftrace_event_enable_disable(enable => 0)
1803                  * we are going to do, FTRACE_EVENT_FL_SOFT_MODE can suppress
1804                  * TRACE_REG_UNREGISTER.
1805                  */
1806                 if (file->flags & FTRACE_EVENT_FL_ENABLED)
1807                         return -EBUSY;
1808                 /*
1809                  * The do_for_each_event_file_safe() is
1810                  * a double loop. After finding the call for this
1811                  * trace_array, we use break to jump to the next
1812                  * trace_array.
1813                  */
1814                 break;
1815         } while_for_each_event_file();
1816
1817         __trace_remove_event_call(call);
1818
1819         return 0;
1820 }
1821
1822 /* Remove an event_call */
1823 int trace_remove_event_call(struct ftrace_event_call *call)
1824 {
1825         int ret;
1826
1827         mutex_lock(&trace_types_lock);
1828         mutex_lock(&event_mutex);
1829         down_write(&trace_event_sem);
1830         ret = probe_remove_event_call(call);
1831         up_write(&trace_event_sem);
1832         mutex_unlock(&event_mutex);
1833         mutex_unlock(&trace_types_lock);
1834
1835         return ret;
1836 }
1837
1838 #define for_each_event(event, start, end)                       \
1839         for (event = start;                                     \
1840              (unsigned long)event < (unsigned long)end;         \
1841              event++)
1842
1843 #ifdef CONFIG_MODULES
1844
1845 static void trace_module_add_events(struct module *mod)
1846 {
1847         struct ftrace_event_call **call, **start, **end;
1848
1849         if (!mod->num_trace_events)
1850                 return;
1851
1852         /* Don't add infrastructure for mods without tracepoints */
1853         if (trace_module_has_bad_taint(mod)) {
1854                 pr_err("%s: module has bad taint, not creating trace events\n",
1855                        mod->name);
1856                 return;
1857         }
1858
1859         start = mod->trace_events;
1860         end = mod->trace_events + mod->num_trace_events;
1861
1862         for_each_event(call, start, end) {
1863                 __register_event(*call, mod);
1864                 __add_event_to_tracers(*call);
1865         }
1866 }
1867
1868 static void trace_module_remove_events(struct module *mod)
1869 {
1870         struct ftrace_event_call *call, *p;
1871         bool clear_trace = false;
1872
1873         down_write(&trace_event_sem);
1874         list_for_each_entry_safe(call, p, &ftrace_events, list) {
1875                 if (call->mod == mod) {
1876                         if (call->flags & TRACE_EVENT_FL_WAS_ENABLED)
1877                                 clear_trace = true;
1878                         __trace_remove_event_call(call);
1879                 }
1880         }
1881         up_write(&trace_event_sem);
1882
1883         /*
1884          * It is safest to reset the ring buffer if the module being unloaded
1885          * registered any events that were used. The only worry is if
1886          * a new module gets loaded, and takes on the same id as the events
1887          * of this module. When printing out the buffer, traced events left
1888          * over from this module may be passed to the new module events and
1889          * unexpected results may occur.
1890          */
1891         if (clear_trace)
1892                 tracing_reset_all_online_cpus();
1893 }
1894
1895 static int trace_module_notify(struct notifier_block *self,
1896                                unsigned long val, void *data)
1897 {
1898         struct module *mod = data;
1899
1900         mutex_lock(&trace_types_lock);
1901         mutex_lock(&event_mutex);
1902         switch (val) {
1903         case MODULE_STATE_COMING:
1904                 trace_module_add_events(mod);
1905                 break;
1906         case MODULE_STATE_GOING:
1907                 trace_module_remove_events(mod);
1908                 break;
1909         }
1910         mutex_unlock(&event_mutex);
1911         mutex_unlock(&trace_types_lock);
1912
1913         return 0;
1914 }
1915
1916 static struct notifier_block trace_module_nb = {
1917         .notifier_call = trace_module_notify,
1918         .priority = 0,
1919 };
1920 #endif /* CONFIG_MODULES */
1921
1922 /* Create a new event directory structure for a trace directory. */
1923 static void
1924 __trace_add_event_dirs(struct trace_array *tr)
1925 {
1926         struct ftrace_event_call *call;
1927         int ret;
1928
1929         list_for_each_entry(call, &ftrace_events, list) {
1930                 ret = __trace_add_new_event(call, tr);
1931                 if (ret < 0)
1932                         pr_warn("Could not create directory for event %s\n",
1933                                 ftrace_event_name(call));
1934         }
1935 }
1936
1937 struct ftrace_event_file *
1938 find_event_file(struct trace_array *tr, const char *system,  const char *event)
1939 {
1940         struct ftrace_event_file *file;
1941         struct ftrace_event_call *call;
1942         const char *name;
1943
1944         list_for_each_entry(file, &tr->events, list) {
1945
1946                 call = file->event_call;
1947                 name = ftrace_event_name(call);
1948
1949                 if (!name || !call->class || !call->class->reg)
1950                         continue;
1951
1952                 if (call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)
1953                         continue;
1954
1955                 if (strcmp(event, name) == 0 &&
1956                     strcmp(system, call->class->system) == 0)
1957                         return file;
1958         }
1959         return NULL;
1960 }
1961
1962 #ifdef CONFIG_DYNAMIC_FTRACE
1963
1964 /* Avoid typos */
1965 #define ENABLE_EVENT_STR        "enable_event"
1966 #define DISABLE_EVENT_STR       "disable_event"
1967
1968 struct event_probe_data {
1969         struct ftrace_event_file        *file;
1970         unsigned long                   count;
1971         int                             ref;
1972         bool                            enable;
1973 };
1974
1975 static void
1976 event_enable_probe(unsigned long ip, unsigned long parent_ip, void **_data)
1977 {
1978         struct event_probe_data **pdata = (struct event_probe_data **)_data;
1979         struct event_probe_data *data = *pdata;
1980
1981         if (!data)
1982                 return;
1983
1984         if (data->enable)
1985                 clear_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &data->file->flags);
1986         else
1987                 set_bit(FTRACE_EVENT_FL_SOFT_DISABLED_BIT, &data->file->flags);
1988 }
1989
1990 static void
1991 event_enable_count_probe(unsigned long ip, unsigned long parent_ip, void **_data)
1992 {
1993         struct event_probe_data **pdata = (struct event_probe_data **)_data;
1994         struct event_probe_data *data = *pdata;
1995
1996         if (!data)
1997                 return;
1998
1999         if (!data->count)
2000                 return;
2001
2002         /* Skip if the event is in a state we want to switch to */
2003         if (data->enable == !(data->file->flags & FTRACE_EVENT_FL_SOFT_DISABLED))
2004                 return;
2005
2006         if (data->count != -1)
2007                 (data->count)--;
2008
2009         event_enable_probe(ip, parent_ip, _data);
2010 }
2011
2012 static int
2013 event_enable_print(struct seq_file *m, unsigned long ip,
2014                       struct ftrace_probe_ops *ops, void *_data)
2015 {
2016         struct event_probe_data *data = _data;
2017
2018         seq_printf(m, "%ps:", (void *)ip);
2019
2020         seq_printf(m, "%s:%s:%s",
2021                    data->enable ? ENABLE_EVENT_STR : DISABLE_EVENT_STR,
2022                    data->file->event_call->class->system,
2023                    ftrace_event_name(data->file->event_call));
2024
2025         if (data->count == -1)
2026                 seq_puts(m, ":unlimited\n");
2027         else
2028                 seq_printf(m, ":count=%ld\n", data->count);
2029
2030         return 0;
2031 }
2032
2033 static int
2034 event_enable_init(struct ftrace_probe_ops *ops, unsigned long ip,
2035                   void **_data)
2036 {
2037         struct event_probe_data **pdata = (struct event_probe_data **)_data;
2038         struct event_probe_data *data = *pdata;
2039
2040         data->ref++;
2041         return 0;
2042 }
2043
2044 static void
2045 event_enable_free(struct ftrace_probe_ops *ops, unsigned long ip,
2046                   void **_data)
2047 {
2048         struct event_probe_data **pdata = (struct event_probe_data **)_data;
2049         struct event_probe_data *data = *pdata;
2050
2051         if (WARN_ON_ONCE(data->ref <= 0))
2052                 return;
2053
2054         data->ref--;
2055         if (!data->ref) {
2056                 /* Remove the SOFT_MODE flag */
2057                 __ftrace_event_enable_disable(data->file, 0, 1);
2058                 module_put(data->file->event_call->mod);
2059                 kfree(data);
2060         }
2061         *pdata = NULL;
2062 }
2063
2064 static struct ftrace_probe_ops event_enable_probe_ops = {
2065         .func                   = event_enable_probe,
2066         .print                  = event_enable_print,
2067         .init                   = event_enable_init,
2068         .free                   = event_enable_free,
2069 };
2070
2071 static struct ftrace_probe_ops event_enable_count_probe_ops = {
2072         .func                   = event_enable_count_probe,
2073         .print                  = event_enable_print,
2074         .init                   = event_enable_init,
2075         .free                   = event_enable_free,
2076 };
2077
2078 static struct ftrace_probe_ops event_disable_probe_ops = {
2079         .func                   = event_enable_probe,
2080         .print                  = event_enable_print,
2081         .init                   = event_enable_init,
2082         .free                   = event_enable_free,
2083 };
2084
2085 static struct ftrace_probe_ops event_disable_count_probe_ops = {
2086         .func                   = event_enable_count_probe,
2087         .print                  = event_enable_print,
2088         .init                   = event_enable_init,
2089         .free                   = event_enable_free,
2090 };
2091
2092 static int
2093 event_enable_func(struct ftrace_hash *hash,
2094                   char *glob, char *cmd, char *param, int enabled)
2095 {
2096         struct trace_array *tr = top_trace_array();
2097         struct ftrace_event_file *file;
2098         struct ftrace_probe_ops *ops;
2099         struct event_probe_data *data;
2100         const char *system;
2101         const char *event;
2102         char *number;
2103         bool enable;
2104         int ret;
2105
2106         if (!tr)
2107                 return -ENODEV;
2108
2109         /* hash funcs only work with set_ftrace_filter */
2110         if (!enabled || !param)
2111                 return -EINVAL;
2112
2113         system = strsep(&param, ":");
2114         if (!param)
2115                 return -EINVAL;
2116
2117         event = strsep(&param, ":");
2118
2119         mutex_lock(&event_mutex);
2120
2121         ret = -EINVAL;
2122         file = find_event_file(tr, system, event);
2123         if (!file)
2124                 goto out;
2125
2126         enable = strcmp(cmd, ENABLE_EVENT_STR) == 0;
2127
2128         if (enable)
2129                 ops = param ? &event_enable_count_probe_ops : &event_enable_probe_ops;
2130         else
2131                 ops = param ? &event_disable_count_probe_ops : &event_disable_probe_ops;
2132
2133         if (glob[0] == '!') {
2134                 unregister_ftrace_function_probe_func(glob+1, ops);
2135                 ret = 0;
2136                 goto out;
2137         }
2138
2139         ret = -ENOMEM;
2140         data = kzalloc(sizeof(*data), GFP_KERNEL);
2141         if (!data)
2142                 goto out;
2143
2144         data->enable = enable;
2145         data->count = -1;
2146         data->file = file;
2147
2148         if (!param)
2149                 goto out_reg;
2150
2151         number = strsep(&param, ":");
2152
2153         ret = -EINVAL;
2154         if (!strlen(number))
2155                 goto out_free;
2156
2157         /*
2158          * We use the callback data field (which is a pointer)
2159          * as our counter.
2160          */
2161         ret = kstrtoul(number, 0, &data->count);
2162         if (ret)
2163                 goto out_free;
2164
2165  out_reg:
2166         /* Don't let event modules unload while probe registered */
2167         ret = try_module_get(file->event_call->mod);
2168         if (!ret) {
2169                 ret = -EBUSY;
2170                 goto out_free;
2171         }
2172
2173         ret = __ftrace_event_enable_disable(file, 1, 1);
2174         if (ret < 0)
2175                 goto out_put;
2176         ret = register_ftrace_function_probe(glob, ops, data);
2177         /*
2178          * The above returns on success the # of functions enabled,
2179          * but if it didn't find any functions it returns zero.
2180          * Consider no functions a failure too.
2181          */
2182         if (!ret) {
2183                 ret = -ENOENT;
2184                 goto out_disable;
2185         } else if (ret < 0)
2186                 goto out_disable;
2187         /* Just return zero, not the number of enabled functions */
2188         ret = 0;
2189  out:
2190         mutex_unlock(&event_mutex);
2191         return ret;
2192
2193  out_disable:
2194         __ftrace_event_enable_disable(file, 0, 1);
2195  out_put:
2196         module_put(file->event_call->mod);
2197  out_free:
2198         kfree(data);
2199         goto out;
2200 }
2201
2202 static struct ftrace_func_command event_enable_cmd = {
2203         .name                   = ENABLE_EVENT_STR,
2204         .func                   = event_enable_func,
2205 };
2206
2207 static struct ftrace_func_command event_disable_cmd = {
2208         .name                   = DISABLE_EVENT_STR,
2209         .func                   = event_enable_func,
2210 };
2211
2212 static __init int register_event_cmds(void)
2213 {
2214         int ret;
2215
2216         ret = register_ftrace_command(&event_enable_cmd);
2217         if (WARN_ON(ret < 0))
2218                 return ret;
2219         ret = register_ftrace_command(&event_disable_cmd);
2220         if (WARN_ON(ret < 0))
2221                 unregister_ftrace_command(&event_enable_cmd);
2222         return ret;
2223 }
2224 #else
2225 static inline int register_event_cmds(void) { return 0; }
2226 #endif /* CONFIG_DYNAMIC_FTRACE */
2227
2228 /*
2229  * The top level array has already had its ftrace_event_file
2230  * descriptors created in order to allow for early events to
2231  * be recorded. This function is called after the debugfs has been
2232  * initialized, and we now have to create the files associated
2233  * to the events.
2234  */
2235 static __init void
2236 __trace_early_add_event_dirs(struct trace_array *tr)
2237 {
2238         struct ftrace_event_file *file;
2239         int ret;
2240
2241
2242         list_for_each_entry(file, &tr->events, list) {
2243                 ret = event_create_dir(tr->event_dir, file);
2244                 if (ret < 0)
2245                         pr_warn("Could not create directory for event %s\n",
2246                                 ftrace_event_name(file->event_call));
2247         }
2248 }
2249
2250 /*
2251  * For early boot up, the top trace array requires to have
2252  * a list of events that can be enabled. This must be done before
2253  * the filesystem is set up in order to allow events to be traced
2254  * early.
2255  */
2256 static __init void
2257 __trace_early_add_events(struct trace_array *tr)
2258 {
2259         struct ftrace_event_call *call;
2260         int ret;
2261
2262         list_for_each_entry(call, &ftrace_events, list) {
2263                 /* Early boot up should not have any modules loaded */
2264                 if (WARN_ON_ONCE(call->mod))
2265                         continue;
2266
2267                 ret = __trace_early_add_new_event(call, tr);
2268                 if (ret < 0)
2269                         pr_warn("Could not create early event %s\n",
2270                                 ftrace_event_name(call));
2271         }
2272 }
2273
2274 /* Remove the event directory structure for a trace directory. */
2275 static void
2276 __trace_remove_event_dirs(struct trace_array *tr)
2277 {
2278         struct ftrace_event_file *file, *next;
2279
2280         list_for_each_entry_safe(file, next, &tr->events, list)
2281                 remove_event_file_dir(file);
2282 }
2283
2284 static void __add_event_to_tracers(struct ftrace_event_call *call)
2285 {
2286         struct trace_array *tr;
2287
2288         list_for_each_entry(tr, &ftrace_trace_arrays, list)
2289                 __trace_add_new_event(call, tr);
2290 }
2291
2292 extern struct ftrace_event_call *__start_ftrace_events[];
2293 extern struct ftrace_event_call *__stop_ftrace_events[];
2294
2295 static char bootup_event_buf[COMMAND_LINE_SIZE] __initdata;
2296
2297 static __init int setup_trace_event(char *str)
2298 {
2299         strlcpy(bootup_event_buf, str, COMMAND_LINE_SIZE);
2300         ring_buffer_expanded = true;
2301         tracing_selftest_disabled = true;
2302
2303         return 1;
2304 }
2305 __setup("trace_event=", setup_trace_event);
2306
2307 /* Expects to have event_mutex held when called */
2308 static int
2309 create_event_toplevel_files(struct dentry *parent, struct trace_array *tr)
2310 {
2311         struct dentry *d_events;
2312         struct dentry *entry;
2313
2314         entry = debugfs_create_file("set_event", 0644, parent,
2315                                     tr, &ftrace_set_event_fops);
2316         if (!entry) {
2317                 pr_warn("Could not create debugfs 'set_event' entry\n");
2318                 return -ENOMEM;
2319         }
2320
2321         d_events = debugfs_create_dir("events", parent);
2322         if (!d_events) {
2323                 pr_warn("Could not create debugfs 'events' directory\n");
2324                 return -ENOMEM;
2325         }
2326
2327         /* ring buffer internal formats */
2328         trace_create_file("header_page", 0444, d_events,
2329                           ring_buffer_print_page_header,
2330                           &ftrace_show_header_fops);
2331
2332         trace_create_file("header_event", 0444, d_events,
2333                           ring_buffer_print_entry_header,
2334                           &ftrace_show_header_fops);
2335
2336         trace_create_file("enable", 0644, d_events,
2337                           tr, &ftrace_tr_enable_fops);
2338
2339         tr->event_dir = d_events;
2340
2341         return 0;
2342 }
2343
2344 /**
2345  * event_trace_add_tracer - add a instance of a trace_array to events
2346  * @parent: The parent dentry to place the files/directories for events in
2347  * @tr: The trace array associated with these events
2348  *
2349  * When a new instance is created, it needs to set up its events
2350  * directory, as well as other files associated with events. It also
2351  * creates the event hierachry in the @parent/events directory.
2352  *
2353  * Returns 0 on success.
2354  */
2355 int event_trace_add_tracer(struct dentry *parent, struct trace_array *tr)
2356 {
2357         int ret;
2358
2359         mutex_lock(&event_mutex);
2360
2361         ret = create_event_toplevel_files(parent, tr);
2362         if (ret)
2363                 goto out_unlock;
2364
2365         down_write(&trace_event_sem);
2366         __trace_add_event_dirs(tr);
2367         up_write(&trace_event_sem);
2368
2369  out_unlock:
2370         mutex_unlock(&event_mutex);
2371
2372         return ret;
2373 }
2374
2375 /*
2376  * The top trace array already had its file descriptors created.
2377  * Now the files themselves need to be created.
2378  */
2379 static __init int
2380 early_event_add_tracer(struct dentry *parent, struct trace_array *tr)
2381 {
2382         int ret;
2383
2384         mutex_lock(&event_mutex);
2385
2386         ret = create_event_toplevel_files(parent, tr);
2387         if (ret)
2388                 goto out_unlock;
2389
2390         down_write(&trace_event_sem);
2391         __trace_early_add_event_dirs(tr);
2392         up_write(&trace_event_sem);
2393
2394  out_unlock:
2395         mutex_unlock(&event_mutex);
2396
2397         return ret;
2398 }
2399
2400 int event_trace_del_tracer(struct trace_array *tr)
2401 {
2402         mutex_lock(&event_mutex);
2403
2404         /* Disable any event triggers and associated soft-disabled events */
2405         clear_event_triggers(tr);
2406
2407         /* Disable any running events */
2408         __ftrace_set_clr_event_nolock(tr, NULL, NULL, NULL, 0);
2409
2410         /* Access to events are within rcu_read_lock_sched() */
2411         synchronize_sched();
2412
2413         down_write(&trace_event_sem);
2414         __trace_remove_event_dirs(tr);
2415         debugfs_remove_recursive(tr->event_dir);
2416         up_write(&trace_event_sem);
2417
2418         tr->event_dir = NULL;
2419
2420         mutex_unlock(&event_mutex);
2421
2422         return 0;
2423 }
2424
2425 static __init int event_trace_memsetup(void)
2426 {
2427         field_cachep = KMEM_CACHE(ftrace_event_field, SLAB_PANIC);
2428         file_cachep = KMEM_CACHE(ftrace_event_file, SLAB_PANIC);
2429         return 0;
2430 }
2431
2432 static __init void
2433 early_enable_events(struct trace_array *tr, bool disable_first)
2434 {
2435         char *buf = bootup_event_buf;
2436         char *token;
2437         int ret;
2438
2439         while (true) {
2440                 token = strsep(&buf, ",");
2441
2442                 if (!token)
2443                         break;
2444                 if (!*token)
2445                         continue;
2446
2447                 /* Restarting syscalls requires that we stop them first */
2448                 if (disable_first)
2449                         ftrace_set_clr_event(tr, token, 0);
2450
2451                 ret = ftrace_set_clr_event(tr, token, 1);
2452                 if (ret)
2453                         pr_warn("Failed to enable trace event: %s\n", token);
2454
2455                 /* Put back the comma to allow this to be called again */
2456                 if (buf)
2457                         *(buf - 1) = ',';
2458         }
2459 }
2460
2461 static __init int event_trace_enable(void)
2462 {
2463         struct trace_array *tr = top_trace_array();
2464         struct ftrace_event_call **iter, *call;
2465         int ret;
2466
2467         if (!tr)
2468                 return -ENODEV;
2469
2470         for_each_event(iter, __start_ftrace_events, __stop_ftrace_events) {
2471
2472                 call = *iter;
2473                 ret = event_init(call);
2474                 if (!ret)
2475                         list_add(&call->list, &ftrace_events);
2476         }
2477
2478         /*
2479          * We need the top trace array to have a working set of trace
2480          * points at early init, before the debug files and directories
2481          * are created. Create the file entries now, and attach them
2482          * to the actual file dentries later.
2483          */
2484         __trace_early_add_events(tr);
2485
2486         early_enable_events(tr, false);
2487
2488         trace_printk_start_comm();
2489
2490         register_event_cmds();
2491
2492         register_trigger_cmds();
2493
2494         return 0;
2495 }
2496
2497 /*
2498  * event_trace_enable() is called from trace_event_init() first to
2499  * initialize events and perhaps start any events that are on the
2500  * command line. Unfortunately, there are some events that will not
2501  * start this early, like the system call tracepoints that need
2502  * to set the TIF_SYSCALL_TRACEPOINT flag of pid 1. But event_trace_enable()
2503  * is called before pid 1 starts, and this flag is never set, making
2504  * the syscall tracepoint never get reached, but the event is enabled
2505  * regardless (and not doing anything).
2506  */
2507 static __init int event_trace_enable_again(void)
2508 {
2509         struct trace_array *tr;
2510
2511         tr = top_trace_array();
2512         if (!tr)
2513                 return -ENODEV;
2514
2515         early_enable_events(tr, true);
2516
2517         return 0;
2518 }
2519
2520 early_initcall(event_trace_enable_again);
2521
2522 static __init int event_trace_init(void)
2523 {
2524         struct trace_array *tr;
2525         struct dentry *d_tracer;
2526         struct dentry *entry;
2527         int ret;
2528
2529         tr = top_trace_array();
2530         if (!tr)
2531                 return -ENODEV;
2532
2533         d_tracer = tracing_init_dentry();
2534         if (IS_ERR(d_tracer))
2535                 return 0;
2536
2537         entry = debugfs_create_file("available_events", 0444, d_tracer,
2538                                     tr, &ftrace_avail_fops);
2539         if (!entry)
2540                 pr_warn("Could not create debugfs 'available_events' entry\n");
2541
2542         if (trace_define_common_fields())
2543                 pr_warn("tracing: Failed to allocate common fields");
2544
2545         ret = early_event_add_tracer(d_tracer, tr);
2546         if (ret)
2547                 return ret;
2548
2549 #ifdef CONFIG_MODULES
2550         ret = register_module_notifier(&trace_module_nb);
2551         if (ret)
2552                 pr_warn("Failed to register trace events module notifier\n");
2553 #endif
2554         return 0;
2555 }
2556
2557 void __init trace_event_init(void)
2558 {
2559         event_trace_memsetup();
2560         init_ftrace_syscalls();
2561         event_trace_enable();
2562 }
2563
2564 fs_initcall(event_trace_init);
2565
2566 #ifdef CONFIG_FTRACE_STARTUP_TEST
2567
2568 static DEFINE_SPINLOCK(test_spinlock);
2569 static DEFINE_SPINLOCK(test_spinlock_irq);
2570 static DEFINE_MUTEX(test_mutex);
2571
2572 static __init void test_work(struct work_struct *dummy)
2573 {
2574         spin_lock(&test_spinlock);
2575         spin_lock_irq(&test_spinlock_irq);
2576         udelay(1);
2577         spin_unlock_irq(&test_spinlock_irq);
2578         spin_unlock(&test_spinlock);
2579
2580         mutex_lock(&test_mutex);
2581         msleep(1);
2582         mutex_unlock(&test_mutex);
2583 }
2584
2585 static __init int event_test_thread(void *unused)
2586 {
2587         void *test_malloc;
2588
2589         test_malloc = kmalloc(1234, GFP_KERNEL);
2590         if (!test_malloc)
2591                 pr_info("failed to kmalloc\n");
2592
2593         schedule_on_each_cpu(test_work);
2594
2595         kfree(test_malloc);
2596
2597         set_current_state(TASK_INTERRUPTIBLE);
2598         while (!kthread_should_stop()) {
2599                 schedule();
2600                 set_current_state(TASK_INTERRUPTIBLE);
2601         }
2602         __set_current_state(TASK_RUNNING);
2603
2604         return 0;
2605 }
2606
2607 /*
2608  * Do various things that may trigger events.
2609  */
2610 static __init void event_test_stuff(void)
2611 {
2612         struct task_struct *test_thread;
2613
2614         test_thread = kthread_run(event_test_thread, NULL, "test-events");
2615         msleep(1);
2616         kthread_stop(test_thread);
2617 }
2618
2619 /*
2620  * For every trace event defined, we will test each trace point separately,
2621  * and then by groups, and finally all trace points.
2622  */
2623 static __init void event_trace_self_tests(void)
2624 {
2625         struct ftrace_subsystem_dir *dir;
2626         struct ftrace_event_file *file;
2627         struct ftrace_event_call *call;
2628         struct event_subsystem *system;
2629         struct trace_array *tr;
2630         int ret;
2631
2632         tr = top_trace_array();
2633         if (!tr)
2634                 return;
2635
2636         pr_info("Running tests on trace events:\n");
2637
2638         list_for_each_entry(file, &tr->events, list) {
2639
2640                 call = file->event_call;
2641
2642                 /* Only test those that have a probe */
2643                 if (!call->class || !call->class->probe)
2644                         continue;
2645
2646 /*
2647  * Testing syscall events here is pretty useless, but
2648  * we still do it if configured. But this is time consuming.
2649  * What we really need is a user thread to perform the
2650  * syscalls as we test.
2651  */
2652 #ifndef CONFIG_EVENT_TRACE_TEST_SYSCALLS
2653                 if (call->class->system &&
2654                     strcmp(call->class->system, "syscalls") == 0)
2655                         continue;
2656 #endif
2657
2658                 pr_info("Testing event %s: ", ftrace_event_name(call));
2659
2660                 /*
2661                  * If an event is already enabled, someone is using
2662                  * it and the self test should not be on.
2663                  */
2664                 if (file->flags & FTRACE_EVENT_FL_ENABLED) {
2665                         pr_warn("Enabled event during self test!\n");
2666                         WARN_ON_ONCE(1);
2667                         continue;
2668                 }
2669
2670                 ftrace_event_enable_disable(file, 1);
2671                 event_test_stuff();
2672                 ftrace_event_enable_disable(file, 0);
2673
2674                 pr_cont("OK\n");
2675         }
2676
2677         /* Now test at the sub system level */
2678
2679         pr_info("Running tests on trace event systems:\n");
2680
2681         list_for_each_entry(dir, &tr->systems, list) {
2682
2683                 system = dir->subsystem;
2684
2685                 /* the ftrace system is special, skip it */
2686                 if (strcmp(system->name, "ftrace") == 0)
2687                         continue;
2688
2689                 pr_info("Testing event system %s: ", system->name);
2690
2691                 ret = __ftrace_set_clr_event(tr, NULL, system->name, NULL, 1);
2692                 if (WARN_ON_ONCE(ret)) {
2693                         pr_warn("error enabling system %s\n",
2694                                 system->name);
2695                         continue;
2696                 }
2697
2698                 event_test_stuff();
2699
2700                 ret = __ftrace_set_clr_event(tr, NULL, system->name, NULL, 0);
2701                 if (WARN_ON_ONCE(ret)) {
2702                         pr_warn("error disabling system %s\n",
2703                                 system->name);
2704                         continue;
2705                 }
2706
2707                 pr_cont("OK\n");
2708         }
2709
2710         /* Test with all events enabled */
2711
2712         pr_info("Running tests on all trace events:\n");
2713         pr_info("Testing all events: ");
2714
2715         ret = __ftrace_set_clr_event(tr, NULL, NULL, NULL, 1);
2716         if (WARN_ON_ONCE(ret)) {
2717                 pr_warn("error enabling all events\n");
2718                 return;
2719         }
2720
2721         event_test_stuff();
2722
2723         /* reset sysname */
2724         ret = __ftrace_set_clr_event(tr, NULL, NULL, NULL, 0);
2725         if (WARN_ON_ONCE(ret)) {
2726                 pr_warn("error disabling all events\n");
2727                 return;
2728         }
2729
2730         pr_cont("OK\n");
2731 }
2732
2733 #ifdef CONFIG_FUNCTION_TRACER
2734
2735 static DEFINE_PER_CPU(atomic_t, ftrace_test_event_disable);
2736
2737 static void
2738 function_test_events_call(unsigned long ip, unsigned long parent_ip,
2739                           struct ftrace_ops *op, struct pt_regs *pt_regs)
2740 {
2741         struct ring_buffer_event *event;
2742         struct ring_buffer *buffer;
2743         struct ftrace_entry *entry;
2744         unsigned long flags;
2745         long disabled;
2746         int cpu;
2747         int pc;
2748
2749         pc = preempt_count();
2750         preempt_disable_notrace();
2751         cpu = raw_smp_processor_id();
2752         disabled = atomic_inc_return(&per_cpu(ftrace_test_event_disable, cpu));
2753
2754         if (disabled != 1)
2755                 goto out;
2756
2757         local_save_flags(flags);
2758
2759         event = trace_current_buffer_lock_reserve(&buffer,
2760                                                   TRACE_FN, sizeof(*entry),
2761                                                   flags, pc);
2762         if (!event)
2763                 goto out;
2764         entry   = ring_buffer_event_data(event);
2765         entry->ip                       = ip;
2766         entry->parent_ip                = parent_ip;
2767
2768         trace_buffer_unlock_commit(buffer, event, flags, pc);
2769
2770  out:
2771         atomic_dec(&per_cpu(ftrace_test_event_disable, cpu));
2772         preempt_enable_notrace();
2773 }
2774
2775 static struct ftrace_ops trace_ops __initdata  =
2776 {
2777         .func = function_test_events_call,
2778         .flags = FTRACE_OPS_FL_RECURSION_SAFE,
2779 };
2780
2781 static __init void event_trace_self_test_with_function(void)
2782 {
2783         int ret;
2784         ret = register_ftrace_function(&trace_ops);
2785         if (WARN_ON(ret < 0)) {
2786                 pr_info("Failed to enable function tracer for event tests\n");
2787                 return;
2788         }
2789         pr_info("Running tests again, along with the function tracer\n");
2790         event_trace_self_tests();
2791         unregister_ftrace_function(&trace_ops);
2792 }
2793 #else
2794 static __init void event_trace_self_test_with_function(void)
2795 {
2796 }
2797 #endif
2798
2799 static __init int event_trace_self_tests_init(void)
2800 {
2801         if (!tracing_selftest_disabled) {
2802                 event_trace_self_tests();
2803                 event_trace_self_test_with_function();
2804         }
2805
2806         return 0;
2807 }
2808
2809 late_initcall(event_trace_self_tests_init);
2810
2811 #endif