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