OSDN Git Service

Merge 4.4.146 into android-4.4
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / kernel / trace / trace.c
1 /*
2  * ring buffer based function tracer
3  *
4  * Copyright (C) 2007-2012 Steven Rostedt <srostedt@redhat.com>
5  * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com>
6  *
7  * Originally taken from the RT patch by:
8  *    Arnaldo Carvalho de Melo <acme@redhat.com>
9  *
10  * Based on code from the latency_tracer, that is:
11  *  Copyright (C) 2004-2006 Ingo Molnar
12  *  Copyright (C) 2004 Nadia Yvette Chambers
13  */
14 #include <linux/ring_buffer.h>
15 #include <generated/utsrelease.h>
16 #include <linux/stacktrace.h>
17 #include <linux/writeback.h>
18 #include <linux/kallsyms.h>
19 #include <linux/seq_file.h>
20 #include <linux/notifier.h>
21 #include <linux/irqflags.h>
22 #include <linux/debugfs.h>
23 #include <linux/tracefs.h>
24 #include <linux/pagemap.h>
25 #include <linux/hardirq.h>
26 #include <linux/linkage.h>
27 #include <linux/uaccess.h>
28 #include <linux/kprobes.h>
29 #include <linux/ftrace.h>
30 #include <linux/module.h>
31 #include <linux/percpu.h>
32 #include <linux/splice.h>
33 #include <linux/kdebug.h>
34 #include <linux/string.h>
35 #include <linux/mount.h>
36 #include <linux/rwsem.h>
37 #include <linux/slab.h>
38 #include <linux/ctype.h>
39 #include <linux/init.h>
40 #include <linux/poll.h>
41 #include <linux/nmi.h>
42 #include <linux/fs.h>
43 #include <linux/sched/rt.h>
44
45 #include "trace.h"
46 #include "trace_output.h"
47
48 /*
49  * On boot up, the ring buffer is set to the minimum size, so that
50  * we do not waste memory on systems that are not using tracing.
51  */
52 bool ring_buffer_expanded;
53
54 /*
55  * We need to change this state when a selftest is running.
56  * A selftest will lurk into the ring-buffer to count the
57  * entries inserted during the selftest although some concurrent
58  * insertions into the ring-buffer such as trace_printk could occurred
59  * at the same time, giving false positive or negative results.
60  */
61 static bool __read_mostly tracing_selftest_running;
62
63 /*
64  * If a tracer is running, we do not want to run SELFTEST.
65  */
66 bool __read_mostly tracing_selftest_disabled;
67
68 /* Pipe tracepoints to printk */
69 struct trace_iterator *tracepoint_print_iter;
70 int tracepoint_printk;
71
72 /* For tracers that don't implement custom flags */
73 static struct tracer_opt dummy_tracer_opt[] = {
74         { }
75 };
76
77 static struct tracer_flags dummy_tracer_flags = {
78         .val = 0,
79         .opts = dummy_tracer_opt
80 };
81
82 static int
83 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set)
84 {
85         return 0;
86 }
87
88 /*
89  * To prevent the comm cache from being overwritten when no
90  * tracing is active, only save the comm when a trace event
91  * occurred.
92  */
93 static DEFINE_PER_CPU(bool, trace_cmdline_save);
94
95 /*
96  * Kill all tracing for good (never come back).
97  * It is initialized to 1 but will turn to zero if the initialization
98  * of the tracer is successful. But that is the only place that sets
99  * this back to zero.
100  */
101 static int tracing_disabled = 1;
102
103 cpumask_var_t __read_mostly     tracing_buffer_mask;
104
105 /*
106  * ftrace_dump_on_oops - variable to dump ftrace buffer on oops
107  *
108  * If there is an oops (or kernel panic) and the ftrace_dump_on_oops
109  * is set, then ftrace_dump is called. This will output the contents
110  * of the ftrace buffers to the console.  This is very useful for
111  * capturing traces that lead to crashes and outputing it to a
112  * serial console.
113  *
114  * It is default off, but you can enable it with either specifying
115  * "ftrace_dump_on_oops" in the kernel command line, or setting
116  * /proc/sys/kernel/ftrace_dump_on_oops
117  * Set 1 if you want to dump buffers of all CPUs
118  * Set 2 if you want to dump the buffer of the CPU that triggered oops
119  */
120
121 enum ftrace_dump_mode ftrace_dump_on_oops;
122
123 /* When set, tracing will stop when a WARN*() is hit */
124 int __disable_trace_on_warning;
125
126 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
127 /* Map of enums to their values, for "enum_map" file */
128 struct trace_enum_map_head {
129         struct module                   *mod;
130         unsigned long                   length;
131 };
132
133 union trace_enum_map_item;
134
135 struct trace_enum_map_tail {
136         /*
137          * "end" is first and points to NULL as it must be different
138          * than "mod" or "enum_string"
139          */
140         union trace_enum_map_item       *next;
141         const char                      *end;   /* points to NULL */
142 };
143
144 static DEFINE_MUTEX(trace_enum_mutex);
145
146 /*
147  * The trace_enum_maps are saved in an array with two extra elements,
148  * one at the beginning, and one at the end. The beginning item contains
149  * the count of the saved maps (head.length), and the module they
150  * belong to if not built in (head.mod). The ending item contains a
151  * pointer to the next array of saved enum_map items.
152  */
153 union trace_enum_map_item {
154         struct trace_enum_map           map;
155         struct trace_enum_map_head      head;
156         struct trace_enum_map_tail      tail;
157 };
158
159 static union trace_enum_map_item *trace_enum_maps;
160 #endif /* CONFIG_TRACE_ENUM_MAP_FILE */
161
162 static int tracing_set_tracer(struct trace_array *tr, const char *buf);
163
164 #define MAX_TRACER_SIZE         100
165 static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata;
166 static char *default_bootup_tracer;
167
168 static bool allocate_snapshot;
169
170 static int __init set_cmdline_ftrace(char *str)
171 {
172         strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE);
173         default_bootup_tracer = bootup_tracer_buf;
174         /* We are using ftrace early, expand it */
175         ring_buffer_expanded = true;
176         return 1;
177 }
178 __setup("ftrace=", set_cmdline_ftrace);
179
180 static int __init set_ftrace_dump_on_oops(char *str)
181 {
182         if (*str++ != '=' || !*str) {
183                 ftrace_dump_on_oops = DUMP_ALL;
184                 return 1;
185         }
186
187         if (!strcmp("orig_cpu", str)) {
188                 ftrace_dump_on_oops = DUMP_ORIG;
189                 return 1;
190         }
191
192         return 0;
193 }
194 __setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops);
195
196 static int __init stop_trace_on_warning(char *str)
197 {
198         if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
199                 __disable_trace_on_warning = 1;
200         return 1;
201 }
202 __setup("traceoff_on_warning", stop_trace_on_warning);
203
204 static int __init boot_alloc_snapshot(char *str)
205 {
206         allocate_snapshot = true;
207         /* We also need the main ring buffer expanded */
208         ring_buffer_expanded = true;
209         return 1;
210 }
211 __setup("alloc_snapshot", boot_alloc_snapshot);
212
213
214 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;
215
216 static int __init set_trace_boot_options(char *str)
217 {
218         strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE);
219         return 0;
220 }
221 __setup("trace_options=", set_trace_boot_options);
222
223 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata;
224 static char *trace_boot_clock __initdata;
225
226 static int __init set_trace_boot_clock(char *str)
227 {
228         strlcpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE);
229         trace_boot_clock = trace_boot_clock_buf;
230         return 0;
231 }
232 __setup("trace_clock=", set_trace_boot_clock);
233
234 static int __init set_tracepoint_printk(char *str)
235 {
236         if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
237                 tracepoint_printk = 1;
238         return 1;
239 }
240 __setup("tp_printk", set_tracepoint_printk);
241
242 unsigned long long ns2usecs(cycle_t nsec)
243 {
244         nsec += 500;
245         do_div(nsec, 1000);
246         return nsec;
247 }
248
249 /* trace_flags holds trace_options default values */
250 #define TRACE_DEFAULT_FLAGS                                             \
251         (FUNCTION_DEFAULT_FLAGS |                                       \
252          TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |                  \
253          TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO |                \
254          TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |                 \
255          TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS)
256
257 /* trace_options that are only supported by global_trace */
258 #define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER_PRINTK |                      \
259                TRACE_ITER_PRINTK_MSGONLY | TRACE_ITER_RECORD_CMD)
260
261
262 /*
263  * The global_trace is the descriptor that holds the tracing
264  * buffers for the live tracing. For each CPU, it contains
265  * a link list of pages that will store trace entries. The
266  * page descriptor of the pages in the memory is used to hold
267  * the link list by linking the lru item in the page descriptor
268  * to each of the pages in the buffer per CPU.
269  *
270  * For each active CPU there is a data field that holds the
271  * pages for the buffer for that CPU. Each CPU has the same number
272  * of pages allocated for its buffer.
273  */
274 static struct trace_array global_trace = {
275         .trace_flags = TRACE_DEFAULT_FLAGS,
276 };
277
278 LIST_HEAD(ftrace_trace_arrays);
279
280 int trace_array_get(struct trace_array *this_tr)
281 {
282         struct trace_array *tr;
283         int ret = -ENODEV;
284
285         mutex_lock(&trace_types_lock);
286         list_for_each_entry(tr, &ftrace_trace_arrays, list) {
287                 if (tr == this_tr) {
288                         tr->ref++;
289                         ret = 0;
290                         break;
291                 }
292         }
293         mutex_unlock(&trace_types_lock);
294
295         return ret;
296 }
297
298 static void __trace_array_put(struct trace_array *this_tr)
299 {
300         WARN_ON(!this_tr->ref);
301         this_tr->ref--;
302 }
303
304 void trace_array_put(struct trace_array *this_tr)
305 {
306         mutex_lock(&trace_types_lock);
307         __trace_array_put(this_tr);
308         mutex_unlock(&trace_types_lock);
309 }
310
311 int filter_check_discard(struct trace_event_file *file, void *rec,
312                          struct ring_buffer *buffer,
313                          struct ring_buffer_event *event)
314 {
315         if (unlikely(file->flags & EVENT_FILE_FL_FILTERED) &&
316             !filter_match_preds(file->filter, rec)) {
317                 ring_buffer_discard_commit(buffer, event);
318                 return 1;
319         }
320
321         return 0;
322 }
323 EXPORT_SYMBOL_GPL(filter_check_discard);
324
325 int call_filter_check_discard(struct trace_event_call *call, void *rec,
326                               struct ring_buffer *buffer,
327                               struct ring_buffer_event *event)
328 {
329         if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) &&
330             !filter_match_preds(call->filter, rec)) {
331                 ring_buffer_discard_commit(buffer, event);
332                 return 1;
333         }
334
335         return 0;
336 }
337 EXPORT_SYMBOL_GPL(call_filter_check_discard);
338
339 static cycle_t buffer_ftrace_now(struct trace_buffer *buf, int cpu)
340 {
341         u64 ts;
342
343         /* Early boot up does not have a buffer yet */
344         if (!buf->buffer)
345                 return trace_clock_local();
346
347         ts = ring_buffer_time_stamp(buf->buffer, cpu);
348         ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts);
349
350         return ts;
351 }
352
353 cycle_t ftrace_now(int cpu)
354 {
355         return buffer_ftrace_now(&global_trace.trace_buffer, cpu);
356 }
357
358 /**
359  * tracing_is_enabled - Show if global_trace has been disabled
360  *
361  * Shows if the global trace has been enabled or not. It uses the
362  * mirror flag "buffer_disabled" to be used in fast paths such as for
363  * the irqsoff tracer. But it may be inaccurate due to races. If you
364  * need to know the accurate state, use tracing_is_on() which is a little
365  * slower, but accurate.
366  */
367 int tracing_is_enabled(void)
368 {
369         /*
370          * For quick access (irqsoff uses this in fast path), just
371          * return the mirror variable of the state of the ring buffer.
372          * It's a little racy, but we don't really care.
373          */
374         smp_rmb();
375         return !global_trace.buffer_disabled;
376 }
377
378 /*
379  * trace_buf_size is the size in bytes that is allocated
380  * for a buffer. Note, the number of bytes is always rounded
381  * to page size.
382  *
383  * This number is purposely set to a low number of 16384.
384  * If the dump on oops happens, it will be much appreciated
385  * to not have to wait for all that output. Anyway this can be
386  * boot time and run time configurable.
387  */
388 #define TRACE_BUF_SIZE_DEFAULT  1441792UL /* 16384 * 88 (sizeof(entry)) */
389
390 static unsigned long            trace_buf_size = TRACE_BUF_SIZE_DEFAULT;
391
392 /* trace_types holds a link list of available tracers. */
393 static struct tracer            *trace_types __read_mostly;
394
395 /*
396  * trace_types_lock is used to protect the trace_types list.
397  */
398 DEFINE_MUTEX(trace_types_lock);
399
400 /*
401  * serialize the access of the ring buffer
402  *
403  * ring buffer serializes readers, but it is low level protection.
404  * The validity of the events (which returns by ring_buffer_peek() ..etc)
405  * are not protected by ring buffer.
406  *
407  * The content of events may become garbage if we allow other process consumes
408  * these events concurrently:
409  *   A) the page of the consumed events may become a normal page
410  *      (not reader page) in ring buffer, and this page will be rewrited
411  *      by events producer.
412  *   B) The page of the consumed events may become a page for splice_read,
413  *      and this page will be returned to system.
414  *
415  * These primitives allow multi process access to different cpu ring buffer
416  * concurrently.
417  *
418  * These primitives don't distinguish read-only and read-consume access.
419  * Multi read-only access are also serialized.
420  */
421
422 #ifdef CONFIG_SMP
423 static DECLARE_RWSEM(all_cpu_access_lock);
424 static DEFINE_PER_CPU(struct mutex, cpu_access_lock);
425
426 static inline void trace_access_lock(int cpu)
427 {
428         if (cpu == RING_BUFFER_ALL_CPUS) {
429                 /* gain it for accessing the whole ring buffer. */
430                 down_write(&all_cpu_access_lock);
431         } else {
432                 /* gain it for accessing a cpu ring buffer. */
433
434                 /* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */
435                 down_read(&all_cpu_access_lock);
436
437                 /* Secondly block other access to this @cpu ring buffer. */
438                 mutex_lock(&per_cpu(cpu_access_lock, cpu));
439         }
440 }
441
442 static inline void trace_access_unlock(int cpu)
443 {
444         if (cpu == RING_BUFFER_ALL_CPUS) {
445                 up_write(&all_cpu_access_lock);
446         } else {
447                 mutex_unlock(&per_cpu(cpu_access_lock, cpu));
448                 up_read(&all_cpu_access_lock);
449         }
450 }
451
452 static inline void trace_access_lock_init(void)
453 {
454         int cpu;
455
456         for_each_possible_cpu(cpu)
457                 mutex_init(&per_cpu(cpu_access_lock, cpu));
458 }
459
460 #else
461
462 static DEFINE_MUTEX(access_lock);
463
464 static inline void trace_access_lock(int cpu)
465 {
466         (void)cpu;
467         mutex_lock(&access_lock);
468 }
469
470 static inline void trace_access_unlock(int cpu)
471 {
472         (void)cpu;
473         mutex_unlock(&access_lock);
474 }
475
476 static inline void trace_access_lock_init(void)
477 {
478 }
479
480 #endif
481
482 #ifdef CONFIG_STACKTRACE
483 static void __ftrace_trace_stack(struct ring_buffer *buffer,
484                                  unsigned long flags,
485                                  int skip, int pc, struct pt_regs *regs);
486 static inline void ftrace_trace_stack(struct trace_array *tr,
487                                       struct ring_buffer *buffer,
488                                       unsigned long flags,
489                                       int skip, int pc, struct pt_regs *regs);
490
491 #else
492 static inline void __ftrace_trace_stack(struct ring_buffer *buffer,
493                                         unsigned long flags,
494                                         int skip, int pc, struct pt_regs *regs)
495 {
496 }
497 static inline void ftrace_trace_stack(struct trace_array *tr,
498                                       struct ring_buffer *buffer,
499                                       unsigned long flags,
500                                       int skip, int pc, struct pt_regs *regs)
501 {
502 }
503
504 #endif
505
506 static void tracer_tracing_on(struct trace_array *tr)
507 {
508         if (tr->trace_buffer.buffer)
509                 ring_buffer_record_on(tr->trace_buffer.buffer);
510         /*
511          * This flag is looked at when buffers haven't been allocated
512          * yet, or by some tracers (like irqsoff), that just want to
513          * know if the ring buffer has been disabled, but it can handle
514          * races of where it gets disabled but we still do a record.
515          * As the check is in the fast path of the tracers, it is more
516          * important to be fast than accurate.
517          */
518         tr->buffer_disabled = 0;
519         /* Make the flag seen by readers */
520         smp_wmb();
521 }
522
523 /**
524  * tracing_on - enable tracing buffers
525  *
526  * This function enables tracing buffers that may have been
527  * disabled with tracing_off.
528  */
529 void tracing_on(void)
530 {
531         tracer_tracing_on(&global_trace);
532 }
533 EXPORT_SYMBOL_GPL(tracing_on);
534
535 /**
536  * __trace_puts - write a constant string into the trace buffer.
537  * @ip:    The address of the caller
538  * @str:   The constant string to write
539  * @size:  The size of the string.
540  */
541 int __trace_puts(unsigned long ip, const char *str, int size)
542 {
543         struct ring_buffer_event *event;
544         struct ring_buffer *buffer;
545         struct print_entry *entry;
546         unsigned long irq_flags;
547         int alloc;
548         int pc;
549
550         if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
551                 return 0;
552
553         pc = preempt_count();
554
555         if (unlikely(tracing_selftest_running || tracing_disabled))
556                 return 0;
557
558         alloc = sizeof(*entry) + size + 2; /* possible \n added */
559
560         local_save_flags(irq_flags);
561         buffer = global_trace.trace_buffer.buffer;
562         event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc, 
563                                           irq_flags, pc);
564         if (!event)
565                 return 0;
566
567         entry = ring_buffer_event_data(event);
568         entry->ip = ip;
569
570         memcpy(&entry->buf, str, size);
571
572         /* Add a newline if necessary */
573         if (entry->buf[size - 1] != '\n') {
574                 entry->buf[size] = '\n';
575                 entry->buf[size + 1] = '\0';
576         } else
577                 entry->buf[size] = '\0';
578
579         __buffer_unlock_commit(buffer, event);
580         ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL);
581
582         return size;
583 }
584 EXPORT_SYMBOL_GPL(__trace_puts);
585
586 /**
587  * __trace_bputs - write the pointer to a constant string into trace buffer
588  * @ip:    The address of the caller
589  * @str:   The constant string to write to the buffer to
590  */
591 int __trace_bputs(unsigned long ip, const char *str)
592 {
593         struct ring_buffer_event *event;
594         struct ring_buffer *buffer;
595         struct bputs_entry *entry;
596         unsigned long irq_flags;
597         int size = sizeof(struct bputs_entry);
598         int pc;
599
600         if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
601                 return 0;
602
603         pc = preempt_count();
604
605         if (unlikely(tracing_selftest_running || tracing_disabled))
606                 return 0;
607
608         local_save_flags(irq_flags);
609         buffer = global_trace.trace_buffer.buffer;
610         event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
611                                           irq_flags, pc);
612         if (!event)
613                 return 0;
614
615         entry = ring_buffer_event_data(event);
616         entry->ip                       = ip;
617         entry->str                      = str;
618
619         __buffer_unlock_commit(buffer, event);
620         ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL);
621
622         return 1;
623 }
624 EXPORT_SYMBOL_GPL(__trace_bputs);
625
626 #ifdef CONFIG_TRACER_SNAPSHOT
627 /**
628  * trace_snapshot - take a snapshot of the current buffer.
629  *
630  * This causes a swap between the snapshot buffer and the current live
631  * tracing buffer. You can use this to take snapshots of the live
632  * trace when some condition is triggered, but continue to trace.
633  *
634  * Note, make sure to allocate the snapshot with either
635  * a tracing_snapshot_alloc(), or by doing it manually
636  * with: echo 1 > /sys/kernel/debug/tracing/snapshot
637  *
638  * If the snapshot buffer is not allocated, it will stop tracing.
639  * Basically making a permanent snapshot.
640  */
641 void tracing_snapshot(void)
642 {
643         struct trace_array *tr = &global_trace;
644         struct tracer *tracer = tr->current_trace;
645         unsigned long flags;
646
647         if (in_nmi()) {
648                 internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n");
649                 internal_trace_puts("*** snapshot is being ignored        ***\n");
650                 return;
651         }
652
653         if (!tr->allocated_snapshot) {
654                 internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n");
655                 internal_trace_puts("*** stopping trace here!   ***\n");
656                 tracing_off();
657                 return;
658         }
659
660         /* Note, snapshot can not be used when the tracer uses it */
661         if (tracer->use_max_tr) {
662                 internal_trace_puts("*** LATENCY TRACER ACTIVE ***\n");
663                 internal_trace_puts("*** Can not use snapshot (sorry) ***\n");
664                 return;
665         }
666
667         local_irq_save(flags);
668         update_max_tr(tr, current, smp_processor_id());
669         local_irq_restore(flags);
670 }
671 EXPORT_SYMBOL_GPL(tracing_snapshot);
672
673 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
674                                         struct trace_buffer *size_buf, int cpu_id);
675 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val);
676
677 static int alloc_snapshot(struct trace_array *tr)
678 {
679         int ret;
680
681         if (!tr->allocated_snapshot) {
682
683                 /* allocate spare buffer */
684                 ret = resize_buffer_duplicate_size(&tr->max_buffer,
685                                    &tr->trace_buffer, RING_BUFFER_ALL_CPUS);
686                 if (ret < 0)
687                         return ret;
688
689                 tr->allocated_snapshot = true;
690         }
691
692         return 0;
693 }
694
695 static void free_snapshot(struct trace_array *tr)
696 {
697         /*
698          * We don't free the ring buffer. instead, resize it because
699          * The max_tr ring buffer has some state (e.g. ring->clock) and
700          * we want preserve it.
701          */
702         ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS);
703         set_buffer_entries(&tr->max_buffer, 1);
704         tracing_reset_online_cpus(&tr->max_buffer);
705         tr->allocated_snapshot = false;
706 }
707
708 /**
709  * tracing_alloc_snapshot - allocate snapshot buffer.
710  *
711  * This only allocates the snapshot buffer if it isn't already
712  * allocated - it doesn't also take a snapshot.
713  *
714  * This is meant to be used in cases where the snapshot buffer needs
715  * to be set up for events that can't sleep but need to be able to
716  * trigger a snapshot.
717  */
718 int tracing_alloc_snapshot(void)
719 {
720         struct trace_array *tr = &global_trace;
721         int ret;
722
723         ret = alloc_snapshot(tr);
724         WARN_ON(ret < 0);
725
726         return ret;
727 }
728 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
729
730 /**
731  * trace_snapshot_alloc - allocate and take a snapshot of the current buffer.
732  *
733  * This is similar to trace_snapshot(), but it will allocate the
734  * snapshot buffer if it isn't already allocated. Use this only
735  * where it is safe to sleep, as the allocation may sleep.
736  *
737  * This causes a swap between the snapshot buffer and the current live
738  * tracing buffer. You can use this to take snapshots of the live
739  * trace when some condition is triggered, but continue to trace.
740  */
741 void tracing_snapshot_alloc(void)
742 {
743         int ret;
744
745         ret = tracing_alloc_snapshot();
746         if (ret < 0)
747                 return;
748
749         tracing_snapshot();
750 }
751 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
752 #else
753 void tracing_snapshot(void)
754 {
755         WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used");
756 }
757 EXPORT_SYMBOL_GPL(tracing_snapshot);
758 int tracing_alloc_snapshot(void)
759 {
760         WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used");
761         return -ENODEV;
762 }
763 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
764 void tracing_snapshot_alloc(void)
765 {
766         /* Give warning */
767         tracing_snapshot();
768 }
769 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
770 #endif /* CONFIG_TRACER_SNAPSHOT */
771
772 static void tracer_tracing_off(struct trace_array *tr)
773 {
774         if (tr->trace_buffer.buffer)
775                 ring_buffer_record_off(tr->trace_buffer.buffer);
776         /*
777          * This flag is looked at when buffers haven't been allocated
778          * yet, or by some tracers (like irqsoff), that just want to
779          * know if the ring buffer has been disabled, but it can handle
780          * races of where it gets disabled but we still do a record.
781          * As the check is in the fast path of the tracers, it is more
782          * important to be fast than accurate.
783          */
784         tr->buffer_disabled = 1;
785         /* Make the flag seen by readers */
786         smp_wmb();
787 }
788
789 /**
790  * tracing_off - turn off tracing buffers
791  *
792  * This function stops the tracing buffers from recording data.
793  * It does not disable any overhead the tracers themselves may
794  * be causing. This function simply causes all recording to
795  * the ring buffers to fail.
796  */
797 void tracing_off(void)
798 {
799         tracer_tracing_off(&global_trace);
800 }
801 EXPORT_SYMBOL_GPL(tracing_off);
802
803 void disable_trace_on_warning(void)
804 {
805         if (__disable_trace_on_warning)
806                 tracing_off();
807 }
808
809 /**
810  * tracer_tracing_is_on - show real state of ring buffer enabled
811  * @tr : the trace array to know if ring buffer is enabled
812  *
813  * Shows real state of the ring buffer if it is enabled or not.
814  */
815 static int tracer_tracing_is_on(struct trace_array *tr)
816 {
817         if (tr->trace_buffer.buffer)
818                 return ring_buffer_record_is_on(tr->trace_buffer.buffer);
819         return !tr->buffer_disabled;
820 }
821
822 /**
823  * tracing_is_on - show state of ring buffers enabled
824  */
825 int tracing_is_on(void)
826 {
827         return tracer_tracing_is_on(&global_trace);
828 }
829 EXPORT_SYMBOL_GPL(tracing_is_on);
830
831 static int __init set_buf_size(char *str)
832 {
833         unsigned long buf_size;
834
835         if (!str)
836                 return 0;
837         buf_size = memparse(str, &str);
838         /* nr_entries can not be zero */
839         if (buf_size == 0)
840                 return 0;
841         trace_buf_size = buf_size;
842         return 1;
843 }
844 __setup("trace_buf_size=", set_buf_size);
845
846 static int __init set_tracing_thresh(char *str)
847 {
848         unsigned long threshold;
849         int ret;
850
851         if (!str)
852                 return 0;
853         ret = kstrtoul(str, 0, &threshold);
854         if (ret < 0)
855                 return 0;
856         tracing_thresh = threshold * 1000;
857         return 1;
858 }
859 __setup("tracing_thresh=", set_tracing_thresh);
860
861 unsigned long nsecs_to_usecs(unsigned long nsecs)
862 {
863         return nsecs / 1000;
864 }
865
866 /*
867  * TRACE_FLAGS is defined as a tuple matching bit masks with strings.
868  * It uses C(a, b) where 'a' is the enum name and 'b' is the string that
869  * matches it. By defining "C(a, b) b", TRACE_FLAGS becomes a list
870  * of strings in the order that the enums were defined.
871  */
872 #undef C
873 #define C(a, b) b
874
875 /* These must match the bit postions in trace_iterator_flags */
876 static const char *trace_options[] = {
877         TRACE_FLAGS
878         NULL
879 };
880
881 static struct {
882         u64 (*func)(void);
883         const char *name;
884         int in_ns;              /* is this clock in nanoseconds? */
885 } trace_clocks[] = {
886         { trace_clock_local,            "local",        1 },
887         { trace_clock_global,           "global",       1 },
888         { trace_clock_counter,          "counter",      0 },
889         { trace_clock_jiffies,          "uptime",       0 },
890         { trace_clock,                  "perf",         1 },
891         { ktime_get_mono_fast_ns,       "mono",         1 },
892         { ktime_get_raw_fast_ns,        "mono_raw",     1 },
893         { ktime_get_boot_fast_ns,       "boot",         1 },
894         ARCH_TRACE_CLOCKS
895 };
896
897 /*
898  * trace_parser_get_init - gets the buffer for trace parser
899  */
900 int trace_parser_get_init(struct trace_parser *parser, int size)
901 {
902         memset(parser, 0, sizeof(*parser));
903
904         parser->buffer = kmalloc(size, GFP_KERNEL);
905         if (!parser->buffer)
906                 return 1;
907
908         parser->size = size;
909         return 0;
910 }
911
912 /*
913  * trace_parser_put - frees the buffer for trace parser
914  */
915 void trace_parser_put(struct trace_parser *parser)
916 {
917         kfree(parser->buffer);
918 }
919
920 /*
921  * trace_get_user - reads the user input string separated by  space
922  * (matched by isspace(ch))
923  *
924  * For each string found the 'struct trace_parser' is updated,
925  * and the function returns.
926  *
927  * Returns number of bytes read.
928  *
929  * See kernel/trace/trace.h for 'struct trace_parser' details.
930  */
931 int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
932         size_t cnt, loff_t *ppos)
933 {
934         char ch;
935         size_t read = 0;
936         ssize_t ret;
937
938         if (!*ppos)
939                 trace_parser_clear(parser);
940
941         ret = get_user(ch, ubuf++);
942         if (ret)
943                 goto out;
944
945         read++;
946         cnt--;
947
948         /*
949          * The parser is not finished with the last write,
950          * continue reading the user input without skipping spaces.
951          */
952         if (!parser->cont) {
953                 /* skip white space */
954                 while (cnt && isspace(ch)) {
955                         ret = get_user(ch, ubuf++);
956                         if (ret)
957                                 goto out;
958                         read++;
959                         cnt--;
960                 }
961
962                 /* only spaces were written */
963                 if (isspace(ch)) {
964                         *ppos += read;
965                         ret = read;
966                         goto out;
967                 }
968
969                 parser->idx = 0;
970         }
971
972         /* read the non-space input */
973         while (cnt && !isspace(ch)) {
974                 if (parser->idx < parser->size - 1)
975                         parser->buffer[parser->idx++] = ch;
976                 else {
977                         ret = -EINVAL;
978                         goto out;
979                 }
980                 ret = get_user(ch, ubuf++);
981                 if (ret)
982                         goto out;
983                 read++;
984                 cnt--;
985         }
986
987         /* We either got finished input or we have to wait for another call. */
988         if (isspace(ch)) {
989                 parser->buffer[parser->idx] = 0;
990                 parser->cont = false;
991         } else if (parser->idx < parser->size - 1) {
992                 parser->cont = true;
993                 parser->buffer[parser->idx++] = ch;
994         } else {
995                 ret = -EINVAL;
996                 goto out;
997         }
998
999         *ppos += read;
1000         ret = read;
1001
1002 out:
1003         return ret;
1004 }
1005
1006 /* TODO add a seq_buf_to_buffer() */
1007 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt)
1008 {
1009         int len;
1010
1011         if (trace_seq_used(s) <= s->seq.readpos)
1012                 return -EBUSY;
1013
1014         len = trace_seq_used(s) - s->seq.readpos;
1015         if (cnt > len)
1016                 cnt = len;
1017         memcpy(buf, s->buffer + s->seq.readpos, cnt);
1018
1019         s->seq.readpos += cnt;
1020         return cnt;
1021 }
1022
1023 unsigned long __read_mostly     tracing_thresh;
1024
1025 #ifdef CONFIG_TRACER_MAX_TRACE
1026 /*
1027  * Copy the new maximum trace into the separate maximum-trace
1028  * structure. (this way the maximum trace is permanently saved,
1029  * for later retrieval via /sys/kernel/debug/tracing/latency_trace)
1030  */
1031 static void
1032 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1033 {
1034         struct trace_buffer *trace_buf = &tr->trace_buffer;
1035         struct trace_buffer *max_buf = &tr->max_buffer;
1036         struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu);
1037         struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu);
1038
1039         max_buf->cpu = cpu;
1040         max_buf->time_start = data->preempt_timestamp;
1041
1042         max_data->saved_latency = tr->max_latency;
1043         max_data->critical_start = data->critical_start;
1044         max_data->critical_end = data->critical_end;
1045
1046         memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
1047         max_data->pid = tsk->pid;
1048         /*
1049          * If tsk == current, then use current_uid(), as that does not use
1050          * RCU. The irq tracer can be called out of RCU scope.
1051          */
1052         if (tsk == current)
1053                 max_data->uid = current_uid();
1054         else
1055                 max_data->uid = task_uid(tsk);
1056
1057         max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
1058         max_data->policy = tsk->policy;
1059         max_data->rt_priority = tsk->rt_priority;
1060
1061         /* record this tasks comm */
1062         tracing_record_cmdline(tsk);
1063 }
1064
1065 /**
1066  * update_max_tr - snapshot all trace buffers from global_trace to max_tr
1067  * @tr: tracer
1068  * @tsk: the task with the latency
1069  * @cpu: The cpu that initiated the trace.
1070  *
1071  * Flip the buffers between the @tr and the max_tr and record information
1072  * about which task was the cause of this latency.
1073  */
1074 void
1075 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1076 {
1077         struct ring_buffer *buf;
1078
1079         if (tr->stop_count)
1080                 return;
1081
1082         WARN_ON_ONCE(!irqs_disabled());
1083
1084         if (!tr->allocated_snapshot) {
1085                 /* Only the nop tracer should hit this when disabling */
1086                 WARN_ON_ONCE(tr->current_trace != &nop_trace);
1087                 return;
1088         }
1089
1090         arch_spin_lock(&tr->max_lock);
1091
1092         buf = tr->trace_buffer.buffer;
1093         tr->trace_buffer.buffer = tr->max_buffer.buffer;
1094         tr->max_buffer.buffer = buf;
1095
1096         __update_max_tr(tr, tsk, cpu);
1097         arch_spin_unlock(&tr->max_lock);
1098 }
1099
1100 /**
1101  * update_max_tr_single - only copy one trace over, and reset the rest
1102  * @tr - tracer
1103  * @tsk - task with the latency
1104  * @cpu - the cpu of the buffer to copy.
1105  *
1106  * Flip the trace of a single CPU buffer between the @tr and the max_tr.
1107  */
1108 void
1109 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
1110 {
1111         int ret;
1112
1113         if (tr->stop_count)
1114                 return;
1115
1116         WARN_ON_ONCE(!irqs_disabled());
1117         if (!tr->allocated_snapshot) {
1118                 /* Only the nop tracer should hit this when disabling */
1119                 WARN_ON_ONCE(tr->current_trace != &nop_trace);
1120                 return;
1121         }
1122
1123         arch_spin_lock(&tr->max_lock);
1124
1125         ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu);
1126
1127         if (ret == -EBUSY) {
1128                 /*
1129                  * We failed to swap the buffer due to a commit taking
1130                  * place on this CPU. We fail to record, but we reset
1131                  * the max trace buffer (no one writes directly to it)
1132                  * and flag that it failed.
1133                  */
1134                 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_,
1135                         "Failed to swap buffers due to commit in progress\n");
1136         }
1137
1138         WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY);
1139
1140         __update_max_tr(tr, tsk, cpu);
1141         arch_spin_unlock(&tr->max_lock);
1142 }
1143 #endif /* CONFIG_TRACER_MAX_TRACE */
1144
1145 static int wait_on_pipe(struct trace_iterator *iter, bool full)
1146 {
1147         /* Iterators are static, they should be filled or empty */
1148         if (trace_buffer_iter(iter, iter->cpu_file))
1149                 return 0;
1150
1151         return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file,
1152                                 full);
1153 }
1154
1155 #ifdef CONFIG_FTRACE_STARTUP_TEST
1156 static int run_tracer_selftest(struct tracer *type)
1157 {
1158         struct trace_array *tr = &global_trace;
1159         struct tracer *saved_tracer = tr->current_trace;
1160         int ret;
1161
1162         if (!type->selftest || tracing_selftest_disabled)
1163                 return 0;
1164
1165         /*
1166          * Run a selftest on this tracer.
1167          * Here we reset the trace buffer, and set the current
1168          * tracer to be this tracer. The tracer can then run some
1169          * internal tracing to verify that everything is in order.
1170          * If we fail, we do not register this tracer.
1171          */
1172         tracing_reset_online_cpus(&tr->trace_buffer);
1173
1174         tr->current_trace = type;
1175
1176 #ifdef CONFIG_TRACER_MAX_TRACE
1177         if (type->use_max_tr) {
1178                 /* If we expanded the buffers, make sure the max is expanded too */
1179                 if (ring_buffer_expanded)
1180                         ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size,
1181                                            RING_BUFFER_ALL_CPUS);
1182                 tr->allocated_snapshot = true;
1183         }
1184 #endif
1185
1186         /* the test is responsible for initializing and enabling */
1187         pr_info("Testing tracer %s: ", type->name);
1188         ret = type->selftest(type, tr);
1189         /* the test is responsible for resetting too */
1190         tr->current_trace = saved_tracer;
1191         if (ret) {
1192                 printk(KERN_CONT "FAILED!\n");
1193                 /* Add the warning after printing 'FAILED' */
1194                 WARN_ON(1);
1195                 return -1;
1196         }
1197         /* Only reset on passing, to avoid touching corrupted buffers */
1198         tracing_reset_online_cpus(&tr->trace_buffer);
1199
1200 #ifdef CONFIG_TRACER_MAX_TRACE
1201         if (type->use_max_tr) {
1202                 tr->allocated_snapshot = false;
1203
1204                 /* Shrink the max buffer again */
1205                 if (ring_buffer_expanded)
1206                         ring_buffer_resize(tr->max_buffer.buffer, 1,
1207                                            RING_BUFFER_ALL_CPUS);
1208         }
1209 #endif
1210
1211         printk(KERN_CONT "PASSED\n");
1212         return 0;
1213 }
1214 #else
1215 static inline int run_tracer_selftest(struct tracer *type)
1216 {
1217         return 0;
1218 }
1219 #endif /* CONFIG_FTRACE_STARTUP_TEST */
1220
1221 static void add_tracer_options(struct trace_array *tr, struct tracer *t);
1222
1223 static void __init apply_trace_boot_options(void);
1224
1225 /**
1226  * register_tracer - register a tracer with the ftrace system.
1227  * @type - the plugin for the tracer
1228  *
1229  * Register a new plugin tracer.
1230  */
1231 int __init register_tracer(struct tracer *type)
1232 {
1233         struct tracer *t;
1234         int ret = 0;
1235
1236         if (!type->name) {
1237                 pr_info("Tracer must have a name\n");
1238                 return -1;
1239         }
1240
1241         if (strlen(type->name) >= MAX_TRACER_SIZE) {
1242                 pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE);
1243                 return -1;
1244         }
1245
1246         mutex_lock(&trace_types_lock);
1247
1248         tracing_selftest_running = true;
1249
1250         for (t = trace_types; t; t = t->next) {
1251                 if (strcmp(type->name, t->name) == 0) {
1252                         /* already found */
1253                         pr_info("Tracer %s already registered\n",
1254                                 type->name);
1255                         ret = -1;
1256                         goto out;
1257                 }
1258         }
1259
1260         if (!type->set_flag)
1261                 type->set_flag = &dummy_set_flag;
1262         if (!type->flags)
1263                 type->flags = &dummy_tracer_flags;
1264         else
1265                 if (!type->flags->opts)
1266                         type->flags->opts = dummy_tracer_opt;
1267
1268         ret = run_tracer_selftest(type);
1269         if (ret < 0)
1270                 goto out;
1271
1272         type->next = trace_types;
1273         trace_types = type;
1274         add_tracer_options(&global_trace, type);
1275
1276  out:
1277         tracing_selftest_running = false;
1278         mutex_unlock(&trace_types_lock);
1279
1280         if (ret || !default_bootup_tracer)
1281                 goto out_unlock;
1282
1283         if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE))
1284                 goto out_unlock;
1285
1286         printk(KERN_INFO "Starting tracer '%s'\n", type->name);
1287         /* Do we want this tracer to start on bootup? */
1288         tracing_set_tracer(&global_trace, type->name);
1289         default_bootup_tracer = NULL;
1290
1291         apply_trace_boot_options();
1292
1293         /* disable other selftests, since this will break it. */
1294         tracing_selftest_disabled = true;
1295 #ifdef CONFIG_FTRACE_STARTUP_TEST
1296         printk(KERN_INFO "Disabling FTRACE selftests due to running tracer '%s'\n",
1297                type->name);
1298 #endif
1299
1300  out_unlock:
1301         return ret;
1302 }
1303
1304 void tracing_reset(struct trace_buffer *buf, int cpu)
1305 {
1306         struct ring_buffer *buffer = buf->buffer;
1307
1308         if (!buffer)
1309                 return;
1310
1311         ring_buffer_record_disable(buffer);
1312
1313         /* Make sure all commits have finished */
1314         synchronize_sched();
1315         ring_buffer_reset_cpu(buffer, cpu);
1316
1317         ring_buffer_record_enable(buffer);
1318 }
1319
1320 void tracing_reset_online_cpus(struct trace_buffer *buf)
1321 {
1322         struct ring_buffer *buffer = buf->buffer;
1323         int cpu;
1324
1325         if (!buffer)
1326                 return;
1327
1328         ring_buffer_record_disable(buffer);
1329
1330         /* Make sure all commits have finished */
1331         synchronize_sched();
1332
1333         buf->time_start = buffer_ftrace_now(buf, buf->cpu);
1334
1335         for_each_online_cpu(cpu)
1336                 ring_buffer_reset_cpu(buffer, cpu);
1337
1338         ring_buffer_record_enable(buffer);
1339 }
1340
1341 /* Must have trace_types_lock held */
1342 void tracing_reset_all_online_cpus(void)
1343 {
1344         struct trace_array *tr;
1345
1346         list_for_each_entry(tr, &ftrace_trace_arrays, list) {
1347                 tracing_reset_online_cpus(&tr->trace_buffer);
1348 #ifdef CONFIG_TRACER_MAX_TRACE
1349                 tracing_reset_online_cpus(&tr->max_buffer);
1350 #endif
1351         }
1352 }
1353
1354 #define SAVED_CMDLINES_DEFAULT 128
1355 #define NO_CMDLINE_MAP UINT_MAX
1356 static unsigned saved_tgids[SAVED_CMDLINES_DEFAULT];
1357 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED;
1358 struct saved_cmdlines_buffer {
1359         unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1];
1360         unsigned *map_cmdline_to_pid;
1361         unsigned cmdline_num;
1362         int cmdline_idx;
1363         char *saved_cmdlines;
1364 };
1365 static struct saved_cmdlines_buffer *savedcmd;
1366
1367 /* temporary disable recording */
1368 static atomic_t trace_record_cmdline_disabled __read_mostly;
1369
1370 static inline char *get_saved_cmdlines(int idx)
1371 {
1372         return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN];
1373 }
1374
1375 static inline void set_cmdline(int idx, const char *cmdline)
1376 {
1377         memcpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN);
1378 }
1379
1380 static int allocate_cmdlines_buffer(unsigned int val,
1381                                     struct saved_cmdlines_buffer *s)
1382 {
1383         s->map_cmdline_to_pid = kmalloc(val * sizeof(*s->map_cmdline_to_pid),
1384                                         GFP_KERNEL);
1385         if (!s->map_cmdline_to_pid)
1386                 return -ENOMEM;
1387
1388         s->saved_cmdlines = kmalloc(val * TASK_COMM_LEN, GFP_KERNEL);
1389         if (!s->saved_cmdlines) {
1390                 kfree(s->map_cmdline_to_pid);
1391                 return -ENOMEM;
1392         }
1393
1394         s->cmdline_idx = 0;
1395         s->cmdline_num = val;
1396         memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP,
1397                sizeof(s->map_pid_to_cmdline));
1398         memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP,
1399                val * sizeof(*s->map_cmdline_to_pid));
1400
1401         return 0;
1402 }
1403
1404 static int trace_create_savedcmd(void)
1405 {
1406         int ret;
1407
1408         savedcmd = kmalloc(sizeof(*savedcmd), GFP_KERNEL);
1409         if (!savedcmd)
1410                 return -ENOMEM;
1411
1412         ret = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT, savedcmd);
1413         if (ret < 0) {
1414                 kfree(savedcmd);
1415                 savedcmd = NULL;
1416                 return -ENOMEM;
1417         }
1418
1419         return 0;
1420 }
1421
1422 int is_tracing_stopped(void)
1423 {
1424         return global_trace.stop_count;
1425 }
1426
1427 /**
1428  * tracing_start - quick start of the tracer
1429  *
1430  * If tracing is enabled but was stopped by tracing_stop,
1431  * this will start the tracer back up.
1432  */
1433 void tracing_start(void)
1434 {
1435         struct ring_buffer *buffer;
1436         unsigned long flags;
1437
1438         if (tracing_disabled)
1439                 return;
1440
1441         raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1442         if (--global_trace.stop_count) {
1443                 if (global_trace.stop_count < 0) {
1444                         /* Someone screwed up their debugging */
1445                         WARN_ON_ONCE(1);
1446                         global_trace.stop_count = 0;
1447                 }
1448                 goto out;
1449         }
1450
1451         /* Prevent the buffers from switching */
1452         arch_spin_lock(&global_trace.max_lock);
1453
1454         buffer = global_trace.trace_buffer.buffer;
1455         if (buffer)
1456                 ring_buffer_record_enable(buffer);
1457
1458 #ifdef CONFIG_TRACER_MAX_TRACE
1459         buffer = global_trace.max_buffer.buffer;
1460         if (buffer)
1461                 ring_buffer_record_enable(buffer);
1462 #endif
1463
1464         arch_spin_unlock(&global_trace.max_lock);
1465
1466  out:
1467         raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1468 }
1469
1470 static void tracing_start_tr(struct trace_array *tr)
1471 {
1472         struct ring_buffer *buffer;
1473         unsigned long flags;
1474
1475         if (tracing_disabled)
1476                 return;
1477
1478         /* If global, we need to also start the max tracer */
1479         if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1480                 return tracing_start();
1481
1482         raw_spin_lock_irqsave(&tr->start_lock, flags);
1483
1484         if (--tr->stop_count) {
1485                 if (tr->stop_count < 0) {
1486                         /* Someone screwed up their debugging */
1487                         WARN_ON_ONCE(1);
1488                         tr->stop_count = 0;
1489                 }
1490                 goto out;
1491         }
1492
1493         buffer = tr->trace_buffer.buffer;
1494         if (buffer)
1495                 ring_buffer_record_enable(buffer);
1496
1497  out:
1498         raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1499 }
1500
1501 /**
1502  * tracing_stop - quick stop of the tracer
1503  *
1504  * Light weight way to stop tracing. Use in conjunction with
1505  * tracing_start.
1506  */
1507 void tracing_stop(void)
1508 {
1509         struct ring_buffer *buffer;
1510         unsigned long flags;
1511
1512         raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1513         if (global_trace.stop_count++)
1514                 goto out;
1515
1516         /* Prevent the buffers from switching */
1517         arch_spin_lock(&global_trace.max_lock);
1518
1519         buffer = global_trace.trace_buffer.buffer;
1520         if (buffer)
1521                 ring_buffer_record_disable(buffer);
1522
1523 #ifdef CONFIG_TRACER_MAX_TRACE
1524         buffer = global_trace.max_buffer.buffer;
1525         if (buffer)
1526                 ring_buffer_record_disable(buffer);
1527 #endif
1528
1529         arch_spin_unlock(&global_trace.max_lock);
1530
1531  out:
1532         raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1533 }
1534
1535 static void tracing_stop_tr(struct trace_array *tr)
1536 {
1537         struct ring_buffer *buffer;
1538         unsigned long flags;
1539
1540         /* If global, we need to also stop the max tracer */
1541         if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1542                 return tracing_stop();
1543
1544         raw_spin_lock_irqsave(&tr->start_lock, flags);
1545         if (tr->stop_count++)
1546                 goto out;
1547
1548         buffer = tr->trace_buffer.buffer;
1549         if (buffer)
1550                 ring_buffer_record_disable(buffer);
1551
1552  out:
1553         raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1554 }
1555
1556 void trace_stop_cmdline_recording(void);
1557
1558 static int trace_save_cmdline(struct task_struct *tsk)
1559 {
1560         unsigned pid, idx;
1561
1562         if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT))
1563                 return 0;
1564
1565         /*
1566          * It's not the end of the world if we don't get
1567          * the lock, but we also don't want to spin
1568          * nor do we want to disable interrupts,
1569          * so if we miss here, then better luck next time.
1570          */
1571         if (!arch_spin_trylock(&trace_cmdline_lock))
1572                 return 0;
1573
1574         idx = savedcmd->map_pid_to_cmdline[tsk->pid];
1575         if (idx == NO_CMDLINE_MAP) {
1576                 idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num;
1577
1578                 /*
1579                  * Check whether the cmdline buffer at idx has a pid
1580                  * mapped. We are going to overwrite that entry so we
1581                  * need to clear the map_pid_to_cmdline. Otherwise we
1582                  * would read the new comm for the old pid.
1583                  */
1584                 pid = savedcmd->map_cmdline_to_pid[idx];
1585                 if (pid != NO_CMDLINE_MAP)
1586                         savedcmd->map_pid_to_cmdline[pid] = NO_CMDLINE_MAP;
1587
1588                 savedcmd->map_cmdline_to_pid[idx] = tsk->pid;
1589                 savedcmd->map_pid_to_cmdline[tsk->pid] = idx;
1590
1591                 savedcmd->cmdline_idx = idx;
1592         }
1593
1594         set_cmdline(idx, tsk->comm);
1595         saved_tgids[idx] = tsk->tgid;
1596         arch_spin_unlock(&trace_cmdline_lock);
1597
1598         return 1;
1599 }
1600
1601 static void __trace_find_cmdline(int pid, char comm[])
1602 {
1603         unsigned map;
1604
1605         if (!pid) {
1606                 strcpy(comm, "<idle>");
1607                 return;
1608         }
1609
1610         if (WARN_ON_ONCE(pid < 0)) {
1611                 strcpy(comm, "<XXX>");
1612                 return;
1613         }
1614
1615         if (pid > PID_MAX_DEFAULT) {
1616                 strcpy(comm, "<...>");
1617                 return;
1618         }
1619
1620         map = savedcmd->map_pid_to_cmdline[pid];
1621         if (map != NO_CMDLINE_MAP)
1622                 strcpy(comm, get_saved_cmdlines(map));
1623         else
1624                 strcpy(comm, "<...>");
1625 }
1626
1627 void trace_find_cmdline(int pid, char comm[])
1628 {
1629         preempt_disable();
1630         arch_spin_lock(&trace_cmdline_lock);
1631
1632         __trace_find_cmdline(pid, comm);
1633
1634         arch_spin_unlock(&trace_cmdline_lock);
1635         preempt_enable();
1636 }
1637
1638 int trace_find_tgid(int pid)
1639 {
1640         unsigned map;
1641         int tgid;
1642
1643         preempt_disable();
1644         arch_spin_lock(&trace_cmdline_lock);
1645         map = savedcmd->map_pid_to_cmdline[pid];
1646         if (map != NO_CMDLINE_MAP)
1647                 tgid = saved_tgids[map];
1648         else
1649                 tgid = -1;
1650
1651         arch_spin_unlock(&trace_cmdline_lock);
1652         preempt_enable();
1653
1654         return tgid;
1655 }
1656
1657 void tracing_record_cmdline(struct task_struct *tsk)
1658 {
1659         if (atomic_read(&trace_record_cmdline_disabled) || !tracing_is_on())
1660                 return;
1661
1662         if (!__this_cpu_read(trace_cmdline_save))
1663                 return;
1664
1665         if (trace_save_cmdline(tsk))
1666                 __this_cpu_write(trace_cmdline_save, false);
1667 }
1668
1669 void
1670 tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
1671                              int pc)
1672 {
1673         struct task_struct *tsk = current;
1674
1675         entry->preempt_count            = pc & 0xff;
1676         entry->pid                      = (tsk) ? tsk->pid : 0;
1677         entry->flags =
1678 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
1679                 (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) |
1680 #else
1681                 TRACE_FLAG_IRQS_NOSUPPORT |
1682 #endif
1683                 ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
1684                 ((pc & SOFTIRQ_OFFSET) ? TRACE_FLAG_SOFTIRQ : 0) |
1685                 (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
1686                 (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
1687 }
1688 EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
1689
1690 struct ring_buffer_event *
1691 trace_buffer_lock_reserve(struct ring_buffer *buffer,
1692                           int type,
1693                           unsigned long len,
1694                           unsigned long flags, int pc)
1695 {
1696         struct ring_buffer_event *event;
1697
1698         event = ring_buffer_lock_reserve(buffer, len);
1699         if (event != NULL) {
1700                 struct trace_entry *ent = ring_buffer_event_data(event);
1701
1702                 tracing_generic_entry_update(ent, flags, pc);
1703                 ent->type = type;
1704         }
1705
1706         return event;
1707 }
1708
1709 void
1710 __buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event)
1711 {
1712         __this_cpu_write(trace_cmdline_save, true);
1713         ring_buffer_unlock_commit(buffer, event);
1714 }
1715
1716 void trace_buffer_unlock_commit(struct trace_array *tr,
1717                                 struct ring_buffer *buffer,
1718                                 struct ring_buffer_event *event,
1719                                 unsigned long flags, int pc)
1720 {
1721         __buffer_unlock_commit(buffer, event);
1722
1723         ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL);
1724         ftrace_trace_userstack(buffer, flags, pc);
1725 }
1726 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit);
1727
1728 static struct ring_buffer *temp_buffer;
1729
1730 struct ring_buffer_event *
1731 trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
1732                           struct trace_event_file *trace_file,
1733                           int type, unsigned long len,
1734                           unsigned long flags, int pc)
1735 {
1736         struct ring_buffer_event *entry;
1737
1738         *current_rb = trace_file->tr->trace_buffer.buffer;
1739         entry = trace_buffer_lock_reserve(*current_rb,
1740                                          type, len, flags, pc);
1741         /*
1742          * If tracing is off, but we have triggers enabled
1743          * we still need to look at the event data. Use the temp_buffer
1744          * to store the trace event for the tigger to use. It's recusive
1745          * safe and will not be recorded anywhere.
1746          */
1747         if (!entry && trace_file->flags & EVENT_FILE_FL_TRIGGER_COND) {
1748                 *current_rb = temp_buffer;
1749                 entry = trace_buffer_lock_reserve(*current_rb,
1750                                                   type, len, flags, pc);
1751         }
1752         return entry;
1753 }
1754 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve);
1755
1756 struct ring_buffer_event *
1757 trace_current_buffer_lock_reserve(struct ring_buffer **current_rb,
1758                                   int type, unsigned long len,
1759                                   unsigned long flags, int pc)
1760 {
1761         *current_rb = global_trace.trace_buffer.buffer;
1762         return trace_buffer_lock_reserve(*current_rb,
1763                                          type, len, flags, pc);
1764 }
1765 EXPORT_SYMBOL_GPL(trace_current_buffer_lock_reserve);
1766
1767 void trace_buffer_unlock_commit_regs(struct trace_array *tr,
1768                                      struct ring_buffer *buffer,
1769                                      struct ring_buffer_event *event,
1770                                      unsigned long flags, int pc,
1771                                      struct pt_regs *regs)
1772 {
1773         __buffer_unlock_commit(buffer, event);
1774
1775         ftrace_trace_stack(tr, buffer, flags, 0, pc, regs);
1776         ftrace_trace_userstack(buffer, flags, pc);
1777 }
1778 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit_regs);
1779
1780 void trace_current_buffer_discard_commit(struct ring_buffer *buffer,
1781                                          struct ring_buffer_event *event)
1782 {
1783         ring_buffer_discard_commit(buffer, event);
1784 }
1785 EXPORT_SYMBOL_GPL(trace_current_buffer_discard_commit);
1786
1787 void
1788 trace_function(struct trace_array *tr,
1789                unsigned long ip, unsigned long parent_ip, unsigned long flags,
1790                int pc)
1791 {
1792         struct trace_event_call *call = &event_function;
1793         struct ring_buffer *buffer = tr->trace_buffer.buffer;
1794         struct ring_buffer_event *event;
1795         struct ftrace_entry *entry;
1796
1797         event = trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry),
1798                                           flags, pc);
1799         if (!event)
1800                 return;
1801         entry   = ring_buffer_event_data(event);
1802         entry->ip                       = ip;
1803         entry->parent_ip                = parent_ip;
1804
1805         if (!call_filter_check_discard(call, entry, buffer, event))
1806                 __buffer_unlock_commit(buffer, event);
1807 }
1808
1809 #ifdef CONFIG_STACKTRACE
1810
1811 #define FTRACE_STACK_MAX_ENTRIES (PAGE_SIZE / sizeof(unsigned long))
1812 struct ftrace_stack {
1813         unsigned long           calls[FTRACE_STACK_MAX_ENTRIES];
1814 };
1815
1816 static DEFINE_PER_CPU(struct ftrace_stack, ftrace_stack);
1817 static DEFINE_PER_CPU(int, ftrace_stack_reserve);
1818
1819 static void __ftrace_trace_stack(struct ring_buffer *buffer,
1820                                  unsigned long flags,
1821                                  int skip, int pc, struct pt_regs *regs)
1822 {
1823         struct trace_event_call *call = &event_kernel_stack;
1824         struct ring_buffer_event *event;
1825         struct stack_entry *entry;
1826         struct stack_trace trace;
1827         int use_stack;
1828         int size = FTRACE_STACK_ENTRIES;
1829
1830         trace.nr_entries        = 0;
1831         trace.skip              = skip;
1832
1833         /*
1834          * Since events can happen in NMIs there's no safe way to
1835          * use the per cpu ftrace_stacks. We reserve it and if an interrupt
1836          * or NMI comes in, it will just have to use the default
1837          * FTRACE_STACK_SIZE.
1838          */
1839         preempt_disable_notrace();
1840
1841         use_stack = __this_cpu_inc_return(ftrace_stack_reserve);
1842         /*
1843          * We don't need any atomic variables, just a barrier.
1844          * If an interrupt comes in, we don't care, because it would
1845          * have exited and put the counter back to what we want.
1846          * We just need a barrier to keep gcc from moving things
1847          * around.
1848          */
1849         barrier();
1850         if (use_stack == 1) {
1851                 trace.entries           = this_cpu_ptr(ftrace_stack.calls);
1852                 trace.max_entries       = FTRACE_STACK_MAX_ENTRIES;
1853
1854                 if (regs)
1855                         save_stack_trace_regs(regs, &trace);
1856                 else
1857                         save_stack_trace(&trace);
1858
1859                 if (trace.nr_entries > size)
1860                         size = trace.nr_entries;
1861         } else
1862                 /* From now on, use_stack is a boolean */
1863                 use_stack = 0;
1864
1865         size *= sizeof(unsigned long);
1866
1867         event = trace_buffer_lock_reserve(buffer, TRACE_STACK,
1868                                           sizeof(*entry) + size, flags, pc);
1869         if (!event)
1870                 goto out;
1871         entry = ring_buffer_event_data(event);
1872
1873         memset(&entry->caller, 0, size);
1874
1875         if (use_stack)
1876                 memcpy(&entry->caller, trace.entries,
1877                        trace.nr_entries * sizeof(unsigned long));
1878         else {
1879                 trace.max_entries       = FTRACE_STACK_ENTRIES;
1880                 trace.entries           = entry->caller;
1881                 if (regs)
1882                         save_stack_trace_regs(regs, &trace);
1883                 else
1884                         save_stack_trace(&trace);
1885         }
1886
1887         entry->size = trace.nr_entries;
1888
1889         if (!call_filter_check_discard(call, entry, buffer, event))
1890                 __buffer_unlock_commit(buffer, event);
1891
1892  out:
1893         /* Again, don't let gcc optimize things here */
1894         barrier();
1895         __this_cpu_dec(ftrace_stack_reserve);
1896         preempt_enable_notrace();
1897
1898 }
1899
1900 static inline void ftrace_trace_stack(struct trace_array *tr,
1901                                       struct ring_buffer *buffer,
1902                                       unsigned long flags,
1903                                       int skip, int pc, struct pt_regs *regs)
1904 {
1905         if (!(tr->trace_flags & TRACE_ITER_STACKTRACE))
1906                 return;
1907
1908         __ftrace_trace_stack(buffer, flags, skip, pc, regs);
1909 }
1910
1911 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
1912                    int pc)
1913 {
1914         __ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL);
1915 }
1916
1917 /**
1918  * trace_dump_stack - record a stack back trace in the trace buffer
1919  * @skip: Number of functions to skip (helper handlers)
1920  */
1921 void trace_dump_stack(int skip)
1922 {
1923         unsigned long flags;
1924
1925         if (tracing_disabled || tracing_selftest_running)
1926                 return;
1927
1928         local_save_flags(flags);
1929
1930         /*
1931          * Skip 3 more, seems to get us at the caller of
1932          * this function.
1933          */
1934         skip += 3;
1935         __ftrace_trace_stack(global_trace.trace_buffer.buffer,
1936                              flags, skip, preempt_count(), NULL);
1937 }
1938
1939 static DEFINE_PER_CPU(int, user_stack_count);
1940
1941 void
1942 ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
1943 {
1944         struct trace_event_call *call = &event_user_stack;
1945         struct ring_buffer_event *event;
1946         struct userstack_entry *entry;
1947         struct stack_trace trace;
1948
1949         if (!(global_trace.trace_flags & TRACE_ITER_USERSTACKTRACE))
1950                 return;
1951
1952         /*
1953          * NMIs can not handle page faults, even with fix ups.
1954          * The save user stack can (and often does) fault.
1955          */
1956         if (unlikely(in_nmi()))
1957                 return;
1958
1959         /*
1960          * prevent recursion, since the user stack tracing may
1961          * trigger other kernel events.
1962          */
1963         preempt_disable();
1964         if (__this_cpu_read(user_stack_count))
1965                 goto out;
1966
1967         __this_cpu_inc(user_stack_count);
1968
1969         event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK,
1970                                           sizeof(*entry), flags, pc);
1971         if (!event)
1972                 goto out_drop_count;
1973         entry   = ring_buffer_event_data(event);
1974
1975         entry->tgid             = current->tgid;
1976         memset(&entry->caller, 0, sizeof(entry->caller));
1977
1978         trace.nr_entries        = 0;
1979         trace.max_entries       = FTRACE_STACK_ENTRIES;
1980         trace.skip              = 0;
1981         trace.entries           = entry->caller;
1982
1983         save_stack_trace_user(&trace);
1984         if (!call_filter_check_discard(call, entry, buffer, event))
1985                 __buffer_unlock_commit(buffer, event);
1986
1987  out_drop_count:
1988         __this_cpu_dec(user_stack_count);
1989  out:
1990         preempt_enable();
1991 }
1992
1993 #ifdef UNUSED
1994 static void __trace_userstack(struct trace_array *tr, unsigned long flags)
1995 {
1996         ftrace_trace_userstack(tr, flags, preempt_count());
1997 }
1998 #endif /* UNUSED */
1999
2000 #endif /* CONFIG_STACKTRACE */
2001
2002 /* created for use with alloc_percpu */
2003 struct trace_buffer_struct {
2004         char buffer[TRACE_BUF_SIZE];
2005 };
2006
2007 static struct trace_buffer_struct *trace_percpu_buffer;
2008 static struct trace_buffer_struct *trace_percpu_sirq_buffer;
2009 static struct trace_buffer_struct *trace_percpu_irq_buffer;
2010 static struct trace_buffer_struct *trace_percpu_nmi_buffer;
2011
2012 /*
2013  * The buffer used is dependent on the context. There is a per cpu
2014  * buffer for normal context, softirq contex, hard irq context and
2015  * for NMI context. Thise allows for lockless recording.
2016  *
2017  * Note, if the buffers failed to be allocated, then this returns NULL
2018  */
2019 static char *get_trace_buf(void)
2020 {
2021         struct trace_buffer_struct *percpu_buffer;
2022
2023         /*
2024          * If we have allocated per cpu buffers, then we do not
2025          * need to do any locking.
2026          */
2027         if (in_nmi())
2028                 percpu_buffer = trace_percpu_nmi_buffer;
2029         else if (in_irq())
2030                 percpu_buffer = trace_percpu_irq_buffer;
2031         else if (in_softirq())
2032                 percpu_buffer = trace_percpu_sirq_buffer;
2033         else
2034                 percpu_buffer = trace_percpu_buffer;
2035
2036         if (!percpu_buffer)
2037                 return NULL;
2038
2039         return this_cpu_ptr(&percpu_buffer->buffer[0]);
2040 }
2041
2042 static int alloc_percpu_trace_buffer(void)
2043 {
2044         struct trace_buffer_struct *buffers;
2045         struct trace_buffer_struct *sirq_buffers;
2046         struct trace_buffer_struct *irq_buffers;
2047         struct trace_buffer_struct *nmi_buffers;
2048
2049         buffers = alloc_percpu(struct trace_buffer_struct);
2050         if (!buffers)
2051                 goto err_warn;
2052
2053         sirq_buffers = alloc_percpu(struct trace_buffer_struct);
2054         if (!sirq_buffers)
2055                 goto err_sirq;
2056
2057         irq_buffers = alloc_percpu(struct trace_buffer_struct);
2058         if (!irq_buffers)
2059                 goto err_irq;
2060
2061         nmi_buffers = alloc_percpu(struct trace_buffer_struct);
2062         if (!nmi_buffers)
2063                 goto err_nmi;
2064
2065         trace_percpu_buffer = buffers;
2066         trace_percpu_sirq_buffer = sirq_buffers;
2067         trace_percpu_irq_buffer = irq_buffers;
2068         trace_percpu_nmi_buffer = nmi_buffers;
2069
2070         return 0;
2071
2072  err_nmi:
2073         free_percpu(irq_buffers);
2074  err_irq:
2075         free_percpu(sirq_buffers);
2076  err_sirq:
2077         free_percpu(buffers);
2078  err_warn:
2079         WARN(1, "Could not allocate percpu trace_printk buffer");
2080         return -ENOMEM;
2081 }
2082
2083 static int buffers_allocated;
2084
2085 void trace_printk_init_buffers(void)
2086 {
2087         if (buffers_allocated)
2088                 return;
2089
2090         if (alloc_percpu_trace_buffer())
2091                 return;
2092
2093         /* trace_printk() is for debug use only. Don't use it in production. */
2094
2095         pr_warning("\n");
2096         pr_warning("**********************************************************\n");
2097         pr_warning("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
2098         pr_warning("**                                                      **\n");
2099         pr_warning("** trace_printk() being used. Allocating extra memory.  **\n");
2100         pr_warning("**                                                      **\n");
2101         pr_warning("** This means that this is a DEBUG kernel and it is     **\n");
2102         pr_warning("** unsafe for production use.                           **\n");
2103         pr_warning("**                                                      **\n");
2104         pr_warning("** If you see this message and you are not debugging    **\n");
2105         pr_warning("** the kernel, report this immediately to your vendor!  **\n");
2106         pr_warning("**                                                      **\n");
2107         pr_warning("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
2108         pr_warning("**********************************************************\n");
2109
2110         /* Expand the buffers to set size */
2111         tracing_update_buffers();
2112
2113         buffers_allocated = 1;
2114
2115         /*
2116          * trace_printk_init_buffers() can be called by modules.
2117          * If that happens, then we need to start cmdline recording
2118          * directly here. If the global_trace.buffer is already
2119          * allocated here, then this was called by module code.
2120          */
2121         if (global_trace.trace_buffer.buffer)
2122                 tracing_start_cmdline_record();
2123 }
2124
2125 void trace_printk_start_comm(void)
2126 {
2127         /* Start tracing comms if trace printk is set */
2128         if (!buffers_allocated)
2129                 return;
2130         tracing_start_cmdline_record();
2131 }
2132
2133 static void trace_printk_start_stop_comm(int enabled)
2134 {
2135         if (!buffers_allocated)
2136                 return;
2137
2138         if (enabled)
2139                 tracing_start_cmdline_record();
2140         else
2141                 tracing_stop_cmdline_record();
2142 }
2143
2144 /**
2145  * trace_vbprintk - write binary msg to tracing buffer
2146  *
2147  */
2148 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args)
2149 {
2150         struct trace_event_call *call = &event_bprint;
2151         struct ring_buffer_event *event;
2152         struct ring_buffer *buffer;
2153         struct trace_array *tr = &global_trace;
2154         struct bprint_entry *entry;
2155         unsigned long flags;
2156         char *tbuffer;
2157         int len = 0, size, pc;
2158
2159         if (unlikely(tracing_selftest_running || tracing_disabled))
2160                 return 0;
2161
2162         /* Don't pollute graph traces with trace_vprintk internals */
2163         pause_graph_tracing();
2164
2165         pc = preempt_count();
2166         preempt_disable_notrace();
2167
2168         tbuffer = get_trace_buf();
2169         if (!tbuffer) {
2170                 len = 0;
2171                 goto out;
2172         }
2173
2174         len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args);
2175
2176         if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0)
2177                 goto out;
2178
2179         local_save_flags(flags);
2180         size = sizeof(*entry) + sizeof(u32) * len;
2181         buffer = tr->trace_buffer.buffer;
2182         event = trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size,
2183                                           flags, pc);
2184         if (!event)
2185                 goto out;
2186         entry = ring_buffer_event_data(event);
2187         entry->ip                       = ip;
2188         entry->fmt                      = fmt;
2189
2190         memcpy(entry->buf, tbuffer, sizeof(u32) * len);
2191         if (!call_filter_check_discard(call, entry, buffer, event)) {
2192                 __buffer_unlock_commit(buffer, event);
2193                 ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL);
2194         }
2195
2196 out:
2197         preempt_enable_notrace();
2198         unpause_graph_tracing();
2199
2200         return len;
2201 }
2202 EXPORT_SYMBOL_GPL(trace_vbprintk);
2203
2204 static int
2205 __trace_array_vprintk(struct ring_buffer *buffer,
2206                       unsigned long ip, const char *fmt, va_list args)
2207 {
2208         struct trace_event_call *call = &event_print;
2209         struct ring_buffer_event *event;
2210         int len = 0, size, pc;
2211         struct print_entry *entry;
2212         unsigned long flags;
2213         char *tbuffer;
2214
2215         if (tracing_disabled || tracing_selftest_running)
2216                 return 0;
2217
2218         /* Don't pollute graph traces with trace_vprintk internals */
2219         pause_graph_tracing();
2220
2221         pc = preempt_count();
2222         preempt_disable_notrace();
2223
2224
2225         tbuffer = get_trace_buf();
2226         if (!tbuffer) {
2227                 len = 0;
2228                 goto out;
2229         }
2230
2231         len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args);
2232
2233         local_save_flags(flags);
2234         size = sizeof(*entry) + len + 1;
2235         event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
2236                                           flags, pc);
2237         if (!event)
2238                 goto out;
2239         entry = ring_buffer_event_data(event);
2240         entry->ip = ip;
2241
2242         memcpy(&entry->buf, tbuffer, len + 1);
2243         if (!call_filter_check_discard(call, entry, buffer, event)) {
2244                 __buffer_unlock_commit(buffer, event);
2245                 ftrace_trace_stack(&global_trace, buffer, flags, 6, pc, NULL);
2246         }
2247  out:
2248         preempt_enable_notrace();
2249         unpause_graph_tracing();
2250
2251         return len;
2252 }
2253
2254 int trace_array_vprintk(struct trace_array *tr,
2255                         unsigned long ip, const char *fmt, va_list args)
2256 {
2257         return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
2258 }
2259
2260 int trace_array_printk(struct trace_array *tr,
2261                        unsigned long ip, const char *fmt, ...)
2262 {
2263         int ret;
2264         va_list ap;
2265
2266         if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
2267                 return 0;
2268
2269         va_start(ap, fmt);
2270         ret = trace_array_vprintk(tr, ip, fmt, ap);
2271         va_end(ap);
2272         return ret;
2273 }
2274
2275 int trace_array_printk_buf(struct ring_buffer *buffer,
2276                            unsigned long ip, const char *fmt, ...)
2277 {
2278         int ret;
2279         va_list ap;
2280
2281         if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
2282                 return 0;
2283
2284         va_start(ap, fmt);
2285         ret = __trace_array_vprintk(buffer, ip, fmt, ap);
2286         va_end(ap);
2287         return ret;
2288 }
2289
2290 int trace_vprintk(unsigned long ip, const char *fmt, va_list args)
2291 {
2292         return trace_array_vprintk(&global_trace, ip, fmt, args);
2293 }
2294 EXPORT_SYMBOL_GPL(trace_vprintk);
2295
2296 static void trace_iterator_increment(struct trace_iterator *iter)
2297 {
2298         struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu);
2299
2300         iter->idx++;
2301         if (buf_iter)
2302                 ring_buffer_read(buf_iter, NULL);
2303 }
2304
2305 static struct trace_entry *
2306 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts,
2307                 unsigned long *lost_events)
2308 {
2309         struct ring_buffer_event *event;
2310         struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu);
2311
2312         if (buf_iter)
2313                 event = ring_buffer_iter_peek(buf_iter, ts);
2314         else
2315                 event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts,
2316                                          lost_events);
2317
2318         if (event) {
2319                 iter->ent_size = ring_buffer_event_length(event);
2320                 return ring_buffer_event_data(event);
2321         }
2322         iter->ent_size = 0;
2323         return NULL;
2324 }
2325
2326 static struct trace_entry *
2327 __find_next_entry(struct trace_iterator *iter, int *ent_cpu,
2328                   unsigned long *missing_events, u64 *ent_ts)
2329 {
2330         struct ring_buffer *buffer = iter->trace_buffer->buffer;
2331         struct trace_entry *ent, *next = NULL;
2332         unsigned long lost_events = 0, next_lost = 0;
2333         int cpu_file = iter->cpu_file;
2334         u64 next_ts = 0, ts;
2335         int next_cpu = -1;
2336         int next_size = 0;
2337         int cpu;
2338
2339         /*
2340          * If we are in a per_cpu trace file, don't bother by iterating over
2341          * all cpu and peek directly.
2342          */
2343         if (cpu_file > RING_BUFFER_ALL_CPUS) {
2344                 if (ring_buffer_empty_cpu(buffer, cpu_file))
2345                         return NULL;
2346                 ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events);
2347                 if (ent_cpu)
2348                         *ent_cpu = cpu_file;
2349
2350                 return ent;
2351         }
2352
2353         for_each_tracing_cpu(cpu) {
2354
2355                 if (ring_buffer_empty_cpu(buffer, cpu))
2356                         continue;
2357
2358                 ent = peek_next_entry(iter, cpu, &ts, &lost_events);
2359
2360                 /*
2361                  * Pick the entry with the smallest timestamp:
2362                  */
2363                 if (ent && (!next || ts < next_ts)) {
2364                         next = ent;
2365                         next_cpu = cpu;
2366                         next_ts = ts;
2367                         next_lost = lost_events;
2368                         next_size = iter->ent_size;
2369                 }
2370         }
2371
2372         iter->ent_size = next_size;
2373
2374         if (ent_cpu)
2375                 *ent_cpu = next_cpu;
2376
2377         if (ent_ts)
2378                 *ent_ts = next_ts;
2379
2380         if (missing_events)
2381                 *missing_events = next_lost;
2382
2383         return next;
2384 }
2385
2386 /* Find the next real entry, without updating the iterator itself */
2387 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
2388                                           int *ent_cpu, u64 *ent_ts)
2389 {
2390         return __find_next_entry(iter, ent_cpu, NULL, ent_ts);
2391 }
2392
2393 /* Find the next real entry, and increment the iterator to the next entry */
2394 void *trace_find_next_entry_inc(struct trace_iterator *iter)
2395 {
2396         iter->ent = __find_next_entry(iter, &iter->cpu,
2397                                       &iter->lost_events, &iter->ts);
2398
2399         if (iter->ent)
2400                 trace_iterator_increment(iter);
2401
2402         return iter->ent ? iter : NULL;
2403 }
2404
2405 static void trace_consume(struct trace_iterator *iter)
2406 {
2407         ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts,
2408                             &iter->lost_events);
2409 }
2410
2411 static void *s_next(struct seq_file *m, void *v, loff_t *pos)
2412 {
2413         struct trace_iterator *iter = m->private;
2414         int i = (int)*pos;
2415         void *ent;
2416
2417         WARN_ON_ONCE(iter->leftover);
2418
2419         (*pos)++;
2420
2421         /* can't go backwards */
2422         if (iter->idx > i)
2423                 return NULL;
2424
2425         if (iter->idx < 0)
2426                 ent = trace_find_next_entry_inc(iter);
2427         else
2428                 ent = iter;
2429
2430         while (ent && iter->idx < i)
2431                 ent = trace_find_next_entry_inc(iter);
2432
2433         iter->pos = *pos;
2434
2435         return ent;
2436 }
2437
2438 void tracing_iter_reset(struct trace_iterator *iter, int cpu)
2439 {
2440         struct ring_buffer_event *event;
2441         struct ring_buffer_iter *buf_iter;
2442         unsigned long entries = 0;
2443         u64 ts;
2444
2445         per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0;
2446
2447         buf_iter = trace_buffer_iter(iter, cpu);
2448         if (!buf_iter)
2449                 return;
2450
2451         ring_buffer_iter_reset(buf_iter);
2452
2453         /*
2454          * We could have the case with the max latency tracers
2455          * that a reset never took place on a cpu. This is evident
2456          * by the timestamp being before the start of the buffer.
2457          */
2458         while ((event = ring_buffer_iter_peek(buf_iter, &ts))) {
2459                 if (ts >= iter->trace_buffer->time_start)
2460                         break;
2461                 entries++;
2462                 ring_buffer_read(buf_iter, NULL);
2463         }
2464
2465         per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries;
2466 }
2467
2468 /*
2469  * The current tracer is copied to avoid a global locking
2470  * all around.
2471  */
2472 static void *s_start(struct seq_file *m, loff_t *pos)
2473 {
2474         struct trace_iterator *iter = m->private;
2475         struct trace_array *tr = iter->tr;
2476         int cpu_file = iter->cpu_file;
2477         void *p = NULL;
2478         loff_t l = 0;
2479         int cpu;
2480
2481         /*
2482          * copy the tracer to avoid using a global lock all around.
2483          * iter->trace is a copy of current_trace, the pointer to the
2484          * name may be used instead of a strcmp(), as iter->trace->name
2485          * will point to the same string as current_trace->name.
2486          */
2487         mutex_lock(&trace_types_lock);
2488         if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name))
2489                 *iter->trace = *tr->current_trace;
2490         mutex_unlock(&trace_types_lock);
2491
2492 #ifdef CONFIG_TRACER_MAX_TRACE
2493         if (iter->snapshot && iter->trace->use_max_tr)
2494                 return ERR_PTR(-EBUSY);
2495 #endif
2496
2497         if (!iter->snapshot)
2498                 atomic_inc(&trace_record_cmdline_disabled);
2499
2500         if (*pos != iter->pos) {
2501                 iter->ent = NULL;
2502                 iter->cpu = 0;
2503                 iter->idx = -1;
2504
2505                 if (cpu_file == RING_BUFFER_ALL_CPUS) {
2506                         for_each_tracing_cpu(cpu)
2507                                 tracing_iter_reset(iter, cpu);
2508                 } else
2509                         tracing_iter_reset(iter, cpu_file);
2510
2511                 iter->leftover = 0;
2512                 for (p = iter; p && l < *pos; p = s_next(m, p, &l))
2513                         ;
2514
2515         } else {
2516                 /*
2517                  * If we overflowed the seq_file before, then we want
2518                  * to just reuse the trace_seq buffer again.
2519                  */
2520                 if (iter->leftover)
2521                         p = iter;
2522                 else {
2523                         l = *pos - 1;
2524                         p = s_next(m, p, &l);
2525                 }
2526         }
2527
2528         trace_event_read_lock();
2529         trace_access_lock(cpu_file);
2530         return p;
2531 }
2532
2533 static void s_stop(struct seq_file *m, void *p)
2534 {
2535         struct trace_iterator *iter = m->private;
2536
2537 #ifdef CONFIG_TRACER_MAX_TRACE
2538         if (iter->snapshot && iter->trace->use_max_tr)
2539                 return;
2540 #endif
2541
2542         if (!iter->snapshot)
2543                 atomic_dec(&trace_record_cmdline_disabled);
2544
2545         trace_access_unlock(iter->cpu_file);
2546         trace_event_read_unlock();
2547 }
2548
2549 static void
2550 get_total_entries(struct trace_buffer *buf,
2551                   unsigned long *total, unsigned long *entries)
2552 {
2553         unsigned long count;
2554         int cpu;
2555
2556         *total = 0;
2557         *entries = 0;
2558
2559         for_each_tracing_cpu(cpu) {
2560                 count = ring_buffer_entries_cpu(buf->buffer, cpu);
2561                 /*
2562                  * If this buffer has skipped entries, then we hold all
2563                  * entries for the trace and we need to ignore the
2564                  * ones before the time stamp.
2565                  */
2566                 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) {
2567                         count -= per_cpu_ptr(buf->data, cpu)->skipped_entries;
2568                         /* total is the same as the entries */
2569                         *total += count;
2570                 } else
2571                         *total += count +
2572                                 ring_buffer_overrun_cpu(buf->buffer, cpu);
2573                 *entries += count;
2574         }
2575 }
2576
2577 static void print_lat_help_header(struct seq_file *m)
2578 {
2579         seq_puts(m, "#                  _------=> CPU#            \n"
2580                     "#                 / _-----=> irqs-off        \n"
2581                     "#                | / _----=> need-resched    \n"
2582                     "#                || / _---=> hardirq/softirq \n"
2583                     "#                ||| / _--=> preempt-depth   \n"
2584                     "#                |||| /     delay            \n"
2585                     "#  cmd     pid   ||||| time  |   caller      \n"
2586                     "#     \\   /      |||||  \\    |   /         \n");
2587 }
2588
2589 static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
2590 {
2591         unsigned long total;
2592         unsigned long entries;
2593
2594         get_total_entries(buf, &total, &entries);
2595         seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu   #P:%d\n",
2596                    entries, total, num_online_cpus());
2597         seq_puts(m, "#\n");
2598 }
2599
2600 static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m)
2601 {
2602         print_event_info(buf, m);
2603         seq_puts(m, "#           TASK-PID   CPU#      TIMESTAMP  FUNCTION\n"
2604                     "#              | |       |          |         |\n");
2605 }
2606
2607 static void print_func_help_header_tgid(struct trace_buffer *buf, struct seq_file *m)
2608 {
2609         print_event_info(buf, m);
2610         seq_puts(m, "#           TASK-PID    TGID   CPU#      TIMESTAMP  FUNCTION\n");
2611         seq_puts(m, "#              | |        |      |          |         |\n");
2612 }
2613
2614 static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m)
2615 {
2616         print_event_info(buf, m);
2617         seq_puts(m, "#                              _-----=> irqs-off\n"
2618                     "#                             / _----=> need-resched\n"
2619                     "#                            | / _---=> hardirq/softirq\n"
2620                     "#                            || / _--=> preempt-depth\n"
2621                     "#                            ||| /     delay\n"
2622                     "#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION\n"
2623                     "#              | |       |   ||||       |         |\n");
2624 }
2625
2626 static void print_func_help_header_irq_tgid(struct trace_buffer *buf, struct seq_file *m)
2627 {
2628         print_event_info(buf, m);
2629         seq_puts(m, "#                                      _-----=> irqs-off\n");
2630         seq_puts(m, "#                                     / _----=> need-resched\n");
2631         seq_puts(m, "#                                    | / _---=> hardirq/softirq\n");
2632         seq_puts(m, "#                                    || / _--=> preempt-depth\n");
2633         seq_puts(m, "#                                    ||| /     delay\n");
2634         seq_puts(m, "#           TASK-PID    TGID   CPU#  ||||    TIMESTAMP  FUNCTION\n");
2635         seq_puts(m, "#              | |        |      |   ||||       |         |\n");
2636 }
2637
2638 void
2639 print_trace_header(struct seq_file *m, struct trace_iterator *iter)
2640 {
2641         unsigned long sym_flags = (global_trace.trace_flags & TRACE_ITER_SYM_MASK);
2642         struct trace_buffer *buf = iter->trace_buffer;
2643         struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu);
2644         struct tracer *type = iter->trace;
2645         unsigned long entries;
2646         unsigned long total;
2647         const char *name = "preemption";
2648
2649         name = type->name;
2650
2651         get_total_entries(buf, &total, &entries);
2652
2653         seq_printf(m, "# %s latency trace v1.1.5 on %s\n",
2654                    name, UTS_RELEASE);
2655         seq_puts(m, "# -----------------------------------"
2656                  "---------------------------------\n");
2657         seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |"
2658                    " (M:%s VP:%d, KP:%d, SP:%d HP:%d",
2659                    nsecs_to_usecs(data->saved_latency),
2660                    entries,
2661                    total,
2662                    buf->cpu,
2663 #if defined(CONFIG_PREEMPT_NONE)
2664                    "server",
2665 #elif defined(CONFIG_PREEMPT_VOLUNTARY)
2666                    "desktop",
2667 #elif defined(CONFIG_PREEMPT)
2668                    "preempt",
2669 #else
2670                    "unknown",
2671 #endif
2672                    /* These are reserved for later use */
2673                    0, 0, 0, 0);
2674 #ifdef CONFIG_SMP
2675         seq_printf(m, " #P:%d)\n", num_online_cpus());
2676 #else
2677         seq_puts(m, ")\n");
2678 #endif
2679         seq_puts(m, "#    -----------------\n");
2680         seq_printf(m, "#    | task: %.16s-%d "
2681                    "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n",
2682                    data->comm, data->pid,
2683                    from_kuid_munged(seq_user_ns(m), data->uid), data->nice,
2684                    data->policy, data->rt_priority);
2685         seq_puts(m, "#    -----------------\n");
2686
2687         if (data->critical_start) {
2688                 seq_puts(m, "#  => started at: ");
2689                 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags);
2690                 trace_print_seq(m, &iter->seq);
2691                 seq_puts(m, "\n#  => ended at:   ");
2692                 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags);
2693                 trace_print_seq(m, &iter->seq);
2694                 seq_puts(m, "\n#\n");
2695         }
2696
2697         seq_puts(m, "#\n");
2698 }
2699
2700 static void test_cpu_buff_start(struct trace_iterator *iter)
2701 {
2702         struct trace_seq *s = &iter->seq;
2703         struct trace_array *tr = iter->tr;
2704
2705         if (!(tr->trace_flags & TRACE_ITER_ANNOTATE))
2706                 return;
2707
2708         if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
2709                 return;
2710
2711         if (cpumask_available(iter->started) &&
2712             cpumask_test_cpu(iter->cpu, iter->started))
2713                 return;
2714
2715         if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries)
2716                 return;
2717
2718         if (cpumask_available(iter->started))
2719                 cpumask_set_cpu(iter->cpu, iter->started);
2720
2721         /* Don't print started cpu buffer for the first entry of the trace */
2722         if (iter->idx > 1)
2723                 trace_seq_printf(s, "##### CPU %u buffer started ####\n",
2724                                 iter->cpu);
2725 }
2726
2727 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
2728 {
2729         struct trace_array *tr = iter->tr;
2730         struct trace_seq *s = &iter->seq;
2731         unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
2732         struct trace_entry *entry;
2733         struct trace_event *event;
2734
2735         entry = iter->ent;
2736
2737         test_cpu_buff_start(iter);
2738
2739         event = ftrace_find_event(entry->type);
2740
2741         if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2742                 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2743                         trace_print_lat_context(iter);
2744                 else
2745                         trace_print_context(iter);
2746         }
2747
2748         if (trace_seq_has_overflowed(s))
2749                 return TRACE_TYPE_PARTIAL_LINE;
2750
2751         if (event)
2752                 return event->funcs->trace(iter, sym_flags, event);
2753
2754         trace_seq_printf(s, "Unknown type %d\n", entry->type);
2755
2756         return trace_handle_return(s);
2757 }
2758
2759 static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
2760 {
2761         struct trace_array *tr = iter->tr;
2762         struct trace_seq *s = &iter->seq;
2763         struct trace_entry *entry;
2764         struct trace_event *event;
2765
2766         entry = iter->ent;
2767
2768         if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO)
2769                 trace_seq_printf(s, "%d %d %llu ",
2770                                  entry->pid, iter->cpu, iter->ts);
2771
2772         if (trace_seq_has_overflowed(s))
2773                 return TRACE_TYPE_PARTIAL_LINE;
2774
2775         event = ftrace_find_event(entry->type);
2776         if (event)
2777                 return event->funcs->raw(iter, 0, event);
2778
2779         trace_seq_printf(s, "%d ?\n", entry->type);
2780
2781         return trace_handle_return(s);
2782 }
2783
2784 static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
2785 {
2786         struct trace_array *tr = iter->tr;
2787         struct trace_seq *s = &iter->seq;
2788         unsigned char newline = '\n';
2789         struct trace_entry *entry;
2790         struct trace_event *event;
2791
2792         entry = iter->ent;
2793
2794         if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2795                 SEQ_PUT_HEX_FIELD(s, entry->pid);
2796                 SEQ_PUT_HEX_FIELD(s, iter->cpu);
2797                 SEQ_PUT_HEX_FIELD(s, iter->ts);
2798                 if (trace_seq_has_overflowed(s))
2799                         return TRACE_TYPE_PARTIAL_LINE;
2800         }
2801
2802         event = ftrace_find_event(entry->type);
2803         if (event) {
2804                 enum print_line_t ret = event->funcs->hex(iter, 0, event);
2805                 if (ret != TRACE_TYPE_HANDLED)
2806                         return ret;
2807         }
2808
2809         SEQ_PUT_FIELD(s, newline);
2810
2811         return trace_handle_return(s);
2812 }
2813
2814 static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
2815 {
2816         struct trace_array *tr = iter->tr;
2817         struct trace_seq *s = &iter->seq;
2818         struct trace_entry *entry;
2819         struct trace_event *event;
2820
2821         entry = iter->ent;
2822
2823         if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2824                 SEQ_PUT_FIELD(s, entry->pid);
2825                 SEQ_PUT_FIELD(s, iter->cpu);
2826                 SEQ_PUT_FIELD(s, iter->ts);
2827                 if (trace_seq_has_overflowed(s))
2828                         return TRACE_TYPE_PARTIAL_LINE;
2829         }
2830
2831         event = ftrace_find_event(entry->type);
2832         return event ? event->funcs->binary(iter, 0, event) :
2833                 TRACE_TYPE_HANDLED;
2834 }
2835
2836 int trace_empty(struct trace_iterator *iter)
2837 {
2838         struct ring_buffer_iter *buf_iter;
2839         int cpu;
2840
2841         /* If we are looking at one CPU buffer, only check that one */
2842         if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
2843                 cpu = iter->cpu_file;
2844                 buf_iter = trace_buffer_iter(iter, cpu);
2845                 if (buf_iter) {
2846                         if (!ring_buffer_iter_empty(buf_iter))
2847                                 return 0;
2848                 } else {
2849                         if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2850                                 return 0;
2851                 }
2852                 return 1;
2853         }
2854
2855         for_each_tracing_cpu(cpu) {
2856                 buf_iter = trace_buffer_iter(iter, cpu);
2857                 if (buf_iter) {
2858                         if (!ring_buffer_iter_empty(buf_iter))
2859                                 return 0;
2860                 } else {
2861                         if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2862                                 return 0;
2863                 }
2864         }
2865
2866         return 1;
2867 }
2868
2869 /*  Called with trace_event_read_lock() held. */
2870 enum print_line_t print_trace_line(struct trace_iterator *iter)
2871 {
2872         struct trace_array *tr = iter->tr;
2873         unsigned long trace_flags = tr->trace_flags;
2874         enum print_line_t ret;
2875
2876         if (iter->lost_events) {
2877                 trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
2878                                  iter->cpu, iter->lost_events);
2879                 if (trace_seq_has_overflowed(&iter->seq))
2880                         return TRACE_TYPE_PARTIAL_LINE;
2881         }
2882
2883         if (iter->trace && iter->trace->print_line) {
2884                 ret = iter->trace->print_line(iter);
2885                 if (ret != TRACE_TYPE_UNHANDLED)
2886                         return ret;
2887         }
2888
2889         if (iter->ent->type == TRACE_BPUTS &&
2890                         trace_flags & TRACE_ITER_PRINTK &&
2891                         trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2892                 return trace_print_bputs_msg_only(iter);
2893
2894         if (iter->ent->type == TRACE_BPRINT &&
2895                         trace_flags & TRACE_ITER_PRINTK &&
2896                         trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2897                 return trace_print_bprintk_msg_only(iter);
2898
2899         if (iter->ent->type == TRACE_PRINT &&
2900                         trace_flags & TRACE_ITER_PRINTK &&
2901                         trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2902                 return trace_print_printk_msg_only(iter);
2903
2904         if (trace_flags & TRACE_ITER_BIN)
2905                 return print_bin_fmt(iter);
2906
2907         if (trace_flags & TRACE_ITER_HEX)
2908                 return print_hex_fmt(iter);
2909
2910         if (trace_flags & TRACE_ITER_RAW)
2911                 return print_raw_fmt(iter);
2912
2913         return print_trace_fmt(iter);
2914 }
2915
2916 void trace_latency_header(struct seq_file *m)
2917 {
2918         struct trace_iterator *iter = m->private;
2919         struct trace_array *tr = iter->tr;
2920
2921         /* print nothing if the buffers are empty */
2922         if (trace_empty(iter))
2923                 return;
2924
2925         if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2926                 print_trace_header(m, iter);
2927
2928         if (!(tr->trace_flags & TRACE_ITER_VERBOSE))
2929                 print_lat_help_header(m);
2930 }
2931
2932 void trace_default_header(struct seq_file *m)
2933 {
2934         struct trace_iterator *iter = m->private;
2935         struct trace_array *tr = iter->tr;
2936         unsigned long trace_flags = tr->trace_flags;
2937
2938         if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
2939                 return;
2940
2941         if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
2942                 /* print nothing if the buffers are empty */
2943                 if (trace_empty(iter))
2944                         return;
2945                 print_trace_header(m, iter);
2946                 if (!(trace_flags & TRACE_ITER_VERBOSE))
2947                         print_lat_help_header(m);
2948         } else {
2949                 if (!(trace_flags & TRACE_ITER_VERBOSE)) {
2950                         if (trace_flags & TRACE_ITER_IRQ_INFO)
2951                                 if (trace_flags & TRACE_ITER_TGID)
2952                                         print_func_help_header_irq_tgid(iter->trace_buffer, m);
2953                                 else
2954                                         print_func_help_header_irq(iter->trace_buffer, m);
2955                         else
2956                                 if (trace_flags & TRACE_ITER_TGID)
2957                                         print_func_help_header_tgid(iter->trace_buffer, m);
2958                                 else
2959                                         print_func_help_header(iter->trace_buffer, m);
2960                 }
2961         }
2962 }
2963
2964 static void test_ftrace_alive(struct seq_file *m)
2965 {
2966         if (!ftrace_is_dead())
2967                 return;
2968         seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n"
2969                     "#          MAY BE MISSING FUNCTION EVENTS\n");
2970 }
2971
2972 #ifdef CONFIG_TRACER_MAX_TRACE
2973 static void show_snapshot_main_help(struct seq_file *m)
2974 {
2975         seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n"
2976                     "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
2977                     "#                      Takes a snapshot of the main buffer.\n"
2978                     "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n"
2979                     "#                      (Doesn't have to be '2' works with any number that\n"
2980                     "#                       is not a '0' or '1')\n");
2981 }
2982
2983 static void show_snapshot_percpu_help(struct seq_file *m)
2984 {
2985         seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n");
2986 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
2987         seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
2988                     "#                      Takes a snapshot of the main buffer for this cpu.\n");
2989 #else
2990         seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n"
2991                     "#                     Must use main snapshot file to allocate.\n");
2992 #endif
2993         seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n"
2994                     "#                      (Doesn't have to be '2' works with any number that\n"
2995                     "#                       is not a '0' or '1')\n");
2996 }
2997
2998 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
2999 {
3000         if (iter->tr->allocated_snapshot)
3001                 seq_puts(m, "#\n# * Snapshot is allocated *\n#\n");
3002         else
3003                 seq_puts(m, "#\n# * Snapshot is freed *\n#\n");
3004
3005         seq_puts(m, "# Snapshot commands:\n");
3006         if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
3007                 show_snapshot_main_help(m);
3008         else
3009                 show_snapshot_percpu_help(m);
3010 }
3011 #else
3012 /* Should never be called */
3013 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
3014 #endif
3015
3016 static int s_show(struct seq_file *m, void *v)
3017 {
3018         struct trace_iterator *iter = v;
3019         int ret;
3020
3021         if (iter->ent == NULL) {
3022                 if (iter->tr) {
3023                         seq_printf(m, "# tracer: %s\n", iter->trace->name);
3024                         seq_puts(m, "#\n");
3025                         test_ftrace_alive(m);
3026                 }
3027                 if (iter->snapshot && trace_empty(iter))
3028                         print_snapshot_help(m, iter);
3029                 else if (iter->trace && iter->trace->print_header)
3030                         iter->trace->print_header(m);
3031                 else
3032                         trace_default_header(m);
3033
3034         } else if (iter->leftover) {
3035                 /*
3036                  * If we filled the seq_file buffer earlier, we
3037                  * want to just show it now.
3038                  */
3039                 ret = trace_print_seq(m, &iter->seq);
3040
3041                 /* ret should this time be zero, but you never know */
3042                 iter->leftover = ret;
3043
3044         } else {
3045                 print_trace_line(iter);
3046                 ret = trace_print_seq(m, &iter->seq);
3047                 /*
3048                  * If we overflow the seq_file buffer, then it will
3049                  * ask us for this data again at start up.
3050                  * Use that instead.
3051                  *  ret is 0 if seq_file write succeeded.
3052                  *        -1 otherwise.
3053                  */
3054                 iter->leftover = ret;
3055         }
3056
3057         return 0;
3058 }
3059
3060 /*
3061  * Should be used after trace_array_get(), trace_types_lock
3062  * ensures that i_cdev was already initialized.
3063  */
3064 static inline int tracing_get_cpu(struct inode *inode)
3065 {
3066         if (inode->i_cdev) /* See trace_create_cpu_file() */
3067                 return (long)inode->i_cdev - 1;
3068         return RING_BUFFER_ALL_CPUS;
3069 }
3070
3071 static const struct seq_operations tracer_seq_ops = {
3072         .start          = s_start,
3073         .next           = s_next,
3074         .stop           = s_stop,
3075         .show           = s_show,
3076 };
3077
3078 static struct trace_iterator *
3079 __tracing_open(struct inode *inode, struct file *file, bool snapshot)
3080 {
3081         struct trace_array *tr = inode->i_private;
3082         struct trace_iterator *iter;
3083         int cpu;
3084
3085         if (tracing_disabled)
3086                 return ERR_PTR(-ENODEV);
3087
3088         iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
3089         if (!iter)
3090                 return ERR_PTR(-ENOMEM);
3091
3092         iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter),
3093                                     GFP_KERNEL);
3094         if (!iter->buffer_iter)
3095                 goto release;
3096
3097         /*
3098          * We make a copy of the current tracer to avoid concurrent
3099          * changes on it while we are reading.
3100          */
3101         mutex_lock(&trace_types_lock);
3102         iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL);
3103         if (!iter->trace)
3104                 goto fail;
3105
3106         *iter->trace = *tr->current_trace;
3107
3108         if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL))
3109                 goto fail;
3110
3111         iter->tr = tr;
3112
3113 #ifdef CONFIG_TRACER_MAX_TRACE
3114         /* Currently only the top directory has a snapshot */
3115         if (tr->current_trace->print_max || snapshot)
3116                 iter->trace_buffer = &tr->max_buffer;
3117         else
3118 #endif
3119                 iter->trace_buffer = &tr->trace_buffer;
3120         iter->snapshot = snapshot;
3121         iter->pos = -1;
3122         iter->cpu_file = tracing_get_cpu(inode);
3123         mutex_init(&iter->mutex);
3124
3125         /* Notify the tracer early; before we stop tracing. */
3126         if (iter->trace && iter->trace->open)
3127                 iter->trace->open(iter);
3128
3129         /* Annotate start of buffers if we had overruns */
3130         if (ring_buffer_overruns(iter->trace_buffer->buffer))
3131                 iter->iter_flags |= TRACE_FILE_ANNOTATE;
3132
3133         /* Output in nanoseconds only if we are using a clock in nanoseconds. */
3134         if (trace_clocks[tr->clock_id].in_ns)
3135                 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
3136
3137         /* stop the trace while dumping if we are not opening "snapshot" */
3138         if (!iter->snapshot)
3139                 tracing_stop_tr(tr);
3140
3141         if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
3142                 for_each_tracing_cpu(cpu) {
3143                         iter->buffer_iter[cpu] =
3144                                 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3145                 }
3146                 ring_buffer_read_prepare_sync();
3147                 for_each_tracing_cpu(cpu) {
3148                         ring_buffer_read_start(iter->buffer_iter[cpu]);
3149                         tracing_iter_reset(iter, cpu);
3150                 }
3151         } else {
3152                 cpu = iter->cpu_file;
3153                 iter->buffer_iter[cpu] =
3154                         ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3155                 ring_buffer_read_prepare_sync();
3156                 ring_buffer_read_start(iter->buffer_iter[cpu]);
3157                 tracing_iter_reset(iter, cpu);
3158         }
3159
3160         mutex_unlock(&trace_types_lock);
3161
3162         return iter;
3163
3164  fail:
3165         mutex_unlock(&trace_types_lock);
3166         kfree(iter->trace);
3167         kfree(iter->buffer_iter);
3168 release:
3169         seq_release_private(inode, file);
3170         return ERR_PTR(-ENOMEM);
3171 }
3172
3173 int tracing_open_generic(struct inode *inode, struct file *filp)
3174 {
3175         if (tracing_disabled)
3176                 return -ENODEV;
3177
3178         filp->private_data = inode->i_private;
3179         return 0;
3180 }
3181
3182 bool tracing_is_disabled(void)
3183 {
3184         return (tracing_disabled) ? true: false;
3185 }
3186
3187 /*
3188  * Open and update trace_array ref count.
3189  * Must have the current trace_array passed to it.
3190  */
3191 static int tracing_open_generic_tr(struct inode *inode, struct file *filp)
3192 {
3193         struct trace_array *tr = inode->i_private;
3194
3195         if (tracing_disabled)
3196                 return -ENODEV;
3197
3198         if (trace_array_get(tr) < 0)
3199                 return -ENODEV;
3200
3201         filp->private_data = inode->i_private;
3202
3203         return 0;
3204 }
3205
3206 static int tracing_release(struct inode *inode, struct file *file)
3207 {
3208         struct trace_array *tr = inode->i_private;
3209         struct seq_file *m = file->private_data;
3210         struct trace_iterator *iter;
3211         int cpu;
3212
3213         if (!(file->f_mode & FMODE_READ)) {
3214                 trace_array_put(tr);
3215                 return 0;
3216         }
3217
3218         /* Writes do not use seq_file */
3219         iter = m->private;
3220         mutex_lock(&trace_types_lock);
3221
3222         for_each_tracing_cpu(cpu) {
3223                 if (iter->buffer_iter[cpu])
3224                         ring_buffer_read_finish(iter->buffer_iter[cpu]);
3225         }
3226
3227         if (iter->trace && iter->trace->close)
3228                 iter->trace->close(iter);
3229
3230         if (!iter->snapshot)
3231                 /* reenable tracing if it was previously enabled */
3232                 tracing_start_tr(tr);
3233
3234         __trace_array_put(tr);
3235
3236         mutex_unlock(&trace_types_lock);
3237
3238         mutex_destroy(&iter->mutex);
3239         free_cpumask_var(iter->started);
3240         kfree(iter->trace);
3241         kfree(iter->buffer_iter);
3242         seq_release_private(inode, file);
3243
3244         return 0;
3245 }
3246
3247 static int tracing_release_generic_tr(struct inode *inode, struct file *file)
3248 {
3249         struct trace_array *tr = inode->i_private;
3250
3251         trace_array_put(tr);
3252         return 0;
3253 }
3254
3255 static int tracing_single_release_tr(struct inode *inode, struct file *file)
3256 {
3257         struct trace_array *tr = inode->i_private;
3258
3259         trace_array_put(tr);
3260
3261         return single_release(inode, file);
3262 }
3263
3264 static int tracing_open(struct inode *inode, struct file *file)
3265 {
3266         struct trace_array *tr = inode->i_private;
3267         struct trace_iterator *iter;
3268         int ret = 0;
3269
3270         if (trace_array_get(tr) < 0)
3271                 return -ENODEV;
3272
3273         /* If this file was open for write, then erase contents */
3274         if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
3275                 int cpu = tracing_get_cpu(inode);
3276                 struct trace_buffer *trace_buf = &tr->trace_buffer;
3277
3278 #ifdef CONFIG_TRACER_MAX_TRACE
3279                 if (tr->current_trace->print_max)
3280                         trace_buf = &tr->max_buffer;
3281 #endif
3282
3283                 if (cpu == RING_BUFFER_ALL_CPUS)
3284                         tracing_reset_online_cpus(trace_buf);
3285                 else
3286                         tracing_reset(trace_buf, cpu);
3287         }
3288
3289         if (file->f_mode & FMODE_READ) {
3290                 iter = __tracing_open(inode, file, false);
3291                 if (IS_ERR(iter))
3292                         ret = PTR_ERR(iter);
3293                 else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
3294                         iter->iter_flags |= TRACE_FILE_LAT_FMT;
3295         }
3296
3297         if (ret < 0)
3298                 trace_array_put(tr);
3299
3300         return ret;
3301 }
3302
3303 /*
3304  * Some tracers are not suitable for instance buffers.
3305  * A tracer is always available for the global array (toplevel)
3306  * or if it explicitly states that it is.
3307  */
3308 static bool
3309 trace_ok_for_array(struct tracer *t, struct trace_array *tr)
3310 {
3311         return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances;
3312 }
3313
3314 /* Find the next tracer that this trace array may use */
3315 static struct tracer *
3316 get_tracer_for_array(struct trace_array *tr, struct tracer *t)
3317 {
3318         while (t && !trace_ok_for_array(t, tr))
3319                 t = t->next;
3320
3321         return t;
3322 }
3323
3324 static void *
3325 t_next(struct seq_file *m, void *v, loff_t *pos)
3326 {
3327         struct trace_array *tr = m->private;
3328         struct tracer *t = v;
3329
3330         (*pos)++;
3331
3332         if (t)
3333                 t = get_tracer_for_array(tr, t->next);
3334
3335         return t;
3336 }
3337
3338 static void *t_start(struct seq_file *m, loff_t *pos)
3339 {
3340         struct trace_array *tr = m->private;
3341         struct tracer *t;
3342         loff_t l = 0;
3343
3344         mutex_lock(&trace_types_lock);
3345
3346         t = get_tracer_for_array(tr, trace_types);
3347         for (; t && l < *pos; t = t_next(m, t, &l))
3348                         ;
3349
3350         return t;
3351 }
3352
3353 static void t_stop(struct seq_file *m, void *p)
3354 {
3355         mutex_unlock(&trace_types_lock);
3356 }
3357
3358 static int t_show(struct seq_file *m, void *v)
3359 {
3360         struct tracer *t = v;
3361
3362         if (!t)
3363                 return 0;
3364
3365         seq_puts(m, t->name);
3366         if (t->next)
3367                 seq_putc(m, ' ');
3368         else
3369                 seq_putc(m, '\n');
3370
3371         return 0;
3372 }
3373
3374 static const struct seq_operations show_traces_seq_ops = {
3375         .start          = t_start,
3376         .next           = t_next,
3377         .stop           = t_stop,
3378         .show           = t_show,
3379 };
3380
3381 static int show_traces_open(struct inode *inode, struct file *file)
3382 {
3383         struct trace_array *tr = inode->i_private;
3384         struct seq_file *m;
3385         int ret;
3386
3387         if (tracing_disabled)
3388                 return -ENODEV;
3389
3390         ret = seq_open(file, &show_traces_seq_ops);
3391         if (ret)
3392                 return ret;
3393
3394         m = file->private_data;
3395         m->private = tr;
3396
3397         return 0;
3398 }
3399
3400 static ssize_t
3401 tracing_write_stub(struct file *filp, const char __user *ubuf,
3402                    size_t count, loff_t *ppos)
3403 {
3404         return count;
3405 }
3406
3407 loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
3408 {
3409         int ret;
3410
3411         if (file->f_mode & FMODE_READ)
3412                 ret = seq_lseek(file, offset, whence);
3413         else
3414                 file->f_pos = ret = 0;
3415
3416         return ret;
3417 }
3418
3419 static const struct file_operations tracing_fops = {
3420         .open           = tracing_open,
3421         .read           = seq_read,
3422         .write          = tracing_write_stub,
3423         .llseek         = tracing_lseek,
3424         .release        = tracing_release,
3425 };
3426
3427 static const struct file_operations show_traces_fops = {
3428         .open           = show_traces_open,
3429         .read           = seq_read,
3430         .release        = seq_release,
3431         .llseek         = seq_lseek,
3432 };
3433
3434 static ssize_t
3435 tracing_cpumask_read(struct file *filp, char __user *ubuf,
3436                      size_t count, loff_t *ppos)
3437 {
3438         struct trace_array *tr = file_inode(filp)->i_private;
3439         char *mask_str;
3440         int len;
3441
3442         len = snprintf(NULL, 0, "%*pb\n",
3443                        cpumask_pr_args(tr->tracing_cpumask)) + 1;
3444         mask_str = kmalloc(len, GFP_KERNEL);
3445         if (!mask_str)
3446                 return -ENOMEM;
3447
3448         len = snprintf(mask_str, len, "%*pb\n",
3449                        cpumask_pr_args(tr->tracing_cpumask));
3450         if (len >= count) {
3451                 count = -EINVAL;
3452                 goto out_err;
3453         }
3454         count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
3455
3456 out_err:
3457         kfree(mask_str);
3458
3459         return count;
3460 }
3461
3462 static ssize_t
3463 tracing_cpumask_write(struct file *filp, const char __user *ubuf,
3464                       size_t count, loff_t *ppos)
3465 {
3466         struct trace_array *tr = file_inode(filp)->i_private;
3467         cpumask_var_t tracing_cpumask_new;
3468         int err, cpu;
3469
3470         if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL))
3471                 return -ENOMEM;
3472
3473         err = cpumask_parse_user(ubuf, count, tracing_cpumask_new);
3474         if (err)
3475                 goto err_unlock;
3476
3477         local_irq_disable();
3478         arch_spin_lock(&tr->max_lock);
3479         for_each_tracing_cpu(cpu) {
3480                 /*
3481                  * Increase/decrease the disabled counter if we are
3482                  * about to flip a bit in the cpumask:
3483                  */
3484                 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3485                                 !cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3486                         atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3487                         ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu);
3488                 }
3489                 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3490                                 cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3491                         atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3492                         ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu);
3493                 }
3494         }
3495         arch_spin_unlock(&tr->max_lock);
3496         local_irq_enable();
3497
3498         cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
3499         free_cpumask_var(tracing_cpumask_new);
3500
3501         return count;
3502
3503 err_unlock:
3504         free_cpumask_var(tracing_cpumask_new);
3505
3506         return err;
3507 }
3508
3509 static const struct file_operations tracing_cpumask_fops = {
3510         .open           = tracing_open_generic_tr,
3511         .read           = tracing_cpumask_read,
3512         .write          = tracing_cpumask_write,
3513         .release        = tracing_release_generic_tr,
3514         .llseek         = generic_file_llseek,
3515 };
3516
3517 static int tracing_trace_options_show(struct seq_file *m, void *v)
3518 {
3519         struct tracer_opt *trace_opts;
3520         struct trace_array *tr = m->private;
3521         u32 tracer_flags;
3522         int i;
3523
3524         mutex_lock(&trace_types_lock);
3525         tracer_flags = tr->current_trace->flags->val;
3526         trace_opts = tr->current_trace->flags->opts;
3527
3528         for (i = 0; trace_options[i]; i++) {
3529                 if (tr->trace_flags & (1 << i))
3530                         seq_printf(m, "%s\n", trace_options[i]);
3531                 else
3532                         seq_printf(m, "no%s\n", trace_options[i]);
3533         }
3534
3535         for (i = 0; trace_opts[i].name; i++) {
3536                 if (tracer_flags & trace_opts[i].bit)
3537                         seq_printf(m, "%s\n", trace_opts[i].name);
3538                 else
3539                         seq_printf(m, "no%s\n", trace_opts[i].name);
3540         }
3541         mutex_unlock(&trace_types_lock);
3542
3543         return 0;
3544 }
3545
3546 static int __set_tracer_option(struct trace_array *tr,
3547                                struct tracer_flags *tracer_flags,
3548                                struct tracer_opt *opts, int neg)
3549 {
3550         struct tracer *trace = tr->current_trace;
3551         int ret;
3552
3553         ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg);
3554         if (ret)
3555                 return ret;
3556
3557         if (neg)
3558                 tracer_flags->val &= ~opts->bit;
3559         else
3560                 tracer_flags->val |= opts->bit;
3561         return 0;
3562 }
3563
3564 /* Try to assign a tracer specific option */
3565 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg)
3566 {
3567         struct tracer *trace = tr->current_trace;
3568         struct tracer_flags *tracer_flags = trace->flags;
3569         struct tracer_opt *opts = NULL;
3570         int i;
3571
3572         for (i = 0; tracer_flags->opts[i].name; i++) {
3573                 opts = &tracer_flags->opts[i];
3574
3575                 if (strcmp(cmp, opts->name) == 0)
3576                         return __set_tracer_option(tr, trace->flags, opts, neg);
3577         }
3578
3579         return -EINVAL;
3580 }
3581
3582 /* Some tracers require overwrite to stay enabled */
3583 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
3584 {
3585         if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set)
3586                 return -1;
3587
3588         return 0;
3589 }
3590
3591 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled)
3592 {
3593         /* do nothing if flag is already set */
3594         if (!!(tr->trace_flags & mask) == !!enabled)
3595                 return 0;
3596
3597         /* Give the tracer a chance to approve the change */
3598         if (tr->current_trace->flag_changed)
3599                 if (tr->current_trace->flag_changed(tr, mask, !!enabled))
3600                         return -EINVAL;
3601
3602         if (enabled)
3603                 tr->trace_flags |= mask;
3604         else
3605                 tr->trace_flags &= ~mask;
3606
3607         if (mask == TRACE_ITER_RECORD_CMD)
3608                 trace_event_enable_cmd_record(enabled);
3609
3610         if (mask == TRACE_ITER_OVERWRITE) {
3611                 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled);
3612 #ifdef CONFIG_TRACER_MAX_TRACE
3613                 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled);
3614 #endif
3615         }
3616
3617         if (mask == TRACE_ITER_PRINTK) {
3618                 trace_printk_start_stop_comm(enabled);
3619                 trace_printk_control(enabled);
3620         }
3621
3622         return 0;
3623 }
3624
3625 static int trace_set_options(struct trace_array *tr, char *option)
3626 {
3627         char *cmp;
3628         int neg = 0;
3629         int ret = -ENODEV;
3630         int i;
3631         size_t orig_len = strlen(option);
3632
3633         cmp = strstrip(option);
3634
3635         if (strncmp(cmp, "no", 2) == 0) {
3636                 neg = 1;
3637                 cmp += 2;
3638         }
3639
3640         mutex_lock(&trace_types_lock);
3641
3642         for (i = 0; trace_options[i]; i++) {
3643                 if (strcmp(cmp, trace_options[i]) == 0) {
3644                         ret = set_tracer_flag(tr, 1 << i, !neg);
3645                         break;
3646                 }
3647         }
3648
3649         /* If no option could be set, test the specific tracer options */
3650         if (!trace_options[i])
3651                 ret = set_tracer_option(tr, cmp, neg);
3652
3653         mutex_unlock(&trace_types_lock);
3654
3655         /*
3656          * If the first trailing whitespace is replaced with '\0' by strstrip,
3657          * turn it back into a space.
3658          */
3659         if (orig_len > strlen(option))
3660                 option[strlen(option)] = ' ';
3661
3662         return ret;
3663 }
3664
3665 static void __init apply_trace_boot_options(void)
3666 {
3667         char *buf = trace_boot_options_buf;
3668         char *option;
3669
3670         while (true) {
3671                 option = strsep(&buf, ",");
3672
3673                 if (!option)
3674                         break;
3675
3676                 if (*option)
3677                         trace_set_options(&global_trace, option);
3678
3679                 /* Put back the comma to allow this to be called again */
3680                 if (buf)
3681                         *(buf - 1) = ',';
3682         }
3683 }
3684
3685 static ssize_t
3686 tracing_trace_options_write(struct file *filp, const char __user *ubuf,
3687                         size_t cnt, loff_t *ppos)
3688 {
3689         struct seq_file *m = filp->private_data;
3690         struct trace_array *tr = m->private;
3691         char buf[64];
3692         int ret;
3693
3694         if (cnt >= sizeof(buf))
3695                 return -EINVAL;
3696
3697         if (copy_from_user(&buf, ubuf, cnt))
3698                 return -EFAULT;
3699
3700         buf[cnt] = 0;
3701
3702         ret = trace_set_options(tr, buf);
3703         if (ret < 0)
3704                 return ret;
3705
3706         *ppos += cnt;
3707
3708         return cnt;
3709 }
3710
3711 static int tracing_trace_options_open(struct inode *inode, struct file *file)
3712 {
3713         struct trace_array *tr = inode->i_private;
3714         int ret;
3715
3716         if (tracing_disabled)
3717                 return -ENODEV;
3718
3719         if (trace_array_get(tr) < 0)
3720                 return -ENODEV;
3721
3722         ret = single_open(file, tracing_trace_options_show, inode->i_private);
3723         if (ret < 0)
3724                 trace_array_put(tr);
3725
3726         return ret;
3727 }
3728
3729 static const struct file_operations tracing_iter_fops = {
3730         .open           = tracing_trace_options_open,
3731         .read           = seq_read,
3732         .llseek         = seq_lseek,
3733         .release        = tracing_single_release_tr,
3734         .write          = tracing_trace_options_write,
3735 };
3736
3737 static const char readme_msg[] =
3738         "tracing mini-HOWTO:\n\n"
3739         "# echo 0 > tracing_on : quick way to disable tracing\n"
3740         "# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
3741         " Important files:\n"
3742         "  trace\t\t\t- The static contents of the buffer\n"
3743         "\t\t\t  To clear the buffer write into this file: echo > trace\n"
3744         "  trace_pipe\t\t- A consuming read to see the contents of the buffer\n"
3745         "  current_tracer\t- function and latency tracers\n"
3746         "  available_tracers\t- list of configured tracers for current_tracer\n"
3747         "  buffer_size_kb\t- view and modify size of per cpu buffer\n"
3748         "  buffer_total_size_kb  - view total size of all cpu buffers\n\n"
3749         "  trace_clock\t\t-change the clock used to order events\n"
3750         "       local:   Per cpu clock but may not be synced across CPUs\n"
3751         "      global:   Synced across CPUs but slows tracing down.\n"
3752         "     counter:   Not a clock, but just an increment\n"
3753         "      uptime:   Jiffy counter from time of boot\n"
3754         "        perf:   Same clock that perf events use\n"
3755 #ifdef CONFIG_X86_64
3756         "     x86-tsc:   TSC cycle counter\n"
3757 #endif
3758         "\n  trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
3759         "  tracing_cpumask\t- Limit which CPUs to trace\n"
3760         "  instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
3761         "\t\t\t  Remove sub-buffer with rmdir\n"
3762         "  trace_options\t\t- Set format or modify how tracing happens\n"
3763         "\t\t\t  Disable an option by adding a suffix 'no' to the\n"
3764         "\t\t\t  option name\n"
3765         "  saved_cmdlines_size\t- echo command number in here to store comm-pid list\n"
3766 #ifdef CONFIG_DYNAMIC_FTRACE
3767         "\n  available_filter_functions - list of functions that can be filtered on\n"
3768         "  set_ftrace_filter\t- echo function name in here to only trace these\n"
3769         "\t\t\t  functions\n"
3770         "\t     accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3771         "\t     modules: Can select a group via module\n"
3772         "\t      Format: :mod:<module-name>\n"
3773         "\t     example: echo :mod:ext3 > set_ftrace_filter\n"
3774         "\t    triggers: a command to perform when function is hit\n"
3775         "\t      Format: <function>:<trigger>[:count]\n"
3776         "\t     trigger: traceon, traceoff\n"
3777         "\t\t      enable_event:<system>:<event>\n"
3778         "\t\t      disable_event:<system>:<event>\n"
3779 #ifdef CONFIG_STACKTRACE
3780         "\t\t      stacktrace\n"
3781 #endif
3782 #ifdef CONFIG_TRACER_SNAPSHOT
3783         "\t\t      snapshot\n"
3784 #endif
3785         "\t\t      dump\n"
3786         "\t\t      cpudump\n"
3787         "\t     example: echo do_fault:traceoff > set_ftrace_filter\n"
3788         "\t              echo do_trap:traceoff:3 > set_ftrace_filter\n"
3789         "\t     The first one will disable tracing every time do_fault is hit\n"
3790         "\t     The second will disable tracing at most 3 times when do_trap is hit\n"
3791         "\t       The first time do trap is hit and it disables tracing, the\n"
3792         "\t       counter will decrement to 2. If tracing is already disabled,\n"
3793         "\t       the counter will not decrement. It only decrements when the\n"
3794         "\t       trigger did work\n"
3795         "\t     To remove trigger without count:\n"
3796         "\t       echo '!<function>:<trigger> > set_ftrace_filter\n"
3797         "\t     To remove trigger with a count:\n"
3798         "\t       echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
3799         "  set_ftrace_notrace\t- echo function name in here to never trace.\n"
3800         "\t    accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3801         "\t    modules: Can select a group via module command :mod:\n"
3802         "\t    Does not accept triggers\n"
3803 #endif /* CONFIG_DYNAMIC_FTRACE */
3804 #ifdef CONFIG_FUNCTION_TRACER
3805         "  set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
3806         "\t\t    (function)\n"
3807 #endif
3808 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
3809         "  set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
3810         "  set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n"
3811         "  max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
3812 #endif
3813 #ifdef CONFIG_TRACER_SNAPSHOT
3814         "\n  snapshot\t\t- Like 'trace' but shows the content of the static\n"
3815         "\t\t\t  snapshot buffer. Read the contents for more\n"
3816         "\t\t\t  information\n"
3817 #endif
3818 #ifdef CONFIG_STACK_TRACER
3819         "  stack_trace\t\t- Shows the max stack trace when active\n"
3820         "  stack_max_size\t- Shows current max stack size that was traced\n"
3821         "\t\t\t  Write into this file to reset the max size (trigger a\n"
3822         "\t\t\t  new trace)\n"
3823 #ifdef CONFIG_DYNAMIC_FTRACE
3824         "  stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
3825         "\t\t\t  traces\n"
3826 #endif
3827 #endif /* CONFIG_STACK_TRACER */
3828         "  events/\t\t- Directory containing all trace event subsystems:\n"
3829         "      enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
3830         "  events/<system>/\t- Directory containing all trace events for <system>:\n"
3831         "      enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
3832         "\t\t\t  events\n"
3833         "      filter\t\t- If set, only events passing filter are traced\n"
3834         "  events/<system>/<event>/\t- Directory containing control files for\n"
3835         "\t\t\t  <event>:\n"
3836         "      enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
3837         "      filter\t\t- If set, only events passing filter are traced\n"
3838         "      trigger\t\t- If set, a command to perform when event is hit\n"
3839         "\t    Format: <trigger>[:count][if <filter>]\n"
3840         "\t   trigger: traceon, traceoff\n"
3841         "\t            enable_event:<system>:<event>\n"
3842         "\t            disable_event:<system>:<event>\n"
3843 #ifdef CONFIG_STACKTRACE
3844         "\t\t    stacktrace\n"
3845 #endif
3846 #ifdef CONFIG_TRACER_SNAPSHOT
3847         "\t\t    snapshot\n"
3848 #endif
3849         "\t   example: echo traceoff > events/block/block_unplug/trigger\n"
3850         "\t            echo traceoff:3 > events/block/block_unplug/trigger\n"
3851         "\t            echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
3852         "\t                  events/block/block_unplug/trigger\n"
3853         "\t   The first disables tracing every time block_unplug is hit.\n"
3854         "\t   The second disables tracing the first 3 times block_unplug is hit.\n"
3855         "\t   The third enables the kmalloc event the first 3 times block_unplug\n"
3856         "\t     is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
3857         "\t   Like function triggers, the counter is only decremented if it\n"
3858         "\t    enabled or disabled tracing.\n"
3859         "\t   To remove a trigger without a count:\n"
3860         "\t     echo '!<trigger> > <system>/<event>/trigger\n"
3861         "\t   To remove a trigger with a count:\n"
3862         "\t     echo '!<trigger>:0 > <system>/<event>/trigger\n"
3863         "\t   Filters can be ignored when removing a trigger.\n"
3864 ;
3865
3866 static ssize_t
3867 tracing_readme_read(struct file *filp, char __user *ubuf,
3868                        size_t cnt, loff_t *ppos)
3869 {
3870         return simple_read_from_buffer(ubuf, cnt, ppos,
3871                                         readme_msg, strlen(readme_msg));
3872 }
3873
3874 static const struct file_operations tracing_readme_fops = {
3875         .open           = tracing_open_generic,
3876         .read           = tracing_readme_read,
3877         .llseek         = generic_file_llseek,
3878 };
3879
3880 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos)
3881 {
3882         unsigned int *ptr = v;
3883
3884         if (*pos || m->count)
3885                 ptr++;
3886
3887         (*pos)++;
3888
3889         for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num];
3890              ptr++) {
3891                 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP)
3892                         continue;
3893
3894                 return ptr;
3895         }
3896
3897         return NULL;
3898 }
3899
3900 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos)
3901 {
3902         void *v;
3903         loff_t l = 0;
3904
3905         preempt_disable();
3906         arch_spin_lock(&trace_cmdline_lock);
3907
3908         v = &savedcmd->map_cmdline_to_pid[0];
3909         while (l <= *pos) {
3910                 v = saved_cmdlines_next(m, v, &l);
3911                 if (!v)
3912                         return NULL;
3913         }
3914
3915         return v;
3916 }
3917
3918 static void saved_cmdlines_stop(struct seq_file *m, void *v)
3919 {
3920         arch_spin_unlock(&trace_cmdline_lock);
3921         preempt_enable();
3922 }
3923
3924 static int saved_cmdlines_show(struct seq_file *m, void *v)
3925 {
3926         char buf[TASK_COMM_LEN];
3927         unsigned int *pid = v;
3928
3929         __trace_find_cmdline(*pid, buf);
3930         seq_printf(m, "%d %s\n", *pid, buf);
3931         return 0;
3932 }
3933
3934 static const struct seq_operations tracing_saved_cmdlines_seq_ops = {
3935         .start          = saved_cmdlines_start,
3936         .next           = saved_cmdlines_next,
3937         .stop           = saved_cmdlines_stop,
3938         .show           = saved_cmdlines_show,
3939 };
3940
3941 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
3942 {
3943         if (tracing_disabled)
3944                 return -ENODEV;
3945
3946         return seq_open(filp, &tracing_saved_cmdlines_seq_ops);
3947 }
3948
3949 static const struct file_operations tracing_saved_cmdlines_fops = {
3950         .open           = tracing_saved_cmdlines_open,
3951         .read           = seq_read,
3952         .llseek         = seq_lseek,
3953         .release        = seq_release,
3954 };
3955
3956 static ssize_t
3957 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
3958                                  size_t cnt, loff_t *ppos)
3959 {
3960         char buf[64];
3961         int r;
3962
3963         arch_spin_lock(&trace_cmdline_lock);
3964         r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num);
3965         arch_spin_unlock(&trace_cmdline_lock);
3966
3967         return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
3968 }
3969
3970 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s)
3971 {
3972         kfree(s->saved_cmdlines);
3973         kfree(s->map_cmdline_to_pid);
3974         kfree(s);
3975 }
3976
3977 static int tracing_resize_saved_cmdlines(unsigned int val)
3978 {
3979         struct saved_cmdlines_buffer *s, *savedcmd_temp;
3980
3981         s = kmalloc(sizeof(*s), GFP_KERNEL);
3982         if (!s)
3983                 return -ENOMEM;
3984
3985         if (allocate_cmdlines_buffer(val, s) < 0) {
3986                 kfree(s);
3987                 return -ENOMEM;
3988         }
3989
3990         arch_spin_lock(&trace_cmdline_lock);
3991         savedcmd_temp = savedcmd;
3992         savedcmd = s;
3993         arch_spin_unlock(&trace_cmdline_lock);
3994         free_saved_cmdlines_buffer(savedcmd_temp);
3995
3996         return 0;
3997 }
3998
3999 static ssize_t
4000 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
4001                                   size_t cnt, loff_t *ppos)
4002 {
4003         unsigned long val;
4004         int ret;
4005
4006         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4007         if (ret)
4008                 return ret;
4009
4010         /* must have at least 1 entry or less than PID_MAX_DEFAULT */
4011         if (!val || val > PID_MAX_DEFAULT)
4012                 return -EINVAL;
4013
4014         ret = tracing_resize_saved_cmdlines((unsigned int)val);
4015         if (ret < 0)
4016                 return ret;
4017
4018         *ppos += cnt;
4019
4020         return cnt;
4021 }
4022
4023 static const struct file_operations tracing_saved_cmdlines_size_fops = {
4024         .open           = tracing_open_generic,
4025         .read           = tracing_saved_cmdlines_size_read,
4026         .write          = tracing_saved_cmdlines_size_write,
4027 };
4028
4029 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
4030 static union trace_enum_map_item *
4031 update_enum_map(union trace_enum_map_item *ptr)
4032 {
4033         if (!ptr->map.enum_string) {
4034                 if (ptr->tail.next) {
4035                         ptr = ptr->tail.next;
4036                         /* Set ptr to the next real item (skip head) */
4037                         ptr++;
4038                 } else
4039                         return NULL;
4040         }
4041         return ptr;
4042 }
4043
4044 static void *enum_map_next(struct seq_file *m, void *v, loff_t *pos)
4045 {
4046         union trace_enum_map_item *ptr = v;
4047
4048         /*
4049          * Paranoid! If ptr points to end, we don't want to increment past it.
4050          * This really should never happen.
4051          */
4052         ptr = update_enum_map(ptr);
4053         if (WARN_ON_ONCE(!ptr))
4054                 return NULL;
4055
4056         ptr++;
4057
4058         (*pos)++;
4059
4060         ptr = update_enum_map(ptr);
4061
4062         return ptr;
4063 }
4064
4065 static void *enum_map_start(struct seq_file *m, loff_t *pos)
4066 {
4067         union trace_enum_map_item *v;
4068         loff_t l = 0;
4069
4070         mutex_lock(&trace_enum_mutex);
4071
4072         v = trace_enum_maps;
4073         if (v)
4074                 v++;
4075
4076         while (v && l < *pos) {
4077                 v = enum_map_next(m, v, &l);
4078         }
4079
4080         return v;
4081 }
4082
4083 static void enum_map_stop(struct seq_file *m, void *v)
4084 {
4085         mutex_unlock(&trace_enum_mutex);
4086 }
4087
4088 static int enum_map_show(struct seq_file *m, void *v)
4089 {
4090         union trace_enum_map_item *ptr = v;
4091
4092         seq_printf(m, "%s %ld (%s)\n",
4093                    ptr->map.enum_string, ptr->map.enum_value,
4094                    ptr->map.system);
4095
4096         return 0;
4097 }
4098
4099 static const struct seq_operations tracing_enum_map_seq_ops = {
4100         .start          = enum_map_start,
4101         .next           = enum_map_next,
4102         .stop           = enum_map_stop,
4103         .show           = enum_map_show,
4104 };
4105
4106 static int tracing_enum_map_open(struct inode *inode, struct file *filp)
4107 {
4108         if (tracing_disabled)
4109                 return -ENODEV;
4110
4111         return seq_open(filp, &tracing_enum_map_seq_ops);
4112 }
4113
4114 static const struct file_operations tracing_enum_map_fops = {
4115         .open           = tracing_enum_map_open,
4116         .read           = seq_read,
4117         .llseek         = seq_lseek,
4118         .release        = seq_release,
4119 };
4120
4121 static inline union trace_enum_map_item *
4122 trace_enum_jmp_to_tail(union trace_enum_map_item *ptr)
4123 {
4124         /* Return tail of array given the head */
4125         return ptr + ptr->head.length + 1;
4126 }
4127
4128 static void
4129 trace_insert_enum_map_file(struct module *mod, struct trace_enum_map **start,
4130                            int len)
4131 {
4132         struct trace_enum_map **stop;
4133         struct trace_enum_map **map;
4134         union trace_enum_map_item *map_array;
4135         union trace_enum_map_item *ptr;
4136
4137         stop = start + len;
4138
4139         /*
4140          * The trace_enum_maps contains the map plus a head and tail item,
4141          * where the head holds the module and length of array, and the
4142          * tail holds a pointer to the next list.
4143          */
4144         map_array = kmalloc(sizeof(*map_array) * (len + 2), GFP_KERNEL);
4145         if (!map_array) {
4146                 pr_warning("Unable to allocate trace enum mapping\n");
4147                 return;
4148         }
4149
4150         mutex_lock(&trace_enum_mutex);
4151
4152         if (!trace_enum_maps)
4153                 trace_enum_maps = map_array;
4154         else {
4155                 ptr = trace_enum_maps;
4156                 for (;;) {
4157                         ptr = trace_enum_jmp_to_tail(ptr);
4158                         if (!ptr->tail.next)
4159                                 break;
4160                         ptr = ptr->tail.next;
4161
4162                 }
4163                 ptr->tail.next = map_array;
4164         }
4165         map_array->head.mod = mod;
4166         map_array->head.length = len;
4167         map_array++;
4168
4169         for (map = start; (unsigned long)map < (unsigned long)stop; map++) {
4170                 map_array->map = **map;
4171                 map_array++;
4172         }
4173         memset(map_array, 0, sizeof(*map_array));
4174
4175         mutex_unlock(&trace_enum_mutex);
4176 }
4177
4178 static void trace_create_enum_file(struct dentry *d_tracer)
4179 {
4180         trace_create_file("enum_map", 0444, d_tracer,
4181                           NULL, &tracing_enum_map_fops);
4182 }
4183
4184 #else /* CONFIG_TRACE_ENUM_MAP_FILE */
4185 static inline void trace_create_enum_file(struct dentry *d_tracer) { }
4186 static inline void trace_insert_enum_map_file(struct module *mod,
4187                               struct trace_enum_map **start, int len) { }
4188 #endif /* !CONFIG_TRACE_ENUM_MAP_FILE */
4189
4190 static void trace_insert_enum_map(struct module *mod,
4191                                   struct trace_enum_map **start, int len)
4192 {
4193         struct trace_enum_map **map;
4194
4195         if (len <= 0)
4196                 return;
4197
4198         map = start;
4199
4200         trace_event_enum_update(map, len);
4201
4202         trace_insert_enum_map_file(mod, start, len);
4203 }
4204
4205 static ssize_t
4206 tracing_saved_tgids_read(struct file *file, char __user *ubuf,
4207                                 size_t cnt, loff_t *ppos)
4208 {
4209         char *file_buf;
4210         char *buf;
4211         int len = 0;
4212         int pid;
4213         int i;
4214
4215         file_buf = kmalloc(SAVED_CMDLINES_DEFAULT*(16+1+16), GFP_KERNEL);
4216         if (!file_buf)
4217                 return -ENOMEM;
4218
4219         buf = file_buf;
4220
4221         for (i = 0; i < SAVED_CMDLINES_DEFAULT; i++) {
4222                 int tgid;
4223                 int r;
4224
4225                 pid = savedcmd->map_cmdline_to_pid[i];
4226                 if (pid == -1 || pid == NO_CMDLINE_MAP)
4227                         continue;
4228
4229                 tgid = trace_find_tgid(pid);
4230                 r = sprintf(buf, "%d %d\n", pid, tgid);
4231                 buf += r;
4232                 len += r;
4233         }
4234
4235         len = simple_read_from_buffer(ubuf, cnt, ppos,
4236                                       file_buf, len);
4237
4238         kfree(file_buf);
4239
4240         return len;
4241 }
4242
4243 static const struct file_operations tracing_saved_tgids_fops = {
4244         .open   = tracing_open_generic,
4245         .read   = tracing_saved_tgids_read,
4246         .llseek = generic_file_llseek,
4247 };
4248
4249 static ssize_t
4250 tracing_set_trace_read(struct file *filp, char __user *ubuf,
4251                        size_t cnt, loff_t *ppos)
4252 {
4253         struct trace_array *tr = filp->private_data;
4254         char buf[MAX_TRACER_SIZE+2];
4255         int r;
4256
4257         mutex_lock(&trace_types_lock);
4258         r = sprintf(buf, "%s\n", tr->current_trace->name);
4259         mutex_unlock(&trace_types_lock);
4260
4261         return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4262 }
4263
4264 int tracer_init(struct tracer *t, struct trace_array *tr)
4265 {
4266         tracing_reset_online_cpus(&tr->trace_buffer);
4267         return t->init(tr);
4268 }
4269
4270 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val)
4271 {
4272         int cpu;
4273
4274         for_each_tracing_cpu(cpu)
4275                 per_cpu_ptr(buf->data, cpu)->entries = val;
4276 }
4277
4278 #ifdef CONFIG_TRACER_MAX_TRACE
4279 /* resize @tr's buffer to the size of @size_tr's entries */
4280 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
4281                                         struct trace_buffer *size_buf, int cpu_id)
4282 {
4283         int cpu, ret = 0;
4284
4285         if (cpu_id == RING_BUFFER_ALL_CPUS) {
4286                 for_each_tracing_cpu(cpu) {
4287                         ret = ring_buffer_resize(trace_buf->buffer,
4288                                  per_cpu_ptr(size_buf->data, cpu)->entries, cpu);
4289                         if (ret < 0)
4290                                 break;
4291                         per_cpu_ptr(trace_buf->data, cpu)->entries =
4292                                 per_cpu_ptr(size_buf->data, cpu)->entries;
4293                 }
4294         } else {
4295                 ret = ring_buffer_resize(trace_buf->buffer,
4296                                  per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id);
4297                 if (ret == 0)
4298                         per_cpu_ptr(trace_buf->data, cpu_id)->entries =
4299                                 per_cpu_ptr(size_buf->data, cpu_id)->entries;
4300         }
4301
4302         return ret;
4303 }
4304 #endif /* CONFIG_TRACER_MAX_TRACE */
4305
4306 static int __tracing_resize_ring_buffer(struct trace_array *tr,
4307                                         unsigned long size, int cpu)
4308 {
4309         int ret;
4310
4311         /*
4312          * If kernel or user changes the size of the ring buffer
4313          * we use the size that was given, and we can forget about
4314          * expanding it later.
4315          */
4316         ring_buffer_expanded = true;
4317
4318         /* May be called before buffers are initialized */
4319         if (!tr->trace_buffer.buffer)
4320                 return 0;
4321
4322         ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu);
4323         if (ret < 0)
4324                 return ret;
4325
4326 #ifdef CONFIG_TRACER_MAX_TRACE
4327         if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) ||
4328             !tr->current_trace->use_max_tr)
4329                 goto out;
4330
4331         ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu);
4332         if (ret < 0) {
4333                 int r = resize_buffer_duplicate_size(&tr->trace_buffer,
4334                                                      &tr->trace_buffer, cpu);
4335                 if (r < 0) {
4336                         /*
4337                          * AARGH! We are left with different
4338                          * size max buffer!!!!
4339                          * The max buffer is our "snapshot" buffer.
4340                          * When a tracer needs a snapshot (one of the
4341                          * latency tracers), it swaps the max buffer
4342                          * with the saved snap shot. We succeeded to
4343                          * update the size of the main buffer, but failed to
4344                          * update the size of the max buffer. But when we tried
4345                          * to reset the main buffer to the original size, we
4346                          * failed there too. This is very unlikely to
4347                          * happen, but if it does, warn and kill all
4348                          * tracing.
4349                          */
4350                         WARN_ON(1);
4351                         tracing_disabled = 1;
4352                 }
4353                 return ret;
4354         }
4355
4356         if (cpu == RING_BUFFER_ALL_CPUS)
4357                 set_buffer_entries(&tr->max_buffer, size);
4358         else
4359                 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size;
4360
4361  out:
4362 #endif /* CONFIG_TRACER_MAX_TRACE */
4363
4364         if (cpu == RING_BUFFER_ALL_CPUS)
4365                 set_buffer_entries(&tr->trace_buffer, size);
4366         else
4367                 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size;
4368
4369         return ret;
4370 }
4371
4372 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
4373                                           unsigned long size, int cpu_id)
4374 {
4375         int ret = size;
4376
4377         mutex_lock(&trace_types_lock);
4378
4379         if (cpu_id != RING_BUFFER_ALL_CPUS) {
4380                 /* make sure, this cpu is enabled in the mask */
4381                 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) {
4382                         ret = -EINVAL;
4383                         goto out;
4384                 }
4385         }
4386
4387         ret = __tracing_resize_ring_buffer(tr, size, cpu_id);
4388         if (ret < 0)
4389                 ret = -ENOMEM;
4390
4391 out:
4392         mutex_unlock(&trace_types_lock);
4393
4394         return ret;
4395 }
4396
4397
4398 /**
4399  * tracing_update_buffers - used by tracing facility to expand ring buffers
4400  *
4401  * To save on memory when the tracing is never used on a system with it
4402  * configured in. The ring buffers are set to a minimum size. But once
4403  * a user starts to use the tracing facility, then they need to grow
4404  * to their default size.
4405  *
4406  * This function is to be called when a tracer is about to be used.
4407  */
4408 int tracing_update_buffers(void)
4409 {
4410         int ret = 0;
4411
4412         mutex_lock(&trace_types_lock);
4413         if (!ring_buffer_expanded)
4414                 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size,
4415                                                 RING_BUFFER_ALL_CPUS);
4416         mutex_unlock(&trace_types_lock);
4417
4418         return ret;
4419 }
4420
4421 struct trace_option_dentry;
4422
4423 static void
4424 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
4425
4426 /*
4427  * Used to clear out the tracer before deletion of an instance.
4428  * Must have trace_types_lock held.
4429  */
4430 static void tracing_set_nop(struct trace_array *tr)
4431 {
4432         if (tr->current_trace == &nop_trace)
4433                 return;
4434         
4435         tr->current_trace->enabled--;
4436
4437         if (tr->current_trace->reset)
4438                 tr->current_trace->reset(tr);
4439
4440         tr->current_trace = &nop_trace;
4441 }
4442
4443 static void add_tracer_options(struct trace_array *tr, struct tracer *t)
4444 {
4445         /* Only enable if the directory has been created already. */
4446         if (!tr->dir)
4447                 return;
4448
4449         create_trace_option_files(tr, t);
4450 }
4451
4452 static int tracing_set_tracer(struct trace_array *tr, const char *buf)
4453 {
4454         struct tracer *t;
4455 #ifdef CONFIG_TRACER_MAX_TRACE
4456         bool had_max_tr;
4457 #endif
4458         int ret = 0;
4459
4460         mutex_lock(&trace_types_lock);
4461
4462         if (!ring_buffer_expanded) {
4463                 ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
4464                                                 RING_BUFFER_ALL_CPUS);
4465                 if (ret < 0)
4466                         goto out;
4467                 ret = 0;
4468         }
4469
4470         for (t = trace_types; t; t = t->next) {
4471                 if (strcmp(t->name, buf) == 0)
4472                         break;
4473         }
4474         if (!t) {
4475                 ret = -EINVAL;
4476                 goto out;
4477         }
4478         if (t == tr->current_trace)
4479                 goto out;
4480
4481         /* Some tracers are only allowed for the top level buffer */
4482         if (!trace_ok_for_array(t, tr)) {
4483                 ret = -EINVAL;
4484                 goto out;
4485         }
4486
4487         /* If trace pipe files are being read, we can't change the tracer */
4488         if (tr->current_trace->ref) {
4489                 ret = -EBUSY;
4490                 goto out;
4491         }
4492
4493         trace_branch_disable();
4494
4495         tr->current_trace->enabled--;
4496
4497         if (tr->current_trace->reset)
4498                 tr->current_trace->reset(tr);
4499
4500         /* Current trace needs to be nop_trace before synchronize_sched */
4501         tr->current_trace = &nop_trace;
4502
4503 #ifdef CONFIG_TRACER_MAX_TRACE
4504         had_max_tr = tr->allocated_snapshot;
4505
4506         if (had_max_tr && !t->use_max_tr) {
4507                 /*
4508                  * We need to make sure that the update_max_tr sees that
4509                  * current_trace changed to nop_trace to keep it from
4510                  * swapping the buffers after we resize it.
4511                  * The update_max_tr is called from interrupts disabled
4512                  * so a synchronized_sched() is sufficient.
4513                  */
4514                 synchronize_sched();
4515                 free_snapshot(tr);
4516         }
4517 #endif
4518
4519 #ifdef CONFIG_TRACER_MAX_TRACE
4520         if (t->use_max_tr && !had_max_tr) {
4521                 ret = alloc_snapshot(tr);
4522                 if (ret < 0)
4523                         goto out;
4524         }
4525 #endif
4526
4527         if (t->init) {
4528                 ret = tracer_init(t, tr);
4529                 if (ret)
4530                         goto out;
4531         }
4532
4533         tr->current_trace = t;
4534         tr->current_trace->enabled++;
4535         trace_branch_enable(tr);
4536  out:
4537         mutex_unlock(&trace_types_lock);
4538
4539         return ret;
4540 }
4541
4542 static ssize_t
4543 tracing_set_trace_write(struct file *filp, const char __user *ubuf,
4544                         size_t cnt, loff_t *ppos)
4545 {
4546         struct trace_array *tr = filp->private_data;
4547         char buf[MAX_TRACER_SIZE+1];
4548         int i;
4549         size_t ret;
4550         int err;
4551
4552         ret = cnt;
4553
4554         if (cnt > MAX_TRACER_SIZE)
4555                 cnt = MAX_TRACER_SIZE;
4556
4557         if (copy_from_user(&buf, ubuf, cnt))
4558                 return -EFAULT;
4559
4560         buf[cnt] = 0;
4561
4562         /* strip ending whitespace. */
4563         for (i = cnt - 1; i > 0 && isspace(buf[i]); i--)
4564                 buf[i] = 0;
4565
4566         err = tracing_set_tracer(tr, buf);
4567         if (err)
4568                 return err;
4569
4570         *ppos += ret;
4571
4572         return ret;
4573 }
4574
4575 static ssize_t
4576 tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
4577                    size_t cnt, loff_t *ppos)
4578 {
4579         char buf[64];
4580         int r;
4581
4582         r = snprintf(buf, sizeof(buf), "%ld\n",
4583                      *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
4584         if (r > sizeof(buf))
4585                 r = sizeof(buf);
4586         return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4587 }
4588
4589 static ssize_t
4590 tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
4591                     size_t cnt, loff_t *ppos)
4592 {
4593         unsigned long val;
4594         int ret;
4595
4596         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4597         if (ret)
4598                 return ret;
4599
4600         *ptr = val * 1000;
4601
4602         return cnt;
4603 }
4604
4605 static ssize_t
4606 tracing_thresh_read(struct file *filp, char __user *ubuf,
4607                     size_t cnt, loff_t *ppos)
4608 {
4609         return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos);
4610 }
4611
4612 static ssize_t
4613 tracing_thresh_write(struct file *filp, const char __user *ubuf,
4614                      size_t cnt, loff_t *ppos)
4615 {
4616         struct trace_array *tr = filp->private_data;
4617         int ret;
4618
4619         mutex_lock(&trace_types_lock);
4620         ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos);
4621         if (ret < 0)
4622                 goto out;
4623
4624         if (tr->current_trace->update_thresh) {
4625                 ret = tr->current_trace->update_thresh(tr);
4626                 if (ret < 0)
4627                         goto out;
4628         }
4629
4630         ret = cnt;
4631 out:
4632         mutex_unlock(&trace_types_lock);
4633
4634         return ret;
4635 }
4636
4637 #ifdef CONFIG_TRACER_MAX_TRACE
4638
4639 static ssize_t
4640 tracing_max_lat_read(struct file *filp, char __user *ubuf,
4641                      size_t cnt, loff_t *ppos)
4642 {
4643         return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos);
4644 }
4645
4646 static ssize_t
4647 tracing_max_lat_write(struct file *filp, const char __user *ubuf,
4648                       size_t cnt, loff_t *ppos)
4649 {
4650         return tracing_nsecs_write(filp->private_data, ubuf, cnt, ppos);
4651 }
4652
4653 #endif
4654
4655 static int tracing_open_pipe(struct inode *inode, struct file *filp)
4656 {
4657         struct trace_array *tr = inode->i_private;
4658         struct trace_iterator *iter;
4659         int ret = 0;
4660
4661         if (tracing_disabled)
4662                 return -ENODEV;
4663
4664         if (trace_array_get(tr) < 0)
4665                 return -ENODEV;
4666
4667         mutex_lock(&trace_types_lock);
4668
4669         /* create a buffer to store the information to pass to userspace */
4670         iter = kzalloc(sizeof(*iter), GFP_KERNEL);
4671         if (!iter) {
4672                 ret = -ENOMEM;
4673                 __trace_array_put(tr);
4674                 goto out;
4675         }
4676
4677         trace_seq_init(&iter->seq);
4678         iter->trace = tr->current_trace;
4679
4680         if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) {
4681                 ret = -ENOMEM;
4682                 goto fail;
4683         }
4684
4685         /* trace pipe does not show start of buffer */
4686         cpumask_setall(iter->started);
4687
4688         if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
4689                 iter->iter_flags |= TRACE_FILE_LAT_FMT;
4690
4691         /* Output in nanoseconds only if we are using a clock in nanoseconds. */
4692         if (trace_clocks[tr->clock_id].in_ns)
4693                 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
4694
4695         iter->tr = tr;
4696         iter->trace_buffer = &tr->trace_buffer;
4697         iter->cpu_file = tracing_get_cpu(inode);
4698         mutex_init(&iter->mutex);
4699         filp->private_data = iter;
4700
4701         if (iter->trace->pipe_open)
4702                 iter->trace->pipe_open(iter);
4703
4704         nonseekable_open(inode, filp);
4705
4706         tr->current_trace->ref++;
4707 out:
4708         mutex_unlock(&trace_types_lock);
4709         return ret;
4710
4711 fail:
4712         kfree(iter->trace);
4713         kfree(iter);
4714         __trace_array_put(tr);
4715         mutex_unlock(&trace_types_lock);
4716         return ret;
4717 }
4718
4719 static int tracing_release_pipe(struct inode *inode, struct file *file)
4720 {
4721         struct trace_iterator *iter = file->private_data;
4722         struct trace_array *tr = inode->i_private;
4723
4724         mutex_lock(&trace_types_lock);
4725
4726         tr->current_trace->ref--;
4727
4728         if (iter->trace->pipe_close)
4729                 iter->trace->pipe_close(iter);
4730
4731         mutex_unlock(&trace_types_lock);
4732
4733         free_cpumask_var(iter->started);
4734         mutex_destroy(&iter->mutex);
4735         kfree(iter);
4736
4737         trace_array_put(tr);
4738
4739         return 0;
4740 }
4741
4742 static unsigned int
4743 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table)
4744 {
4745         struct trace_array *tr = iter->tr;
4746
4747         /* Iterators are static, they should be filled or empty */
4748         if (trace_buffer_iter(iter, iter->cpu_file))
4749                 return POLLIN | POLLRDNORM;
4750
4751         if (tr->trace_flags & TRACE_ITER_BLOCK)
4752                 /*
4753                  * Always select as readable when in blocking mode
4754                  */
4755                 return POLLIN | POLLRDNORM;
4756         else
4757                 return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file,
4758                                              filp, poll_table);
4759 }
4760
4761 static unsigned int
4762 tracing_poll_pipe(struct file *filp, poll_table *poll_table)
4763 {
4764         struct trace_iterator *iter = filp->private_data;
4765
4766         return trace_poll(iter, filp, poll_table);
4767 }
4768
4769 /* Must be called with iter->mutex held. */
4770 static int tracing_wait_pipe(struct file *filp)
4771 {
4772         struct trace_iterator *iter = filp->private_data;
4773         int ret;
4774
4775         while (trace_empty(iter)) {
4776
4777                 if ((filp->f_flags & O_NONBLOCK)) {
4778                         return -EAGAIN;
4779                 }
4780
4781                 /*
4782                  * We block until we read something and tracing is disabled.
4783                  * We still block if tracing is disabled, but we have never
4784                  * read anything. This allows a user to cat this file, and
4785                  * then enable tracing. But after we have read something,
4786                  * we give an EOF when tracing is again disabled.
4787                  *
4788                  * iter->pos will be 0 if we haven't read anything.
4789                  */
4790                 if (!tracer_tracing_is_on(iter->tr) && iter->pos)
4791                         break;
4792
4793                 mutex_unlock(&iter->mutex);
4794
4795                 ret = wait_on_pipe(iter, false);
4796
4797                 mutex_lock(&iter->mutex);
4798
4799                 if (ret)
4800                         return ret;
4801         }
4802
4803         return 1;
4804 }
4805
4806 /*
4807  * Consumer reader.
4808  */
4809 static ssize_t
4810 tracing_read_pipe(struct file *filp, char __user *ubuf,
4811                   size_t cnt, loff_t *ppos)
4812 {
4813         struct trace_iterator *iter = filp->private_data;
4814         ssize_t sret;
4815
4816         /*
4817          * Avoid more than one consumer on a single file descriptor
4818          * This is just a matter of traces coherency, the ring buffer itself
4819          * is protected.
4820          */
4821         mutex_lock(&iter->mutex);
4822
4823         /* return any leftover data */
4824         sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4825         if (sret != -EBUSY)
4826                 goto out;
4827
4828         trace_seq_init(&iter->seq);
4829
4830         if (iter->trace->read) {
4831                 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
4832                 if (sret)
4833                         goto out;
4834         }
4835
4836 waitagain:
4837         sret = tracing_wait_pipe(filp);
4838         if (sret <= 0)
4839                 goto out;
4840
4841         /* stop when tracing is finished */
4842         if (trace_empty(iter)) {
4843                 sret = 0;
4844                 goto out;
4845         }
4846
4847         if (cnt >= PAGE_SIZE)
4848                 cnt = PAGE_SIZE - 1;
4849
4850         /* reset all but tr, trace, and overruns */
4851         memset(&iter->seq, 0,
4852                sizeof(struct trace_iterator) -
4853                offsetof(struct trace_iterator, seq));
4854         cpumask_clear(iter->started);
4855         iter->pos = -1;
4856
4857         trace_event_read_lock();
4858         trace_access_lock(iter->cpu_file);
4859         while (trace_find_next_entry_inc(iter) != NULL) {
4860                 enum print_line_t ret;
4861                 int save_len = iter->seq.seq.len;
4862
4863                 ret = print_trace_line(iter);
4864                 if (ret == TRACE_TYPE_PARTIAL_LINE) {
4865                         /* don't print partial lines */
4866                         iter->seq.seq.len = save_len;
4867                         break;
4868                 }
4869                 if (ret != TRACE_TYPE_NO_CONSUME)
4870                         trace_consume(iter);
4871
4872                 if (trace_seq_used(&iter->seq) >= cnt)
4873                         break;
4874
4875                 /*
4876                  * Setting the full flag means we reached the trace_seq buffer
4877                  * size and we should leave by partial output condition above.
4878                  * One of the trace_seq_* functions is not used properly.
4879                  */
4880                 WARN_ONCE(iter->seq.full, "full flag set for trace type %d",
4881                           iter->ent->type);
4882         }
4883         trace_access_unlock(iter->cpu_file);
4884         trace_event_read_unlock();
4885
4886         /* Now copy what we have to the user */
4887         sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4888         if (iter->seq.seq.readpos >= trace_seq_used(&iter->seq))
4889                 trace_seq_init(&iter->seq);
4890
4891         /*
4892          * If there was nothing to send to user, in spite of consuming trace
4893          * entries, go back to wait for more entries.
4894          */
4895         if (sret == -EBUSY)
4896                 goto waitagain;
4897
4898 out:
4899         mutex_unlock(&iter->mutex);
4900
4901         return sret;
4902 }
4903
4904 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
4905                                      unsigned int idx)
4906 {
4907         __free_page(spd->pages[idx]);
4908 }
4909
4910 static const struct pipe_buf_operations tracing_pipe_buf_ops = {
4911         .can_merge              = 0,
4912         .confirm                = generic_pipe_buf_confirm,
4913         .release                = generic_pipe_buf_release,
4914         .steal                  = generic_pipe_buf_steal,
4915         .get                    = generic_pipe_buf_get,
4916 };
4917
4918 static size_t
4919 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
4920 {
4921         size_t count;
4922         int save_len;
4923         int ret;
4924
4925         /* Seq buffer is page-sized, exactly what we need. */
4926         for (;;) {
4927                 save_len = iter->seq.seq.len;
4928                 ret = print_trace_line(iter);
4929
4930                 if (trace_seq_has_overflowed(&iter->seq)) {
4931                         iter->seq.seq.len = save_len;
4932                         break;
4933                 }
4934
4935                 /*
4936                  * This should not be hit, because it should only
4937                  * be set if the iter->seq overflowed. But check it
4938                  * anyway to be safe.
4939                  */
4940                 if (ret == TRACE_TYPE_PARTIAL_LINE) {
4941                         iter->seq.seq.len = save_len;
4942                         break;
4943                 }
4944
4945                 count = trace_seq_used(&iter->seq) - save_len;
4946                 if (rem < count) {
4947                         rem = 0;
4948                         iter->seq.seq.len = save_len;
4949                         break;
4950                 }
4951
4952                 if (ret != TRACE_TYPE_NO_CONSUME)
4953                         trace_consume(iter);
4954                 rem -= count;
4955                 if (!trace_find_next_entry_inc(iter))   {
4956                         rem = 0;
4957                         iter->ent = NULL;
4958                         break;
4959                 }
4960         }
4961
4962         return rem;
4963 }
4964
4965 static ssize_t tracing_splice_read_pipe(struct file *filp,
4966                                         loff_t *ppos,
4967                                         struct pipe_inode_info *pipe,
4968                                         size_t len,
4969                                         unsigned int flags)
4970 {
4971         struct page *pages_def[PIPE_DEF_BUFFERS];
4972         struct partial_page partial_def[PIPE_DEF_BUFFERS];
4973         struct trace_iterator *iter = filp->private_data;
4974         struct splice_pipe_desc spd = {
4975                 .pages          = pages_def,
4976                 .partial        = partial_def,
4977                 .nr_pages       = 0, /* This gets updated below. */
4978                 .nr_pages_max   = PIPE_DEF_BUFFERS,
4979                 .flags          = flags,
4980                 .ops            = &tracing_pipe_buf_ops,
4981                 .spd_release    = tracing_spd_release_pipe,
4982         };
4983         ssize_t ret;
4984         size_t rem;
4985         unsigned int i;
4986
4987         if (splice_grow_spd(pipe, &spd))
4988                 return -ENOMEM;
4989
4990         mutex_lock(&iter->mutex);
4991
4992         if (iter->trace->splice_read) {
4993                 ret = iter->trace->splice_read(iter, filp,
4994                                                ppos, pipe, len, flags);
4995                 if (ret)
4996                         goto out_err;
4997         }
4998
4999         ret = tracing_wait_pipe(filp);
5000         if (ret <= 0)
5001                 goto out_err;
5002
5003         if (!iter->ent && !trace_find_next_entry_inc(iter)) {
5004                 ret = -EFAULT;
5005                 goto out_err;
5006         }
5007
5008         trace_event_read_lock();
5009         trace_access_lock(iter->cpu_file);
5010
5011         /* Fill as many pages as possible. */
5012         for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) {
5013                 spd.pages[i] = alloc_page(GFP_KERNEL);
5014                 if (!spd.pages[i])
5015                         break;
5016
5017                 rem = tracing_fill_pipe_page(rem, iter);
5018
5019                 /* Copy the data into the page, so we can start over. */
5020                 ret = trace_seq_to_buffer(&iter->seq,
5021                                           page_address(spd.pages[i]),
5022                                           trace_seq_used(&iter->seq));
5023                 if (ret < 0) {
5024                         __free_page(spd.pages[i]);
5025                         break;
5026                 }
5027                 spd.partial[i].offset = 0;
5028                 spd.partial[i].len = trace_seq_used(&iter->seq);
5029
5030                 trace_seq_init(&iter->seq);
5031         }
5032
5033         trace_access_unlock(iter->cpu_file);
5034         trace_event_read_unlock();
5035         mutex_unlock(&iter->mutex);
5036
5037         spd.nr_pages = i;
5038
5039         if (i)
5040                 ret = splice_to_pipe(pipe, &spd);
5041         else
5042                 ret = 0;
5043 out:
5044         splice_shrink_spd(&spd);
5045         return ret;
5046
5047 out_err:
5048         mutex_unlock(&iter->mutex);
5049         goto out;
5050 }
5051
5052 static ssize_t
5053 tracing_entries_read(struct file *filp, char __user *ubuf,
5054                      size_t cnt, loff_t *ppos)
5055 {
5056         struct inode *inode = file_inode(filp);
5057         struct trace_array *tr = inode->i_private;
5058         int cpu = tracing_get_cpu(inode);
5059         char buf[64];
5060         int r = 0;
5061         ssize_t ret;
5062
5063         mutex_lock(&trace_types_lock);
5064
5065         if (cpu == RING_BUFFER_ALL_CPUS) {
5066                 int cpu, buf_size_same;
5067                 unsigned long size;
5068
5069                 size = 0;
5070                 buf_size_same = 1;
5071                 /* check if all cpu sizes are same */
5072                 for_each_tracing_cpu(cpu) {
5073                         /* fill in the size from first enabled cpu */
5074                         if (size == 0)
5075                                 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries;
5076                         if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) {
5077                                 buf_size_same = 0;
5078                                 break;
5079                         }
5080                 }
5081
5082                 if (buf_size_same) {
5083                         if (!ring_buffer_expanded)
5084                                 r = sprintf(buf, "%lu (expanded: %lu)\n",
5085                                             size >> 10,
5086                                             trace_buf_size >> 10);
5087                         else
5088                                 r = sprintf(buf, "%lu\n", size >> 10);
5089                 } else
5090                         r = sprintf(buf, "X\n");
5091         } else
5092                 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10);
5093
5094         mutex_unlock(&trace_types_lock);
5095
5096         ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5097         return ret;
5098 }
5099
5100 static ssize_t
5101 tracing_entries_write(struct file *filp, const char __user *ubuf,
5102                       size_t cnt, loff_t *ppos)
5103 {
5104         struct inode *inode = file_inode(filp);
5105         struct trace_array *tr = inode->i_private;
5106         unsigned long val;
5107         int ret;
5108
5109         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5110         if (ret)
5111                 return ret;
5112
5113         /* must have at least 1 entry */
5114         if (!val)
5115                 return -EINVAL;
5116
5117         /* value is in KB */
5118         val <<= 10;
5119         ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
5120         if (ret < 0)
5121                 return ret;
5122
5123         *ppos += cnt;
5124
5125         return cnt;
5126 }
5127
5128 static ssize_t
5129 tracing_total_entries_read(struct file *filp, char __user *ubuf,
5130                                 size_t cnt, loff_t *ppos)
5131 {
5132         struct trace_array *tr = filp->private_data;
5133         char buf[64];
5134         int r, cpu;
5135         unsigned long size = 0, expanded_size = 0;
5136
5137         mutex_lock(&trace_types_lock);
5138         for_each_tracing_cpu(cpu) {
5139                 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10;
5140                 if (!ring_buffer_expanded)
5141                         expanded_size += trace_buf_size >> 10;
5142         }
5143         if (ring_buffer_expanded)
5144                 r = sprintf(buf, "%lu\n", size);
5145         else
5146                 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
5147         mutex_unlock(&trace_types_lock);
5148
5149         return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5150 }
5151
5152 static ssize_t
5153 tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
5154                           size_t cnt, loff_t *ppos)
5155 {
5156         /*
5157          * There is no need to read what the user has written, this function
5158          * is just to make sure that there is no error when "echo" is used
5159          */
5160
5161         *ppos += cnt;
5162
5163         return cnt;
5164 }
5165
5166 static int
5167 tracing_free_buffer_release(struct inode *inode, struct file *filp)
5168 {
5169         struct trace_array *tr = inode->i_private;
5170
5171         /* disable tracing ? */
5172         if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE)
5173                 tracer_tracing_off(tr);
5174         /* resize the ring buffer to 0 */
5175         tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
5176
5177         trace_array_put(tr);
5178
5179         return 0;
5180 }
5181
5182 static ssize_t
5183 tracing_mark_write(struct file *filp, const char __user *ubuf,
5184                                         size_t cnt, loff_t *fpos)
5185 {
5186         unsigned long addr = (unsigned long)ubuf;
5187         struct trace_array *tr = filp->private_data;
5188         struct ring_buffer_event *event;
5189         struct ring_buffer *buffer;
5190         struct print_entry *entry;
5191         unsigned long irq_flags;
5192         struct page *pages[2];
5193         void *map_page[2];
5194         int nr_pages = 1;
5195         ssize_t written;
5196         int offset;
5197         int size;
5198         int len;
5199         int ret;
5200         int i;
5201
5202         if (tracing_disabled)
5203                 return -EINVAL;
5204
5205         if (!(tr->trace_flags & TRACE_ITER_MARKERS))
5206                 return -EINVAL;
5207
5208         if (cnt > TRACE_BUF_SIZE)
5209                 cnt = TRACE_BUF_SIZE;
5210
5211         /*
5212          * Userspace is injecting traces into the kernel trace buffer.
5213          * We want to be as non intrusive as possible.
5214          * To do so, we do not want to allocate any special buffers
5215          * or take any locks, but instead write the userspace data
5216          * straight into the ring buffer.
5217          *
5218          * First we need to pin the userspace buffer into memory,
5219          * which, most likely it is, because it just referenced it.
5220          * But there's no guarantee that it is. By using get_user_pages_fast()
5221          * and kmap_atomic/kunmap_atomic() we can get access to the
5222          * pages directly. We then write the data directly into the
5223          * ring buffer.
5224          */
5225         BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
5226
5227         /* check if we cross pages */
5228         if ((addr & PAGE_MASK) != ((addr + cnt) & PAGE_MASK))
5229                 nr_pages = 2;
5230
5231         offset = addr & (PAGE_SIZE - 1);
5232         addr &= PAGE_MASK;
5233
5234         ret = get_user_pages_fast(addr, nr_pages, 0, pages);
5235         if (ret < nr_pages) {
5236                 while (--ret >= 0)
5237                         put_page(pages[ret]);
5238                 written = -EFAULT;
5239                 goto out;
5240         }
5241
5242         for (i = 0; i < nr_pages; i++)
5243                 map_page[i] = kmap_atomic(pages[i]);
5244
5245         local_save_flags(irq_flags);
5246         size = sizeof(*entry) + cnt + 2; /* possible \n added */
5247         buffer = tr->trace_buffer.buffer;
5248         event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
5249                                           irq_flags, preempt_count());
5250         if (!event) {
5251                 /* Ring buffer disabled, return as if not open for write */
5252                 written = -EBADF;
5253                 goto out_unlock;
5254         }
5255
5256         entry = ring_buffer_event_data(event);
5257         entry->ip = _THIS_IP_;
5258
5259         if (nr_pages == 2) {
5260                 len = PAGE_SIZE - offset;
5261                 memcpy(&entry->buf, map_page[0] + offset, len);
5262                 memcpy(&entry->buf[len], map_page[1], cnt - len);
5263         } else
5264                 memcpy(&entry->buf, map_page[0] + offset, cnt);
5265
5266         if (entry->buf[cnt - 1] != '\n') {
5267                 entry->buf[cnt] = '\n';
5268                 entry->buf[cnt + 1] = '\0';
5269         } else
5270                 entry->buf[cnt] = '\0';
5271
5272         __buffer_unlock_commit(buffer, event);
5273
5274         written = cnt;
5275
5276         *fpos += written;
5277
5278  out_unlock:
5279         for (i = nr_pages - 1; i >= 0; i--) {
5280                 kunmap_atomic(map_page[i]);
5281                 put_page(pages[i]);
5282         }
5283  out:
5284         return written;
5285 }
5286
5287 static int tracing_clock_show(struct seq_file *m, void *v)
5288 {
5289         struct trace_array *tr = m->private;
5290         int i;
5291
5292         for (i = 0; i < ARRAY_SIZE(trace_clocks); i++)
5293                 seq_printf(m,
5294                         "%s%s%s%s", i ? " " : "",
5295                         i == tr->clock_id ? "[" : "", trace_clocks[i].name,
5296                         i == tr->clock_id ? "]" : "");
5297         seq_putc(m, '\n');
5298
5299         return 0;
5300 }
5301
5302 static int tracing_set_clock(struct trace_array *tr, const char *clockstr)
5303 {
5304         int i;
5305
5306         for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) {
5307                 if (strcmp(trace_clocks[i].name, clockstr) == 0)
5308                         break;
5309         }
5310         if (i == ARRAY_SIZE(trace_clocks))
5311                 return -EINVAL;
5312
5313         mutex_lock(&trace_types_lock);
5314
5315         tr->clock_id = i;
5316
5317         ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func);
5318
5319         /*
5320          * New clock may not be consistent with the previous clock.
5321          * Reset the buffer so that it doesn't have incomparable timestamps.
5322          */
5323         tracing_reset_online_cpus(&tr->trace_buffer);
5324
5325 #ifdef CONFIG_TRACER_MAX_TRACE
5326         if (tr->max_buffer.buffer)
5327                 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
5328         tracing_reset_online_cpus(&tr->max_buffer);
5329 #endif
5330
5331         mutex_unlock(&trace_types_lock);
5332
5333         return 0;
5334 }
5335
5336 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
5337                                    size_t cnt, loff_t *fpos)
5338 {
5339         struct seq_file *m = filp->private_data;
5340         struct trace_array *tr = m->private;
5341         char buf[64];
5342         const char *clockstr;
5343         int ret;
5344
5345         if (cnt >= sizeof(buf))
5346                 return -EINVAL;
5347
5348         if (copy_from_user(&buf, ubuf, cnt))
5349                 return -EFAULT;
5350
5351         buf[cnt] = 0;
5352
5353         clockstr = strstrip(buf);
5354
5355         ret = tracing_set_clock(tr, clockstr);
5356         if (ret)
5357                 return ret;
5358
5359         *fpos += cnt;
5360
5361         return cnt;
5362 }
5363
5364 static int tracing_clock_open(struct inode *inode, struct file *file)
5365 {
5366         struct trace_array *tr = inode->i_private;
5367         int ret;
5368
5369         if (tracing_disabled)
5370                 return -ENODEV;
5371
5372         if (trace_array_get(tr))
5373                 return -ENODEV;
5374
5375         ret = single_open(file, tracing_clock_show, inode->i_private);
5376         if (ret < 0)
5377                 trace_array_put(tr);
5378
5379         return ret;
5380 }
5381
5382 struct ftrace_buffer_info {
5383         struct trace_iterator   iter;
5384         void                    *spare;
5385         unsigned int            read;
5386 };
5387
5388 #ifdef CONFIG_TRACER_SNAPSHOT
5389 static int tracing_snapshot_open(struct inode *inode, struct file *file)
5390 {
5391         struct trace_array *tr = inode->i_private;
5392         struct trace_iterator *iter;
5393         struct seq_file *m;
5394         int ret = 0;
5395
5396         if (trace_array_get(tr) < 0)
5397                 return -ENODEV;
5398
5399         if (file->f_mode & FMODE_READ) {
5400                 iter = __tracing_open(inode, file, true);
5401                 if (IS_ERR(iter))
5402                         ret = PTR_ERR(iter);
5403         } else {
5404                 /* Writes still need the seq_file to hold the private data */
5405                 ret = -ENOMEM;
5406                 m = kzalloc(sizeof(*m), GFP_KERNEL);
5407                 if (!m)
5408                         goto out;
5409                 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
5410                 if (!iter) {
5411                         kfree(m);
5412                         goto out;
5413                 }
5414                 ret = 0;
5415
5416                 iter->tr = tr;
5417                 iter->trace_buffer = &tr->max_buffer;
5418                 iter->cpu_file = tracing_get_cpu(inode);
5419                 m->private = iter;
5420                 file->private_data = m;
5421         }
5422 out:
5423         if (ret < 0)
5424                 trace_array_put(tr);
5425
5426         return ret;
5427 }
5428
5429 static ssize_t
5430 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
5431                        loff_t *ppos)
5432 {
5433         struct seq_file *m = filp->private_data;
5434         struct trace_iterator *iter = m->private;
5435         struct trace_array *tr = iter->tr;
5436         unsigned long val;
5437         int ret;
5438
5439         ret = tracing_update_buffers();
5440         if (ret < 0)
5441                 return ret;
5442
5443         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5444         if (ret)
5445                 return ret;
5446
5447         mutex_lock(&trace_types_lock);
5448
5449         if (tr->current_trace->use_max_tr) {
5450                 ret = -EBUSY;
5451                 goto out;
5452         }
5453
5454         switch (val) {
5455         case 0:
5456                 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5457                         ret = -EINVAL;
5458                         break;
5459                 }
5460                 if (tr->allocated_snapshot)
5461                         free_snapshot(tr);
5462                 break;
5463         case 1:
5464 /* Only allow per-cpu swap if the ring buffer supports it */
5465 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP
5466                 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5467                         ret = -EINVAL;
5468                         break;
5469                 }
5470 #endif
5471                 if (!tr->allocated_snapshot) {
5472                         ret = alloc_snapshot(tr);
5473                         if (ret < 0)
5474                                 break;
5475                 }
5476                 local_irq_disable();
5477                 /* Now, we're going to swap */
5478                 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5479                         update_max_tr(tr, current, smp_processor_id());
5480                 else
5481                         update_max_tr_single(tr, current, iter->cpu_file);
5482                 local_irq_enable();
5483                 break;
5484         default:
5485                 if (tr->allocated_snapshot) {
5486                         if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5487                                 tracing_reset_online_cpus(&tr->max_buffer);
5488                         else
5489                                 tracing_reset(&tr->max_buffer, iter->cpu_file);
5490                 }
5491                 break;
5492         }
5493
5494         if (ret >= 0) {
5495                 *ppos += cnt;
5496                 ret = cnt;
5497         }
5498 out:
5499         mutex_unlock(&trace_types_lock);
5500         return ret;
5501 }
5502
5503 static int tracing_snapshot_release(struct inode *inode, struct file *file)
5504 {
5505         struct seq_file *m = file->private_data;
5506         int ret;
5507
5508         ret = tracing_release(inode, file);
5509
5510         if (file->f_mode & FMODE_READ)
5511                 return ret;
5512
5513         /* If write only, the seq_file is just a stub */
5514         if (m)
5515                 kfree(m->private);
5516         kfree(m);
5517
5518         return 0;
5519 }
5520
5521 static int tracing_buffers_open(struct inode *inode, struct file *filp);
5522 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
5523                                     size_t count, loff_t *ppos);
5524 static int tracing_buffers_release(struct inode *inode, struct file *file);
5525 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5526                    struct pipe_inode_info *pipe, size_t len, unsigned int flags);
5527
5528 static int snapshot_raw_open(struct inode *inode, struct file *filp)
5529 {
5530         struct ftrace_buffer_info *info;
5531         int ret;
5532
5533         ret = tracing_buffers_open(inode, filp);
5534         if (ret < 0)
5535                 return ret;
5536
5537         info = filp->private_data;
5538
5539         if (info->iter.trace->use_max_tr) {
5540                 tracing_buffers_release(inode, filp);
5541                 return -EBUSY;
5542         }
5543
5544         info->iter.snapshot = true;
5545         info->iter.trace_buffer = &info->iter.tr->max_buffer;
5546
5547         return ret;
5548 }
5549
5550 #endif /* CONFIG_TRACER_SNAPSHOT */
5551
5552
5553 static const struct file_operations tracing_thresh_fops = {
5554         .open           = tracing_open_generic,
5555         .read           = tracing_thresh_read,
5556         .write          = tracing_thresh_write,
5557         .llseek         = generic_file_llseek,
5558 };
5559
5560 #ifdef CONFIG_TRACER_MAX_TRACE
5561 static const struct file_operations tracing_max_lat_fops = {
5562         .open           = tracing_open_generic,
5563         .read           = tracing_max_lat_read,
5564         .write          = tracing_max_lat_write,
5565         .llseek         = generic_file_llseek,
5566 };
5567 #endif
5568
5569 static const struct file_operations set_tracer_fops = {
5570         .open           = tracing_open_generic,
5571         .read           = tracing_set_trace_read,
5572         .write          = tracing_set_trace_write,
5573         .llseek         = generic_file_llseek,
5574 };
5575
5576 static const struct file_operations tracing_pipe_fops = {
5577         .open           = tracing_open_pipe,
5578         .poll           = tracing_poll_pipe,
5579         .read           = tracing_read_pipe,
5580         .splice_read    = tracing_splice_read_pipe,
5581         .release        = tracing_release_pipe,
5582         .llseek         = no_llseek,
5583 };
5584
5585 static const struct file_operations tracing_entries_fops = {
5586         .open           = tracing_open_generic_tr,
5587         .read           = tracing_entries_read,
5588         .write          = tracing_entries_write,
5589         .llseek         = generic_file_llseek,
5590         .release        = tracing_release_generic_tr,
5591 };
5592
5593 static const struct file_operations tracing_total_entries_fops = {
5594         .open           = tracing_open_generic_tr,
5595         .read           = tracing_total_entries_read,
5596         .llseek         = generic_file_llseek,
5597         .release        = tracing_release_generic_tr,
5598 };
5599
5600 static const struct file_operations tracing_free_buffer_fops = {
5601         .open           = tracing_open_generic_tr,
5602         .write          = tracing_free_buffer_write,
5603         .release        = tracing_free_buffer_release,
5604 };
5605
5606 static const struct file_operations tracing_mark_fops = {
5607         .open           = tracing_open_generic_tr,
5608         .write          = tracing_mark_write,
5609         .llseek         = generic_file_llseek,
5610         .release        = tracing_release_generic_tr,
5611 };
5612
5613 static const struct file_operations trace_clock_fops = {
5614         .open           = tracing_clock_open,
5615         .read           = seq_read,
5616         .llseek         = seq_lseek,
5617         .release        = tracing_single_release_tr,
5618         .write          = tracing_clock_write,
5619 };
5620
5621 #ifdef CONFIG_TRACER_SNAPSHOT
5622 static const struct file_operations snapshot_fops = {
5623         .open           = tracing_snapshot_open,
5624         .read           = seq_read,
5625         .write          = tracing_snapshot_write,
5626         .llseek         = tracing_lseek,
5627         .release        = tracing_snapshot_release,
5628 };
5629
5630 static const struct file_operations snapshot_raw_fops = {
5631         .open           = snapshot_raw_open,
5632         .read           = tracing_buffers_read,
5633         .release        = tracing_buffers_release,
5634         .splice_read    = tracing_buffers_splice_read,
5635         .llseek         = no_llseek,
5636 };
5637
5638 #endif /* CONFIG_TRACER_SNAPSHOT */
5639
5640 static int tracing_buffers_open(struct inode *inode, struct file *filp)
5641 {
5642         struct trace_array *tr = inode->i_private;
5643         struct ftrace_buffer_info *info;
5644         int ret;
5645
5646         if (tracing_disabled)
5647                 return -ENODEV;
5648
5649         if (trace_array_get(tr) < 0)
5650                 return -ENODEV;
5651
5652         info = kzalloc(sizeof(*info), GFP_KERNEL);
5653         if (!info) {
5654                 trace_array_put(tr);
5655                 return -ENOMEM;
5656         }
5657
5658         mutex_lock(&trace_types_lock);
5659
5660         info->iter.tr           = tr;
5661         info->iter.cpu_file     = tracing_get_cpu(inode);
5662         info->iter.trace        = tr->current_trace;
5663         info->iter.trace_buffer = &tr->trace_buffer;
5664         info->spare             = NULL;
5665         /* Force reading ring buffer for first read */
5666         info->read              = (unsigned int)-1;
5667
5668         filp->private_data = info;
5669
5670         tr->current_trace->ref++;
5671
5672         mutex_unlock(&trace_types_lock);
5673
5674         ret = nonseekable_open(inode, filp);
5675         if (ret < 0)
5676                 trace_array_put(tr);
5677
5678         return ret;
5679 }
5680
5681 static unsigned int
5682 tracing_buffers_poll(struct file *filp, poll_table *poll_table)
5683 {
5684         struct ftrace_buffer_info *info = filp->private_data;
5685         struct trace_iterator *iter = &info->iter;
5686
5687         return trace_poll(iter, filp, poll_table);
5688 }
5689
5690 static ssize_t
5691 tracing_buffers_read(struct file *filp, char __user *ubuf,
5692                      size_t count, loff_t *ppos)
5693 {
5694         struct ftrace_buffer_info *info = filp->private_data;
5695         struct trace_iterator *iter = &info->iter;
5696         ssize_t ret;
5697         ssize_t size;
5698
5699         if (!count)
5700                 return 0;
5701
5702 #ifdef CONFIG_TRACER_MAX_TRACE
5703         if (iter->snapshot && iter->tr->current_trace->use_max_tr)
5704                 return -EBUSY;
5705 #endif
5706
5707         if (!info->spare)
5708                 info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer,
5709                                                           iter->cpu_file);
5710         if (!info->spare)
5711                 return -ENOMEM;
5712
5713         /* Do we have previous read data to read? */
5714         if (info->read < PAGE_SIZE)
5715                 goto read;
5716
5717  again:
5718         trace_access_lock(iter->cpu_file);
5719         ret = ring_buffer_read_page(iter->trace_buffer->buffer,
5720                                     &info->spare,
5721                                     count,
5722                                     iter->cpu_file, 0);
5723         trace_access_unlock(iter->cpu_file);
5724
5725         if (ret < 0) {
5726                 if (trace_empty(iter)) {
5727                         if ((filp->f_flags & O_NONBLOCK))
5728                                 return -EAGAIN;
5729
5730                         ret = wait_on_pipe(iter, false);
5731                         if (ret)
5732                                 return ret;
5733
5734                         goto again;
5735                 }
5736                 return 0;
5737         }
5738
5739         info->read = 0;
5740  read:
5741         size = PAGE_SIZE - info->read;
5742         if (size > count)
5743                 size = count;
5744
5745         ret = copy_to_user(ubuf, info->spare + info->read, size);
5746         if (ret == size)
5747                 return -EFAULT;
5748
5749         size -= ret;
5750
5751         *ppos += size;
5752         info->read += size;
5753
5754         return size;
5755 }
5756
5757 static int tracing_buffers_release(struct inode *inode, struct file *file)
5758 {
5759         struct ftrace_buffer_info *info = file->private_data;
5760         struct trace_iterator *iter = &info->iter;
5761
5762         mutex_lock(&trace_types_lock);
5763
5764         iter->tr->current_trace->ref--;
5765
5766         __trace_array_put(iter->tr);
5767
5768         if (info->spare)
5769                 ring_buffer_free_read_page(iter->trace_buffer->buffer, info->spare);
5770         kfree(info);
5771
5772         mutex_unlock(&trace_types_lock);
5773
5774         return 0;
5775 }
5776
5777 struct buffer_ref {
5778         struct ring_buffer      *buffer;
5779         void                    *page;
5780         int                     ref;
5781 };
5782
5783 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
5784                                     struct pipe_buffer *buf)
5785 {
5786         struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5787
5788         if (--ref->ref)
5789                 return;
5790
5791         ring_buffer_free_read_page(ref->buffer, ref->page);
5792         kfree(ref);
5793         buf->private = 0;
5794 }
5795
5796 static void buffer_pipe_buf_get(struct pipe_inode_info *pipe,
5797                                 struct pipe_buffer *buf)
5798 {
5799         struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5800
5801         ref->ref++;
5802 }
5803
5804 /* Pipe buffer operations for a buffer. */
5805 static const struct pipe_buf_operations buffer_pipe_buf_ops = {
5806         .can_merge              = 0,
5807         .confirm                = generic_pipe_buf_confirm,
5808         .release                = buffer_pipe_buf_release,
5809         .steal                  = generic_pipe_buf_steal,
5810         .get                    = buffer_pipe_buf_get,
5811 };
5812
5813 /*
5814  * Callback from splice_to_pipe(), if we need to release some pages
5815  * at the end of the spd in case we error'ed out in filling the pipe.
5816  */
5817 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i)
5818 {
5819         struct buffer_ref *ref =
5820                 (struct buffer_ref *)spd->partial[i].private;
5821
5822         if (--ref->ref)
5823                 return;
5824
5825         ring_buffer_free_read_page(ref->buffer, ref->page);
5826         kfree(ref);
5827         spd->partial[i].private = 0;
5828 }
5829
5830 static ssize_t
5831 tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5832                             struct pipe_inode_info *pipe, size_t len,
5833                             unsigned int flags)
5834 {
5835         struct ftrace_buffer_info *info = file->private_data;
5836         struct trace_iterator *iter = &info->iter;
5837         struct partial_page partial_def[PIPE_DEF_BUFFERS];
5838         struct page *pages_def[PIPE_DEF_BUFFERS];
5839         struct splice_pipe_desc spd = {
5840                 .pages          = pages_def,
5841                 .partial        = partial_def,
5842                 .nr_pages_max   = PIPE_DEF_BUFFERS,
5843                 .flags          = flags,
5844                 .ops            = &buffer_pipe_buf_ops,
5845                 .spd_release    = buffer_spd_release,
5846         };
5847         struct buffer_ref *ref;
5848         int entries, i;
5849         ssize_t ret = 0;
5850
5851 #ifdef CONFIG_TRACER_MAX_TRACE
5852         if (iter->snapshot && iter->tr->current_trace->use_max_tr)
5853                 return -EBUSY;
5854 #endif
5855
5856         if (*ppos & (PAGE_SIZE - 1))
5857                 return -EINVAL;
5858
5859         if (len & (PAGE_SIZE - 1)) {
5860                 if (len < PAGE_SIZE)
5861                         return -EINVAL;
5862                 len &= PAGE_MASK;
5863         }
5864
5865         if (splice_grow_spd(pipe, &spd))
5866                 return -ENOMEM;
5867
5868  again:
5869         trace_access_lock(iter->cpu_file);
5870         entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5871
5872         for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) {
5873                 struct page *page;
5874                 int r;
5875
5876                 ref = kzalloc(sizeof(*ref), GFP_KERNEL);
5877                 if (!ref) {
5878                         ret = -ENOMEM;
5879                         break;
5880                 }
5881
5882                 ref->ref = 1;
5883                 ref->buffer = iter->trace_buffer->buffer;
5884                 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
5885                 if (!ref->page) {
5886                         ret = -ENOMEM;
5887                         kfree(ref);
5888                         break;
5889                 }
5890
5891                 r = ring_buffer_read_page(ref->buffer, &ref->page,
5892                                           len, iter->cpu_file, 1);
5893                 if (r < 0) {
5894                         ring_buffer_free_read_page(ref->buffer, ref->page);
5895                         kfree(ref);
5896                         break;
5897                 }
5898
5899                 page = virt_to_page(ref->page);
5900
5901                 spd.pages[i] = page;
5902                 spd.partial[i].len = PAGE_SIZE;
5903                 spd.partial[i].offset = 0;
5904                 spd.partial[i].private = (unsigned long)ref;
5905                 spd.nr_pages++;
5906                 *ppos += PAGE_SIZE;
5907
5908                 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5909         }
5910
5911         trace_access_unlock(iter->cpu_file);
5912         spd.nr_pages = i;
5913
5914         /* did we read anything? */
5915         if (!spd.nr_pages) {
5916                 if (ret)
5917                         goto out;
5918
5919                 ret = -EAGAIN;
5920                 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
5921                         goto out;
5922
5923                 ret = wait_on_pipe(iter, true);
5924                 if (ret)
5925                         goto out;
5926
5927                 goto again;
5928         }
5929
5930         ret = splice_to_pipe(pipe, &spd);
5931 out:
5932         splice_shrink_spd(&spd);
5933
5934         return ret;
5935 }
5936
5937 static const struct file_operations tracing_buffers_fops = {
5938         .open           = tracing_buffers_open,
5939         .read           = tracing_buffers_read,
5940         .poll           = tracing_buffers_poll,
5941         .release        = tracing_buffers_release,
5942         .splice_read    = tracing_buffers_splice_read,
5943         .llseek         = no_llseek,
5944 };
5945
5946 static ssize_t
5947 tracing_stats_read(struct file *filp, char __user *ubuf,
5948                    size_t count, loff_t *ppos)
5949 {
5950         struct inode *inode = file_inode(filp);
5951         struct trace_array *tr = inode->i_private;
5952         struct trace_buffer *trace_buf = &tr->trace_buffer;
5953         int cpu = tracing_get_cpu(inode);
5954         struct trace_seq *s;
5955         unsigned long cnt;
5956         unsigned long long t;
5957         unsigned long usec_rem;
5958
5959         s = kmalloc(sizeof(*s), GFP_KERNEL);
5960         if (!s)
5961                 return -ENOMEM;
5962
5963         trace_seq_init(s);
5964
5965         cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu);
5966         trace_seq_printf(s, "entries: %ld\n", cnt);
5967
5968         cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu);
5969         trace_seq_printf(s, "overrun: %ld\n", cnt);
5970
5971         cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu);
5972         trace_seq_printf(s, "commit overrun: %ld\n", cnt);
5973
5974         cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu);
5975         trace_seq_printf(s, "bytes: %ld\n", cnt);
5976
5977         if (trace_clocks[tr->clock_id].in_ns) {
5978                 /* local or global for trace_clock */
5979                 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5980                 usec_rem = do_div(t, USEC_PER_SEC);
5981                 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n",
5982                                                                 t, usec_rem);
5983
5984                 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu));
5985                 usec_rem = do_div(t, USEC_PER_SEC);
5986                 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem);
5987         } else {
5988                 /* counter or tsc mode for trace_clock */
5989                 trace_seq_printf(s, "oldest event ts: %llu\n",
5990                                 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5991
5992                 trace_seq_printf(s, "now ts: %llu\n",
5993                                 ring_buffer_time_stamp(trace_buf->buffer, cpu));
5994         }
5995
5996         cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu);
5997         trace_seq_printf(s, "dropped events: %ld\n", cnt);
5998
5999         cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
6000         trace_seq_printf(s, "read events: %ld\n", cnt);
6001
6002         count = simple_read_from_buffer(ubuf, count, ppos,
6003                                         s->buffer, trace_seq_used(s));
6004
6005         kfree(s);
6006
6007         return count;
6008 }
6009
6010 static const struct file_operations tracing_stats_fops = {
6011         .open           = tracing_open_generic_tr,
6012         .read           = tracing_stats_read,
6013         .llseek         = generic_file_llseek,
6014         .release        = tracing_release_generic_tr,
6015 };
6016
6017 #ifdef CONFIG_DYNAMIC_FTRACE
6018
6019 int __weak ftrace_arch_read_dyn_info(char *buf, int size)
6020 {
6021         return 0;
6022 }
6023
6024 static ssize_t
6025 tracing_read_dyn_info(struct file *filp, char __user *ubuf,
6026                   size_t cnt, loff_t *ppos)
6027 {
6028         static char ftrace_dyn_info_buffer[1024];
6029         static DEFINE_MUTEX(dyn_info_mutex);
6030         unsigned long *p = filp->private_data;
6031         char *buf = ftrace_dyn_info_buffer;
6032         int size = ARRAY_SIZE(ftrace_dyn_info_buffer);
6033         int r;
6034
6035         mutex_lock(&dyn_info_mutex);
6036         r = sprintf(buf, "%ld ", *p);
6037
6038         r += ftrace_arch_read_dyn_info(buf+r, (size-1)-r);
6039         buf[r++] = '\n';
6040
6041         r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6042
6043         mutex_unlock(&dyn_info_mutex);
6044
6045         return r;
6046 }
6047
6048 static const struct file_operations tracing_dyn_info_fops = {
6049         .open           = tracing_open_generic,
6050         .read           = tracing_read_dyn_info,
6051         .llseek         = generic_file_llseek,
6052 };
6053 #endif /* CONFIG_DYNAMIC_FTRACE */
6054
6055 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE)
6056 static void
6057 ftrace_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
6058 {
6059         tracing_snapshot();
6060 }
6061
6062 static void
6063 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
6064 {
6065         unsigned long *count = (long *)data;
6066
6067         if (!*count)
6068                 return;
6069
6070         if (*count != -1)
6071                 (*count)--;
6072
6073         tracing_snapshot();
6074 }
6075
6076 static int
6077 ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
6078                       struct ftrace_probe_ops *ops, void *data)
6079 {
6080         long count = (long)data;
6081
6082         seq_printf(m, "%ps:", (void *)ip);
6083
6084         seq_puts(m, "snapshot");
6085
6086         if (count == -1)
6087                 seq_puts(m, ":unlimited\n");
6088         else
6089                 seq_printf(m, ":count=%ld\n", count);
6090
6091         return 0;
6092 }
6093
6094 static struct ftrace_probe_ops snapshot_probe_ops = {
6095         .func                   = ftrace_snapshot,
6096         .print                  = ftrace_snapshot_print,
6097 };
6098
6099 static struct ftrace_probe_ops snapshot_count_probe_ops = {
6100         .func                   = ftrace_count_snapshot,
6101         .print                  = ftrace_snapshot_print,
6102 };
6103
6104 static int
6105 ftrace_trace_snapshot_callback(struct ftrace_hash *hash,
6106                                char *glob, char *cmd, char *param, int enable)
6107 {
6108         struct ftrace_probe_ops *ops;
6109         void *count = (void *)-1;
6110         char *number;
6111         int ret;
6112
6113         /* hash funcs only work with set_ftrace_filter */
6114         if (!enable)
6115                 return -EINVAL;
6116
6117         ops = param ? &snapshot_count_probe_ops :  &snapshot_probe_ops;
6118
6119         if (glob[0] == '!') {
6120                 unregister_ftrace_function_probe_func(glob+1, ops);
6121                 return 0;
6122         }
6123
6124         if (!param)
6125                 goto out_reg;
6126
6127         number = strsep(&param, ":");
6128
6129         if (!strlen(number))
6130                 goto out_reg;
6131
6132         /*
6133          * We use the callback data field (which is a pointer)
6134          * as our counter.
6135          */
6136         ret = kstrtoul(number, 0, (unsigned long *)&count);
6137         if (ret)
6138                 return ret;
6139
6140  out_reg:
6141         ret = alloc_snapshot(&global_trace);
6142         if (ret < 0)
6143                 goto out;
6144
6145         ret = register_ftrace_function_probe(glob, ops, count);
6146
6147  out:
6148         return ret < 0 ? ret : 0;
6149 }
6150
6151 static struct ftrace_func_command ftrace_snapshot_cmd = {
6152         .name                   = "snapshot",
6153         .func                   = ftrace_trace_snapshot_callback,
6154 };
6155
6156 static __init int register_snapshot_cmd(void)
6157 {
6158         return register_ftrace_command(&ftrace_snapshot_cmd);
6159 }
6160 #else
6161 static inline __init int register_snapshot_cmd(void) { return 0; }
6162 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */
6163
6164 static struct dentry *tracing_get_dentry(struct trace_array *tr)
6165 {
6166         if (WARN_ON(!tr->dir))
6167                 return ERR_PTR(-ENODEV);
6168
6169         /* Top directory uses NULL as the parent */
6170         if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
6171                 return NULL;
6172
6173         /* All sub buffers have a descriptor */
6174         return tr->dir;
6175 }
6176
6177 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
6178 {
6179         struct dentry *d_tracer;
6180
6181         if (tr->percpu_dir)
6182                 return tr->percpu_dir;
6183
6184         d_tracer = tracing_get_dentry(tr);
6185         if (IS_ERR(d_tracer))
6186                 return NULL;
6187
6188         tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer);
6189
6190         WARN_ONCE(!tr->percpu_dir,
6191                   "Could not create tracefs directory 'per_cpu/%d'\n", cpu);
6192
6193         return tr->percpu_dir;
6194 }
6195
6196 static struct dentry *
6197 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
6198                       void *data, long cpu, const struct file_operations *fops)
6199 {
6200         struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
6201
6202         if (ret) /* See tracing_get_cpu() */
6203                 d_inode(ret)->i_cdev = (void *)(cpu + 1);
6204         return ret;
6205 }
6206
6207 static void
6208 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu)
6209 {
6210         struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
6211         struct dentry *d_cpu;
6212         char cpu_dir[30]; /* 30 characters should be more than enough */
6213
6214         if (!d_percpu)
6215                 return;
6216
6217         snprintf(cpu_dir, 30, "cpu%ld", cpu);
6218         d_cpu = tracefs_create_dir(cpu_dir, d_percpu);
6219         if (!d_cpu) {
6220                 pr_warning("Could not create tracefs '%s' entry\n", cpu_dir);
6221                 return;
6222         }
6223
6224         /* per cpu trace_pipe */
6225         trace_create_cpu_file("trace_pipe", 0444, d_cpu,
6226                                 tr, cpu, &tracing_pipe_fops);
6227
6228         /* per cpu trace */
6229         trace_create_cpu_file("trace", 0644, d_cpu,
6230                                 tr, cpu, &tracing_fops);
6231
6232         trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
6233                                 tr, cpu, &tracing_buffers_fops);
6234
6235         trace_create_cpu_file("stats", 0444, d_cpu,
6236                                 tr, cpu, &tracing_stats_fops);
6237
6238         trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
6239                                 tr, cpu, &tracing_entries_fops);
6240
6241 #ifdef CONFIG_TRACER_SNAPSHOT
6242         trace_create_cpu_file("snapshot", 0644, d_cpu,
6243                                 tr, cpu, &snapshot_fops);
6244
6245         trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
6246                                 tr, cpu, &snapshot_raw_fops);
6247 #endif
6248 }
6249
6250 #ifdef CONFIG_FTRACE_SELFTEST
6251 /* Let selftest have access to static functions in this file */
6252 #include "trace_selftest.c"
6253 #endif
6254
6255 static ssize_t
6256 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
6257                         loff_t *ppos)
6258 {
6259         struct trace_option_dentry *topt = filp->private_data;
6260         char *buf;
6261
6262         if (topt->flags->val & topt->opt->bit)
6263                 buf = "1\n";
6264         else
6265                 buf = "0\n";
6266
6267         return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
6268 }
6269
6270 static ssize_t
6271 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
6272                          loff_t *ppos)
6273 {
6274         struct trace_option_dentry *topt = filp->private_data;
6275         unsigned long val;
6276         int ret;
6277
6278         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6279         if (ret)
6280                 return ret;
6281
6282         if (val != 0 && val != 1)
6283                 return -EINVAL;
6284
6285         if (!!(topt->flags->val & topt->opt->bit) != val) {
6286                 mutex_lock(&trace_types_lock);
6287                 ret = __set_tracer_option(topt->tr, topt->flags,
6288                                           topt->opt, !val);
6289                 mutex_unlock(&trace_types_lock);
6290                 if (ret)
6291                         return ret;
6292         }
6293
6294         *ppos += cnt;
6295
6296         return cnt;
6297 }
6298
6299
6300 static const struct file_operations trace_options_fops = {
6301         .open = tracing_open_generic,
6302         .read = trace_options_read,
6303         .write = trace_options_write,
6304         .llseek = generic_file_llseek,
6305 };
6306
6307 /*
6308  * In order to pass in both the trace_array descriptor as well as the index
6309  * to the flag that the trace option file represents, the trace_array
6310  * has a character array of trace_flags_index[], which holds the index
6311  * of the bit for the flag it represents. index[0] == 0, index[1] == 1, etc.
6312  * The address of this character array is passed to the flag option file
6313  * read/write callbacks.
6314  *
6315  * In order to extract both the index and the trace_array descriptor,
6316  * get_tr_index() uses the following algorithm.
6317  *
6318  *   idx = *ptr;
6319  *
6320  * As the pointer itself contains the address of the index (remember
6321  * index[1] == 1).
6322  *
6323  * Then to get the trace_array descriptor, by subtracting that index
6324  * from the ptr, we get to the start of the index itself.
6325  *
6326  *   ptr - idx == &index[0]
6327  *
6328  * Then a simple container_of() from that pointer gets us to the
6329  * trace_array descriptor.
6330  */
6331 static void get_tr_index(void *data, struct trace_array **ptr,
6332                          unsigned int *pindex)
6333 {
6334         *pindex = *(unsigned char *)data;
6335
6336         *ptr = container_of(data - *pindex, struct trace_array,
6337                             trace_flags_index);
6338 }
6339
6340 static ssize_t
6341 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
6342                         loff_t *ppos)
6343 {
6344         void *tr_index = filp->private_data;
6345         struct trace_array *tr;
6346         unsigned int index;
6347         char *buf;
6348
6349         get_tr_index(tr_index, &tr, &index);
6350
6351         if (tr->trace_flags & (1 << index))
6352                 buf = "1\n";
6353         else
6354                 buf = "0\n";
6355
6356         return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
6357 }
6358
6359 static ssize_t
6360 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
6361                          loff_t *ppos)
6362 {
6363         void *tr_index = filp->private_data;
6364         struct trace_array *tr;
6365         unsigned int index;
6366         unsigned long val;
6367         int ret;
6368
6369         get_tr_index(tr_index, &tr, &index);
6370
6371         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6372         if (ret)
6373                 return ret;
6374
6375         if (val != 0 && val != 1)
6376                 return -EINVAL;
6377
6378         mutex_lock(&trace_types_lock);
6379         ret = set_tracer_flag(tr, 1 << index, val);
6380         mutex_unlock(&trace_types_lock);
6381
6382         if (ret < 0)
6383                 return ret;
6384
6385         *ppos += cnt;
6386
6387         return cnt;
6388 }
6389
6390 static const struct file_operations trace_options_core_fops = {
6391         .open = tracing_open_generic,
6392         .read = trace_options_core_read,
6393         .write = trace_options_core_write,
6394         .llseek = generic_file_llseek,
6395 };
6396
6397 struct dentry *trace_create_file(const char *name,
6398                                  umode_t mode,
6399                                  struct dentry *parent,
6400                                  void *data,
6401                                  const struct file_operations *fops)
6402 {
6403         struct dentry *ret;
6404
6405         ret = tracefs_create_file(name, mode, parent, data, fops);
6406         if (!ret)
6407                 pr_warning("Could not create tracefs '%s' entry\n", name);
6408
6409         return ret;
6410 }
6411
6412
6413 static struct dentry *trace_options_init_dentry(struct trace_array *tr)
6414 {
6415         struct dentry *d_tracer;
6416
6417         if (tr->options)
6418                 return tr->options;
6419
6420         d_tracer = tracing_get_dentry(tr);
6421         if (IS_ERR(d_tracer))
6422                 return NULL;
6423
6424         tr->options = tracefs_create_dir("options", d_tracer);
6425         if (!tr->options) {
6426                 pr_warning("Could not create tracefs directory 'options'\n");
6427                 return NULL;
6428         }
6429
6430         return tr->options;
6431 }
6432
6433 static void
6434 create_trace_option_file(struct trace_array *tr,
6435                          struct trace_option_dentry *topt,
6436                          struct tracer_flags *flags,
6437                          struct tracer_opt *opt)
6438 {
6439         struct dentry *t_options;
6440
6441         t_options = trace_options_init_dentry(tr);
6442         if (!t_options)
6443                 return;
6444
6445         topt->flags = flags;
6446         topt->opt = opt;
6447         topt->tr = tr;
6448
6449         topt->entry = trace_create_file(opt->name, 0644, t_options, topt,
6450                                     &trace_options_fops);
6451
6452 }
6453
6454 static void
6455 create_trace_option_files(struct trace_array *tr, struct tracer *tracer)
6456 {
6457         struct trace_option_dentry *topts;
6458         struct trace_options *tr_topts;
6459         struct tracer_flags *flags;
6460         struct tracer_opt *opts;
6461         int cnt;
6462         int i;
6463
6464         if (!tracer)
6465                 return;
6466
6467         flags = tracer->flags;
6468
6469         if (!flags || !flags->opts)
6470                 return;
6471
6472         /*
6473          * If this is an instance, only create flags for tracers
6474          * the instance may have.
6475          */
6476         if (!trace_ok_for_array(tracer, tr))
6477                 return;
6478
6479         for (i = 0; i < tr->nr_topts; i++) {
6480                 /*
6481                  * Check if these flags have already been added.
6482                  * Some tracers share flags.
6483                  */
6484                 if (tr->topts[i].tracer->flags == tracer->flags)
6485                         return;
6486         }
6487
6488         opts = flags->opts;
6489
6490         for (cnt = 0; opts[cnt].name; cnt++)
6491                 ;
6492
6493         topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
6494         if (!topts)
6495                 return;
6496
6497         tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1),
6498                             GFP_KERNEL);
6499         if (!tr_topts) {
6500                 kfree(topts);
6501                 return;
6502         }
6503
6504         tr->topts = tr_topts;
6505         tr->topts[tr->nr_topts].tracer = tracer;
6506         tr->topts[tr->nr_topts].topts = topts;
6507         tr->nr_topts++;
6508
6509         for (cnt = 0; opts[cnt].name; cnt++) {
6510                 create_trace_option_file(tr, &topts[cnt], flags,
6511                                          &opts[cnt]);
6512                 WARN_ONCE(topts[cnt].entry == NULL,
6513                           "Failed to create trace option: %s",
6514                           opts[cnt].name);
6515         }
6516 }
6517
6518 static struct dentry *
6519 create_trace_option_core_file(struct trace_array *tr,
6520                               const char *option, long index)
6521 {
6522         struct dentry *t_options;
6523
6524         t_options = trace_options_init_dentry(tr);
6525         if (!t_options)
6526                 return NULL;
6527
6528         return trace_create_file(option, 0644, t_options,
6529                                  (void *)&tr->trace_flags_index[index],
6530                                  &trace_options_core_fops);
6531 }
6532
6533 static void create_trace_options_dir(struct trace_array *tr)
6534 {
6535         struct dentry *t_options;
6536         bool top_level = tr == &global_trace;
6537         int i;
6538
6539         t_options = trace_options_init_dentry(tr);
6540         if (!t_options)
6541                 return;
6542
6543         for (i = 0; trace_options[i]; i++) {
6544                 if (top_level ||
6545                     !((1 << i) & TOP_LEVEL_TRACE_FLAGS))
6546                         create_trace_option_core_file(tr, trace_options[i], i);
6547         }
6548 }
6549
6550 static ssize_t
6551 rb_simple_read(struct file *filp, char __user *ubuf,
6552                size_t cnt, loff_t *ppos)
6553 {
6554         struct trace_array *tr = filp->private_data;
6555         char buf[64];
6556         int r;
6557
6558         r = tracer_tracing_is_on(tr);
6559         r = sprintf(buf, "%d\n", r);
6560
6561         return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6562 }
6563
6564 static ssize_t
6565 rb_simple_write(struct file *filp, const char __user *ubuf,
6566                 size_t cnt, loff_t *ppos)
6567 {
6568         struct trace_array *tr = filp->private_data;
6569         struct ring_buffer *buffer = tr->trace_buffer.buffer;
6570         unsigned long val;
6571         int ret;
6572
6573         ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6574         if (ret)
6575                 return ret;
6576
6577         if (buffer) {
6578                 mutex_lock(&trace_types_lock);
6579                 if (val) {
6580                         tracer_tracing_on(tr);
6581                         if (tr->current_trace->start)
6582                                 tr->current_trace->start(tr);
6583                 } else {
6584                         tracer_tracing_off(tr);
6585                         if (tr->current_trace->stop)
6586                                 tr->current_trace->stop(tr);
6587                 }
6588                 mutex_unlock(&trace_types_lock);
6589         }
6590
6591         (*ppos)++;
6592
6593         return cnt;
6594 }
6595
6596 static const struct file_operations rb_simple_fops = {
6597         .open           = tracing_open_generic_tr,
6598         .read           = rb_simple_read,
6599         .write          = rb_simple_write,
6600         .release        = tracing_release_generic_tr,
6601         .llseek         = default_llseek,
6602 };
6603
6604 struct dentry *trace_instance_dir;
6605
6606 static void
6607 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
6608
6609 static int
6610 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
6611 {
6612         enum ring_buffer_flags rb_flags;
6613
6614         rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0;
6615
6616         buf->tr = tr;
6617
6618         buf->buffer = ring_buffer_alloc(size, rb_flags);
6619         if (!buf->buffer)
6620                 return -ENOMEM;
6621
6622         buf->data = alloc_percpu(struct trace_array_cpu);
6623         if (!buf->data) {
6624                 ring_buffer_free(buf->buffer);
6625                 buf->buffer = NULL;
6626                 return -ENOMEM;
6627         }
6628
6629         /* Allocate the first page for all buffers */
6630         set_buffer_entries(&tr->trace_buffer,
6631                            ring_buffer_size(tr->trace_buffer.buffer, 0));
6632
6633         return 0;
6634 }
6635
6636 static int allocate_trace_buffers(struct trace_array *tr, int size)
6637 {
6638         int ret;
6639
6640         ret = allocate_trace_buffer(tr, &tr->trace_buffer, size);
6641         if (ret)
6642                 return ret;
6643
6644 #ifdef CONFIG_TRACER_MAX_TRACE
6645         ret = allocate_trace_buffer(tr, &tr->max_buffer,
6646                                     allocate_snapshot ? size : 1);
6647         if (WARN_ON(ret)) {
6648                 ring_buffer_free(tr->trace_buffer.buffer);
6649                 tr->trace_buffer.buffer = NULL;
6650                 free_percpu(tr->trace_buffer.data);
6651                 tr->trace_buffer.data = NULL;
6652                 return -ENOMEM;
6653         }
6654         tr->allocated_snapshot = allocate_snapshot;
6655
6656         /*
6657          * Only the top level trace array gets its snapshot allocated
6658          * from the kernel command line.
6659          */
6660         allocate_snapshot = false;
6661 #endif
6662         return 0;
6663 }
6664
6665 static void free_trace_buffer(struct trace_buffer *buf)
6666 {
6667         if (buf->buffer) {
6668                 ring_buffer_free(buf->buffer);
6669                 buf->buffer = NULL;
6670                 free_percpu(buf->data);
6671                 buf->data = NULL;
6672         }
6673 }
6674
6675 static void free_trace_buffers(struct trace_array *tr)
6676 {
6677         if (!tr)
6678                 return;
6679
6680         free_trace_buffer(&tr->trace_buffer);
6681
6682 #ifdef CONFIG_TRACER_MAX_TRACE
6683         free_trace_buffer(&tr->max_buffer);
6684 #endif
6685 }
6686
6687 static void init_trace_flags_index(struct trace_array *tr)
6688 {
6689         int i;
6690
6691         /* Used by the trace options files */
6692         for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++)
6693                 tr->trace_flags_index[i] = i;
6694 }
6695
6696 static void __update_tracer_options(struct trace_array *tr)
6697 {
6698         struct tracer *t;
6699
6700         for (t = trace_types; t; t = t->next)
6701                 add_tracer_options(tr, t);
6702 }
6703
6704 static void update_tracer_options(struct trace_array *tr)
6705 {
6706         mutex_lock(&trace_types_lock);
6707         __update_tracer_options(tr);
6708         mutex_unlock(&trace_types_lock);
6709 }
6710
6711 static int instance_mkdir(const char *name)
6712 {
6713         struct trace_array *tr;
6714         int ret;
6715
6716         mutex_lock(&trace_types_lock);
6717
6718         ret = -EEXIST;
6719         list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6720                 if (tr->name && strcmp(tr->name, name) == 0)
6721                         goto out_unlock;
6722         }
6723
6724         ret = -ENOMEM;
6725         tr = kzalloc(sizeof(*tr), GFP_KERNEL);
6726         if (!tr)
6727                 goto out_unlock;
6728
6729         tr->name = kstrdup(name, GFP_KERNEL);
6730         if (!tr->name)
6731                 goto out_free_tr;
6732
6733         if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
6734                 goto out_free_tr;
6735
6736         tr->trace_flags = global_trace.trace_flags;
6737
6738         cpumask_copy(tr->tracing_cpumask, cpu_all_mask);
6739
6740         raw_spin_lock_init(&tr->start_lock);
6741
6742         tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
6743
6744         tr->current_trace = &nop_trace;
6745
6746         INIT_LIST_HEAD(&tr->systems);
6747         INIT_LIST_HEAD(&tr->events);
6748
6749         if (allocate_trace_buffers(tr, trace_buf_size) < 0)
6750                 goto out_free_tr;
6751
6752         tr->dir = tracefs_create_dir(name, trace_instance_dir);
6753         if (!tr->dir)
6754                 goto out_free_tr;
6755
6756         ret = event_trace_add_tracer(tr->dir, tr);
6757         if (ret) {
6758                 tracefs_remove_recursive(tr->dir);
6759                 goto out_free_tr;
6760         }
6761
6762         init_tracer_tracefs(tr, tr->dir);
6763         init_trace_flags_index(tr);
6764         __update_tracer_options(tr);
6765
6766         list_add(&tr->list, &ftrace_trace_arrays);
6767
6768         mutex_unlock(&trace_types_lock);
6769
6770         return 0;
6771
6772  out_free_tr:
6773         free_trace_buffers(tr);
6774         free_cpumask_var(tr->tracing_cpumask);
6775         kfree(tr->name);
6776         kfree(tr);
6777
6778  out_unlock:
6779         mutex_unlock(&trace_types_lock);
6780
6781         return ret;
6782
6783 }
6784
6785 static int instance_rmdir(const char *name)
6786 {
6787         struct trace_array *tr;
6788         int found = 0;
6789         int ret;
6790         int i;
6791
6792         mutex_lock(&trace_types_lock);
6793
6794         ret = -ENODEV;
6795         list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6796                 if (tr->name && strcmp(tr->name, name) == 0) {
6797                         found = 1;
6798                         break;
6799                 }
6800         }
6801         if (!found)
6802                 goto out_unlock;
6803
6804         ret = -EBUSY;
6805         if (tr->ref || (tr->current_trace && tr->current_trace->ref))
6806                 goto out_unlock;
6807
6808         list_del(&tr->list);
6809
6810         tracing_set_nop(tr);
6811         event_trace_del_tracer(tr);
6812         ftrace_destroy_function_files(tr);
6813         tracefs_remove_recursive(tr->dir);
6814         free_trace_buffers(tr);
6815
6816         for (i = 0; i < tr->nr_topts; i++) {
6817                 kfree(tr->topts[i].topts);
6818         }
6819         kfree(tr->topts);
6820
6821         free_cpumask_var(tr->tracing_cpumask);
6822         kfree(tr->name);
6823         kfree(tr);
6824
6825         ret = 0;
6826
6827  out_unlock:
6828         mutex_unlock(&trace_types_lock);
6829
6830         return ret;
6831 }
6832
6833 static __init void create_trace_instances(struct dentry *d_tracer)
6834 {
6835         trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
6836                                                          instance_mkdir,
6837                                                          instance_rmdir);
6838         if (WARN_ON(!trace_instance_dir))
6839                 return;
6840 }
6841
6842 static void
6843 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer)
6844 {
6845         int cpu;
6846
6847         trace_create_file("available_tracers", 0444, d_tracer,
6848                         tr, &show_traces_fops);
6849
6850         trace_create_file("current_tracer", 0644, d_tracer,
6851                         tr, &set_tracer_fops);
6852
6853         trace_create_file("tracing_cpumask", 0644, d_tracer,
6854                           tr, &tracing_cpumask_fops);
6855
6856         trace_create_file("trace_options", 0644, d_tracer,
6857                           tr, &tracing_iter_fops);
6858
6859         trace_create_file("trace", 0644, d_tracer,
6860                           tr, &tracing_fops);
6861
6862         trace_create_file("trace_pipe", 0444, d_tracer,
6863                           tr, &tracing_pipe_fops);
6864
6865         trace_create_file("buffer_size_kb", 0644, d_tracer,
6866                           tr, &tracing_entries_fops);
6867
6868         trace_create_file("buffer_total_size_kb", 0444, d_tracer,
6869                           tr, &tracing_total_entries_fops);
6870
6871         trace_create_file("free_buffer", 0200, d_tracer,
6872                           tr, &tracing_free_buffer_fops);
6873
6874         trace_create_file("trace_marker", 0220, d_tracer,
6875                           tr, &tracing_mark_fops);
6876
6877         trace_create_file("saved_tgids", 0444, d_tracer,
6878                           tr, &tracing_saved_tgids_fops);
6879
6880         trace_create_file("trace_clock", 0644, d_tracer, tr,
6881                           &trace_clock_fops);
6882
6883         trace_create_file("tracing_on", 0644, d_tracer,
6884                           tr, &rb_simple_fops);
6885
6886         create_trace_options_dir(tr);
6887
6888 #ifdef CONFIG_TRACER_MAX_TRACE
6889         trace_create_file("tracing_max_latency", 0644, d_tracer,
6890                         &tr->max_latency, &tracing_max_lat_fops);
6891 #endif
6892
6893         if (ftrace_create_function_files(tr, d_tracer))
6894                 WARN(1, "Could not allocate function filter files");
6895
6896 #ifdef CONFIG_TRACER_SNAPSHOT
6897         trace_create_file("snapshot", 0644, d_tracer,
6898                           tr, &snapshot_fops);
6899 #endif
6900
6901         for_each_tracing_cpu(cpu)
6902                 tracing_init_tracefs_percpu(tr, cpu);
6903
6904 }
6905
6906 static struct vfsmount *trace_automount(void *ingore)
6907 {
6908         struct vfsmount *mnt;
6909         struct file_system_type *type;
6910
6911         /*
6912          * To maintain backward compatibility for tools that mount
6913          * debugfs to get to the tracing facility, tracefs is automatically
6914          * mounted to the debugfs/tracing directory.
6915          */
6916         type = get_fs_type("tracefs");
6917         if (!type)
6918                 return NULL;
6919         mnt = vfs_kern_mount(type, 0, "tracefs", NULL);
6920         put_filesystem(type);
6921         if (IS_ERR(mnt))
6922                 return NULL;
6923         mntget(mnt);
6924
6925         return mnt;
6926 }
6927
6928 /**
6929  * tracing_init_dentry - initialize top level trace array
6930  *
6931  * This is called when creating files or directories in the tracing
6932  * directory. It is called via fs_initcall() by any of the boot up code
6933  * and expects to return the dentry of the top level tracing directory.
6934  */
6935 struct dentry *tracing_init_dentry(void)
6936 {
6937         struct trace_array *tr = &global_trace;
6938
6939         /* The top level trace array uses  NULL as parent */
6940         if (tr->dir)
6941                 return NULL;
6942
6943         if (WARN_ON(!tracefs_initialized()) ||
6944                 (IS_ENABLED(CONFIG_DEBUG_FS) &&
6945                  WARN_ON(!debugfs_initialized())))
6946                 return ERR_PTR(-ENODEV);
6947
6948         /*
6949          * As there may still be users that expect the tracing
6950          * files to exist in debugfs/tracing, we must automount
6951          * the tracefs file system there, so older tools still
6952          * work with the newer kerenl.
6953          */
6954         tr->dir = debugfs_create_automount("tracing", NULL,
6955                                            trace_automount, NULL);
6956         if (!tr->dir) {
6957                 pr_warn_once("Could not create debugfs directory 'tracing'\n");
6958                 return ERR_PTR(-ENOMEM);
6959         }
6960
6961         return NULL;
6962 }
6963
6964 extern struct trace_enum_map *__start_ftrace_enum_maps[];
6965 extern struct trace_enum_map *__stop_ftrace_enum_maps[];
6966
6967 static void __init trace_enum_init(void)
6968 {
6969         int len;
6970
6971         len = __stop_ftrace_enum_maps - __start_ftrace_enum_maps;
6972         trace_insert_enum_map(NULL, __start_ftrace_enum_maps, len);
6973 }
6974
6975 #ifdef CONFIG_MODULES
6976 static void trace_module_add_enums(struct module *mod)
6977 {
6978         if (!mod->num_trace_enums)
6979                 return;
6980
6981         /*
6982          * Modules with bad taint do not have events created, do
6983          * not bother with enums either.
6984          */
6985         if (trace_module_has_bad_taint(mod))
6986                 return;
6987
6988         trace_insert_enum_map(mod, mod->trace_enums, mod->num_trace_enums);
6989 }
6990
6991 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
6992 static void trace_module_remove_enums(struct module *mod)
6993 {
6994         union trace_enum_map_item *map;
6995         union trace_enum_map_item **last = &trace_enum_maps;
6996
6997         if (!mod->num_trace_enums)
6998                 return;
6999
7000         mutex_lock(&trace_enum_mutex);
7001
7002         map = trace_enum_maps;
7003
7004         while (map) {
7005                 if (map->head.mod == mod)
7006                         break;
7007                 map = trace_enum_jmp_to_tail(map);
7008                 last = &map->tail.next;
7009                 map = map->tail.next;
7010         }
7011         if (!map)
7012                 goto out;
7013
7014         *last = trace_enum_jmp_to_tail(map)->tail.next;
7015         kfree(map);
7016  out:
7017         mutex_unlock(&trace_enum_mutex);
7018 }
7019 #else
7020 static inline void trace_module_remove_enums(struct module *mod) { }
7021 #endif /* CONFIG_TRACE_ENUM_MAP_FILE */
7022
7023 static int trace_module_notify(struct notifier_block *self,
7024                                unsigned long val, void *data)
7025 {
7026         struct module *mod = data;
7027
7028         switch (val) {
7029         case MODULE_STATE_COMING:
7030                 trace_module_add_enums(mod);
7031                 break;
7032         case MODULE_STATE_GOING:
7033                 trace_module_remove_enums(mod);
7034                 break;
7035         }
7036
7037         return 0;
7038 }
7039
7040 static struct notifier_block trace_module_nb = {
7041         .notifier_call = trace_module_notify,
7042         .priority = 0,
7043 };
7044 #endif /* CONFIG_MODULES */
7045
7046 static __init int tracer_init_tracefs(void)
7047 {
7048         struct dentry *d_tracer;
7049
7050         trace_access_lock_init();
7051
7052         d_tracer = tracing_init_dentry();
7053         if (IS_ERR(d_tracer))
7054                 return 0;
7055
7056         init_tracer_tracefs(&global_trace, d_tracer);
7057
7058         trace_create_file("tracing_thresh", 0644, d_tracer,
7059                         &global_trace, &tracing_thresh_fops);
7060
7061         trace_create_file("README", 0444, d_tracer,
7062                         NULL, &tracing_readme_fops);
7063
7064         trace_create_file("saved_cmdlines", 0444, d_tracer,
7065                         NULL, &tracing_saved_cmdlines_fops);
7066
7067         trace_create_file("saved_cmdlines_size", 0644, d_tracer,
7068                           NULL, &tracing_saved_cmdlines_size_fops);
7069
7070         trace_enum_init();
7071
7072         trace_create_enum_file(d_tracer);
7073
7074 #ifdef CONFIG_MODULES
7075         register_module_notifier(&trace_module_nb);
7076 #endif
7077
7078 #ifdef CONFIG_DYNAMIC_FTRACE
7079         trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
7080                         &ftrace_update_tot_cnt, &tracing_dyn_info_fops);
7081 #endif
7082
7083         create_trace_instances(d_tracer);
7084
7085         update_tracer_options(&global_trace);
7086
7087         return 0;
7088 }
7089
7090 static int trace_panic_handler(struct notifier_block *this,
7091                                unsigned long event, void *unused)
7092 {
7093         if (ftrace_dump_on_oops)
7094                 ftrace_dump(ftrace_dump_on_oops);
7095         return NOTIFY_OK;
7096 }
7097
7098 static struct notifier_block trace_panic_notifier = {
7099         .notifier_call  = trace_panic_handler,
7100         .next           = NULL,
7101         .priority       = 150   /* priority: INT_MAX >= x >= 0 */
7102 };
7103
7104 static int trace_die_handler(struct notifier_block *self,
7105                              unsigned long val,
7106                              void *data)
7107 {
7108         switch (val) {
7109         case DIE_OOPS:
7110                 if (ftrace_dump_on_oops)
7111                         ftrace_dump(ftrace_dump_on_oops);
7112                 break;
7113         default:
7114                 break;
7115         }
7116         return NOTIFY_OK;
7117 }
7118
7119 static struct notifier_block trace_die_notifier = {
7120         .notifier_call = trace_die_handler,
7121         .priority = 200
7122 };
7123
7124 /*
7125  * printk is set to max of 1024, we really don't need it that big.
7126  * Nothing should be printing 1000 characters anyway.
7127  */
7128 #define TRACE_MAX_PRINT         1000
7129
7130 /*
7131  * Define here KERN_TRACE so that we have one place to modify
7132  * it if we decide to change what log level the ftrace dump
7133  * should be at.
7134  */
7135 #define KERN_TRACE              KERN_EMERG
7136
7137 void
7138 trace_printk_seq(struct trace_seq *s)
7139 {
7140         /* Probably should print a warning here. */
7141         if (s->seq.len >= TRACE_MAX_PRINT)
7142                 s->seq.len = TRACE_MAX_PRINT;
7143
7144         /*
7145          * More paranoid code. Although the buffer size is set to
7146          * PAGE_SIZE, and TRACE_MAX_PRINT is 1000, this is just
7147          * an extra layer of protection.
7148          */
7149         if (WARN_ON_ONCE(s->seq.len >= s->seq.size))
7150                 s->seq.len = s->seq.size - 1;
7151
7152         /* should be zero ended, but we are paranoid. */
7153         s->buffer[s->seq.len] = 0;
7154
7155         printk(KERN_TRACE "%s", s->buffer);
7156
7157         trace_seq_init(s);
7158 }
7159
7160 void trace_init_global_iter(struct trace_iterator *iter)
7161 {
7162         iter->tr = &global_trace;
7163         iter->trace = iter->tr->current_trace;
7164         iter->cpu_file = RING_BUFFER_ALL_CPUS;
7165         iter->trace_buffer = &global_trace.trace_buffer;
7166
7167         if (iter->trace && iter->trace->open)
7168                 iter->trace->open(iter);
7169
7170         /* Annotate start of buffers if we had overruns */
7171         if (ring_buffer_overruns(iter->trace_buffer->buffer))
7172                 iter->iter_flags |= TRACE_FILE_ANNOTATE;
7173
7174         /* Output in nanoseconds only if we are using a clock in nanoseconds. */
7175         if (trace_clocks[iter->tr->clock_id].in_ns)
7176                 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
7177 }
7178
7179 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
7180 {
7181         /* use static because iter can be a bit big for the stack */
7182         static struct trace_iterator iter;
7183         static atomic_t dump_running;
7184         struct trace_array *tr = &global_trace;
7185         unsigned int old_userobj;
7186         unsigned long flags;
7187         int cnt = 0, cpu;
7188
7189         /* Only allow one dump user at a time. */
7190         if (atomic_inc_return(&dump_running) != 1) {
7191                 atomic_dec(&dump_running);
7192                 return;
7193         }
7194
7195         /*
7196          * Always turn off tracing when we dump.
7197          * We don't need to show trace output of what happens
7198          * between multiple crashes.
7199          *
7200          * If the user does a sysrq-z, then they can re-enable
7201          * tracing with echo 1 > tracing_on.
7202          */
7203         tracing_off();
7204
7205         local_irq_save(flags);
7206
7207         /* Simulate the iterator */
7208         trace_init_global_iter(&iter);
7209
7210         for_each_tracing_cpu(cpu) {
7211                 atomic_inc(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
7212         }
7213
7214         old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ;
7215
7216         /* don't look at user memory in panic mode */
7217         tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ;
7218
7219         switch (oops_dump_mode) {
7220         case DUMP_ALL:
7221                 iter.cpu_file = RING_BUFFER_ALL_CPUS;
7222                 break;
7223         case DUMP_ORIG:
7224                 iter.cpu_file = raw_smp_processor_id();
7225                 break;
7226         case DUMP_NONE:
7227                 goto out_enable;
7228         default:
7229                 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n");
7230                 iter.cpu_file = RING_BUFFER_ALL_CPUS;
7231         }
7232
7233         printk(KERN_TRACE "Dumping ftrace buffer:\n");
7234
7235         /* Did function tracer already get disabled? */
7236         if (ftrace_is_dead()) {
7237                 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
7238                 printk("#          MAY BE MISSING FUNCTION EVENTS\n");
7239         }
7240
7241         /*
7242          * We need to stop all tracing on all CPUS to read the
7243          * the next buffer. This is a bit expensive, but is
7244          * not done often. We fill all what we can read,
7245          * and then release the locks again.
7246          */
7247
7248         while (!trace_empty(&iter)) {
7249
7250                 if (!cnt)
7251                         printk(KERN_TRACE "---------------------------------\n");
7252
7253                 cnt++;
7254
7255                 /* reset all but tr, trace, and overruns */
7256                 memset(&iter.seq, 0,
7257                        sizeof(struct trace_iterator) -
7258                        offsetof(struct trace_iterator, seq));
7259                 iter.iter_flags |= TRACE_FILE_LAT_FMT;
7260                 iter.pos = -1;
7261
7262                 if (trace_find_next_entry_inc(&iter) != NULL) {
7263                         int ret;
7264
7265                         ret = print_trace_line(&iter);
7266                         if (ret != TRACE_TYPE_NO_CONSUME)
7267                                 trace_consume(&iter);
7268                 }
7269                 touch_nmi_watchdog();
7270
7271                 trace_printk_seq(&iter.seq);
7272         }
7273
7274         if (!cnt)
7275                 printk(KERN_TRACE "   (ftrace buffer empty)\n");
7276         else
7277                 printk(KERN_TRACE "---------------------------------\n");
7278
7279  out_enable:
7280         tr->trace_flags |= old_userobj;
7281
7282         for_each_tracing_cpu(cpu) {
7283                 atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
7284         }
7285         atomic_dec(&dump_running);
7286         local_irq_restore(flags);
7287 }
7288 EXPORT_SYMBOL_GPL(ftrace_dump);
7289
7290 __init static int tracer_alloc_buffers(void)
7291 {
7292         int ring_buf_size;
7293         int ret = -ENOMEM;
7294
7295         /*
7296          * Make sure we don't accidently add more trace options
7297          * than we have bits for.
7298          */
7299         BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE);
7300
7301         if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL))
7302                 goto out;
7303
7304         if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL))
7305                 goto out_free_buffer_mask;
7306
7307         /* Only allocate trace_printk buffers if a trace_printk exists */
7308         if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt)
7309                 /* Must be called before global_trace.buffer is allocated */
7310                 trace_printk_init_buffers();
7311
7312         /* To save memory, keep the ring buffer size to its minimum */
7313         if (ring_buffer_expanded)
7314                 ring_buf_size = trace_buf_size;
7315         else
7316                 ring_buf_size = 1;
7317
7318         cpumask_copy(tracing_buffer_mask, cpu_possible_mask);
7319         cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask);
7320
7321         raw_spin_lock_init(&global_trace.start_lock);
7322
7323         /* Used for event triggers */
7324         temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE);
7325         if (!temp_buffer)
7326                 goto out_free_cpumask;
7327
7328         if (trace_create_savedcmd() < 0)
7329                 goto out_free_temp_buffer;
7330
7331         /* TODO: make the number of buffers hot pluggable with CPUS */
7332         if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) {
7333                 printk(KERN_ERR "tracer: failed to allocate ring buffer!\n");
7334                 WARN_ON(1);
7335                 goto out_free_savedcmd;
7336         }
7337
7338         if (global_trace.buffer_disabled)
7339                 tracing_off();
7340
7341         if (trace_boot_clock) {
7342                 ret = tracing_set_clock(&global_trace, trace_boot_clock);
7343                 if (ret < 0)
7344                         pr_warning("Trace clock %s not defined, going back to default\n",
7345                                    trace_boot_clock);
7346         }
7347
7348         /*
7349          * register_tracer() might reference current_trace, so it
7350          * needs to be set before we register anything. This is
7351          * just a bootstrap of current_trace anyway.
7352          */
7353         global_trace.current_trace = &nop_trace;
7354
7355         global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
7356
7357         ftrace_init_global_array_ops(&global_trace);
7358
7359         init_trace_flags_index(&global_trace);
7360
7361         register_tracer(&nop_trace);
7362
7363         /* All seems OK, enable tracing */
7364         tracing_disabled = 0;
7365
7366         atomic_notifier_chain_register(&panic_notifier_list,
7367                                        &trace_panic_notifier);
7368
7369         register_die_notifier(&trace_die_notifier);
7370
7371         global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
7372
7373         INIT_LIST_HEAD(&global_trace.systems);
7374         INIT_LIST_HEAD(&global_trace.events);
7375         list_add(&global_trace.list, &ftrace_trace_arrays);
7376
7377         apply_trace_boot_options();
7378
7379         register_snapshot_cmd();
7380
7381         return 0;
7382
7383 out_free_savedcmd:
7384         free_saved_cmdlines_buffer(savedcmd);
7385 out_free_temp_buffer:
7386         ring_buffer_free(temp_buffer);
7387 out_free_cpumask:
7388         free_cpumask_var(global_trace.tracing_cpumask);
7389 out_free_buffer_mask:
7390         free_cpumask_var(tracing_buffer_mask);
7391 out:
7392         return ret;
7393 }
7394
7395 void __init trace_init(void)
7396 {
7397         if (tracepoint_printk) {
7398                 tracepoint_print_iter =
7399                         kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
7400                 if (WARN_ON(!tracepoint_print_iter))
7401                         tracepoint_printk = 0;
7402         }
7403         tracer_alloc_buffers();
7404         trace_event_init();
7405 }
7406
7407 __init static int clear_boot_tracer(void)
7408 {
7409         /*
7410          * The default tracer at boot buffer is an init section.
7411          * This function is called in lateinit. If we did not
7412          * find the boot tracer, then clear it out, to prevent
7413          * later registration from accessing the buffer that is
7414          * about to be freed.
7415          */
7416         if (!default_bootup_tracer)
7417                 return 0;
7418
7419         printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n",
7420                default_bootup_tracer);
7421         default_bootup_tracer = NULL;
7422
7423         return 0;
7424 }
7425
7426 fs_initcall(tracer_init_tracefs);
7427 late_initcall(clear_boot_tracer);