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