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