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