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