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