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