dm thin metadata: fix __udivdi3 undefined on 32-bit
[linux/fpc-iii.git] / kernel / trace / trace.c
blobe409ddce8754d51cacdb3afe00728c4341feb48a
1 /*
2 * ring buffer based function tracer
4 * Copyright (C) 2007-2012 Steven Rostedt <srostedt@redhat.com>
5 * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com>
7 * Originally taken from the RT patch by:
8 * Arnaldo Carvalho de Melo <acme@redhat.com>
10 * Based on code from the latency_tracer, that is:
11 * Copyright (C) 2004-2006 Ingo Molnar
12 * Copyright (C) 2004 Nadia Yvette Chambers
14 #include <linux/ring_buffer.h>
15 #include <generated/utsrelease.h>
16 #include <linux/stacktrace.h>
17 #include <linux/writeback.h>
18 #include <linux/kallsyms.h>
19 #include <linux/seq_file.h>
20 #include <linux/notifier.h>
21 #include <linux/irqflags.h>
22 #include <linux/debugfs.h>
23 #include <linux/tracefs.h>
24 #include <linux/pagemap.h>
25 #include <linux/hardirq.h>
26 #include <linux/linkage.h>
27 #include <linux/uaccess.h>
28 #include <linux/kprobes.h>
29 #include <linux/ftrace.h>
30 #include <linux/module.h>
31 #include <linux/percpu.h>
32 #include <linux/splice.h>
33 #include <linux/kdebug.h>
34 #include <linux/string.h>
35 #include <linux/mount.h>
36 #include <linux/rwsem.h>
37 #include <linux/slab.h>
38 #include <linux/ctype.h>
39 #include <linux/init.h>
40 #include <linux/poll.h>
41 #include <linux/nmi.h>
42 #include <linux/fs.h>
43 #include <linux/sched/rt.h>
45 #include "trace.h"
46 #include "trace_output.h"
49 * On boot up, the ring buffer is set to the minimum size, so that
50 * we do not waste memory on systems that are not using tracing.
52 bool ring_buffer_expanded;
55 * We need to change this state when a selftest is running.
56 * A selftest will lurk into the ring-buffer to count the
57 * entries inserted during the selftest although some concurrent
58 * insertions into the ring-buffer such as trace_printk could occurred
59 * at the same time, giving false positive or negative results.
61 static bool __read_mostly tracing_selftest_running;
64 * If a tracer is running, we do not want to run SELFTEST.
66 bool __read_mostly tracing_selftest_disabled;
68 /* Pipe tracepoints to printk */
69 struct trace_iterator *tracepoint_print_iter;
70 int tracepoint_printk;
72 /* For tracers that don't implement custom flags */
73 static struct tracer_opt dummy_tracer_opt[] = {
74 { }
77 static struct tracer_flags dummy_tracer_flags = {
78 .val = 0,
79 .opts = dummy_tracer_opt
82 static int
83 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set)
85 return 0;
89 * To prevent the comm cache from being overwritten when no
90 * tracing is active, only save the comm when a trace event
91 * occurred.
93 static DEFINE_PER_CPU(bool, trace_cmdline_save);
96 * Kill all tracing for good (never come back).
97 * It is initialized to 1 but will turn to zero if the initialization
98 * of the tracer is successful. But that is the only place that sets
99 * this back to zero.
101 static int tracing_disabled = 1;
103 cpumask_var_t __read_mostly tracing_buffer_mask;
106 * ftrace_dump_on_oops - variable to dump ftrace buffer on oops
108 * If there is an oops (or kernel panic) and the ftrace_dump_on_oops
109 * is set, then ftrace_dump is called. This will output the contents
110 * of the ftrace buffers to the console. This is very useful for
111 * capturing traces that lead to crashes and outputing it to a
112 * serial console.
114 * It is default off, but you can enable it with either specifying
115 * "ftrace_dump_on_oops" in the kernel command line, or setting
116 * /proc/sys/kernel/ftrace_dump_on_oops
117 * Set 1 if you want to dump buffers of all CPUs
118 * Set 2 if you want to dump the buffer of the CPU that triggered oops
121 enum ftrace_dump_mode ftrace_dump_on_oops;
123 /* When set, tracing will stop when a WARN*() is hit */
124 int __disable_trace_on_warning;
126 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
127 /* Map of enums to their values, for "enum_map" file */
128 struct trace_enum_map_head {
129 struct module *mod;
130 unsigned long length;
133 union trace_enum_map_item;
135 struct trace_enum_map_tail {
137 * "end" is first and points to NULL as it must be different
138 * than "mod" or "enum_string"
140 union trace_enum_map_item *next;
141 const char *end; /* points to NULL */
144 static DEFINE_MUTEX(trace_enum_mutex);
147 * The trace_enum_maps are saved in an array with two extra elements,
148 * one at the beginning, and one at the end. The beginning item contains
149 * the count of the saved maps (head.length), and the module they
150 * belong to if not built in (head.mod). The ending item contains a
151 * pointer to the next array of saved enum_map items.
153 union trace_enum_map_item {
154 struct trace_enum_map map;
155 struct trace_enum_map_head head;
156 struct trace_enum_map_tail tail;
159 static union trace_enum_map_item *trace_enum_maps;
160 #endif /* CONFIG_TRACE_ENUM_MAP_FILE */
162 static int tracing_set_tracer(struct trace_array *tr, const char *buf);
164 #define MAX_TRACER_SIZE 100
165 static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata;
166 static char *default_bootup_tracer;
168 static bool allocate_snapshot;
170 static int __init set_cmdline_ftrace(char *str)
172 strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE);
173 default_bootup_tracer = bootup_tracer_buf;
174 /* We are using ftrace early, expand it */
175 ring_buffer_expanded = true;
176 return 1;
178 __setup("ftrace=", set_cmdline_ftrace);
180 static int __init set_ftrace_dump_on_oops(char *str)
182 if (*str++ != '=' || !*str) {
183 ftrace_dump_on_oops = DUMP_ALL;
184 return 1;
187 if (!strcmp("orig_cpu", str)) {
188 ftrace_dump_on_oops = DUMP_ORIG;
189 return 1;
192 return 0;
194 __setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops);
196 static int __init stop_trace_on_warning(char *str)
198 if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
199 __disable_trace_on_warning = 1;
200 return 1;
202 __setup("traceoff_on_warning", stop_trace_on_warning);
204 static int __init boot_alloc_snapshot(char *str)
206 allocate_snapshot = true;
207 /* We also need the main ring buffer expanded */
208 ring_buffer_expanded = true;
209 return 1;
211 __setup("alloc_snapshot", boot_alloc_snapshot);
214 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;
216 static int __init set_trace_boot_options(char *str)
218 strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE);
219 return 0;
221 __setup("trace_options=", set_trace_boot_options);
223 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata;
224 static char *trace_boot_clock __initdata;
226 static int __init set_trace_boot_clock(char *str)
228 strlcpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE);
229 trace_boot_clock = trace_boot_clock_buf;
230 return 0;
232 __setup("trace_clock=", set_trace_boot_clock);
234 static int __init set_tracepoint_printk(char *str)
236 if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
237 tracepoint_printk = 1;
238 return 1;
240 __setup("tp_printk", set_tracepoint_printk);
242 unsigned long long ns2usecs(cycle_t nsec)
244 nsec += 500;
245 do_div(nsec, 1000);
246 return nsec;
249 /* trace_flags holds trace_options default values */
250 #define TRACE_DEFAULT_FLAGS \
251 (FUNCTION_DEFAULT_FLAGS | \
252 TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | \
253 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | \
254 TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE | \
255 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS)
257 /* trace_options that are only supported by global_trace */
258 #define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER_PRINTK | \
259 TRACE_ITER_PRINTK_MSGONLY | TRACE_ITER_RECORD_CMD)
263 * The global_trace is the descriptor that holds the tracing
264 * buffers for the live tracing. For each CPU, it contains
265 * a link list of pages that will store trace entries. The
266 * page descriptor of the pages in the memory is used to hold
267 * the link list by linking the lru item in the page descriptor
268 * to each of the pages in the buffer per CPU.
270 * For each active CPU there is a data field that holds the
271 * pages for the buffer for that CPU. Each CPU has the same number
272 * of pages allocated for its buffer.
274 static struct trace_array global_trace = {
275 .trace_flags = TRACE_DEFAULT_FLAGS,
278 LIST_HEAD(ftrace_trace_arrays);
280 int trace_array_get(struct trace_array *this_tr)
282 struct trace_array *tr;
283 int ret = -ENODEV;
285 mutex_lock(&trace_types_lock);
286 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
287 if (tr == this_tr) {
288 tr->ref++;
289 ret = 0;
290 break;
293 mutex_unlock(&trace_types_lock);
295 return ret;
298 static void __trace_array_put(struct trace_array *this_tr)
300 WARN_ON(!this_tr->ref);
301 this_tr->ref--;
304 void trace_array_put(struct trace_array *this_tr)
306 mutex_lock(&trace_types_lock);
307 __trace_array_put(this_tr);
308 mutex_unlock(&trace_types_lock);
311 int filter_check_discard(struct trace_event_file *file, void *rec,
312 struct ring_buffer *buffer,
313 struct ring_buffer_event *event)
315 if (unlikely(file->flags & EVENT_FILE_FL_FILTERED) &&
316 !filter_match_preds(file->filter, rec)) {
317 ring_buffer_discard_commit(buffer, event);
318 return 1;
321 return 0;
323 EXPORT_SYMBOL_GPL(filter_check_discard);
325 int call_filter_check_discard(struct trace_event_call *call, void *rec,
326 struct ring_buffer *buffer,
327 struct ring_buffer_event *event)
329 if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) &&
330 !filter_match_preds(call->filter, rec)) {
331 ring_buffer_discard_commit(buffer, event);
332 return 1;
335 return 0;
337 EXPORT_SYMBOL_GPL(call_filter_check_discard);
339 static cycle_t buffer_ftrace_now(struct trace_buffer *buf, int cpu)
341 u64 ts;
343 /* Early boot up does not have a buffer yet */
344 if (!buf->buffer)
345 return trace_clock_local();
347 ts = ring_buffer_time_stamp(buf->buffer, cpu);
348 ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts);
350 return ts;
353 cycle_t ftrace_now(int cpu)
355 return buffer_ftrace_now(&global_trace.trace_buffer, cpu);
359 * tracing_is_enabled - Show if global_trace has been disabled
361 * Shows if the global trace has been enabled or not. It uses the
362 * mirror flag "buffer_disabled" to be used in fast paths such as for
363 * the irqsoff tracer. But it may be inaccurate due to races. If you
364 * need to know the accurate state, use tracing_is_on() which is a little
365 * slower, but accurate.
367 int tracing_is_enabled(void)
370 * For quick access (irqsoff uses this in fast path), just
371 * return the mirror variable of the state of the ring buffer.
372 * It's a little racy, but we don't really care.
374 smp_rmb();
375 return !global_trace.buffer_disabled;
379 * trace_buf_size is the size in bytes that is allocated
380 * for a buffer. Note, the number of bytes is always rounded
381 * to page size.
383 * This number is purposely set to a low number of 16384.
384 * If the dump on oops happens, it will be much appreciated
385 * to not have to wait for all that output. Anyway this can be
386 * boot time and run time configurable.
388 #define TRACE_BUF_SIZE_DEFAULT 1441792UL /* 16384 * 88 (sizeof(entry)) */
390 static unsigned long trace_buf_size = TRACE_BUF_SIZE_DEFAULT;
392 /* trace_types holds a link list of available tracers. */
393 static struct tracer *trace_types __read_mostly;
396 * trace_types_lock is used to protect the trace_types list.
398 DEFINE_MUTEX(trace_types_lock);
401 * serialize the access of the ring buffer
403 * ring buffer serializes readers, but it is low level protection.
404 * The validity of the events (which returns by ring_buffer_peek() ..etc)
405 * are not protected by ring buffer.
407 * The content of events may become garbage if we allow other process consumes
408 * these events concurrently:
409 * A) the page of the consumed events may become a normal page
410 * (not reader page) in ring buffer, and this page will be rewrited
411 * by events producer.
412 * B) The page of the consumed events may become a page for splice_read,
413 * and this page will be returned to system.
415 * These primitives allow multi process access to different cpu ring buffer
416 * concurrently.
418 * These primitives don't distinguish read-only and read-consume access.
419 * Multi read-only access are also serialized.
422 #ifdef CONFIG_SMP
423 static DECLARE_RWSEM(all_cpu_access_lock);
424 static DEFINE_PER_CPU(struct mutex, cpu_access_lock);
426 static inline void trace_access_lock(int cpu)
428 if (cpu == RING_BUFFER_ALL_CPUS) {
429 /* gain it for accessing the whole ring buffer. */
430 down_write(&all_cpu_access_lock);
431 } else {
432 /* gain it for accessing a cpu ring buffer. */
434 /* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */
435 down_read(&all_cpu_access_lock);
437 /* Secondly block other access to this @cpu ring buffer. */
438 mutex_lock(&per_cpu(cpu_access_lock, cpu));
442 static inline void trace_access_unlock(int cpu)
444 if (cpu == RING_BUFFER_ALL_CPUS) {
445 up_write(&all_cpu_access_lock);
446 } else {
447 mutex_unlock(&per_cpu(cpu_access_lock, cpu));
448 up_read(&all_cpu_access_lock);
452 static inline void trace_access_lock_init(void)
454 int cpu;
456 for_each_possible_cpu(cpu)
457 mutex_init(&per_cpu(cpu_access_lock, cpu));
460 #else
462 static DEFINE_MUTEX(access_lock);
464 static inline void trace_access_lock(int cpu)
466 (void)cpu;
467 mutex_lock(&access_lock);
470 static inline void trace_access_unlock(int cpu)
472 (void)cpu;
473 mutex_unlock(&access_lock);
476 static inline void trace_access_lock_init(void)
480 #endif
482 #ifdef CONFIG_STACKTRACE
483 static void __ftrace_trace_stack(struct ring_buffer *buffer,
484 unsigned long flags,
485 int skip, int pc, struct pt_regs *regs);
486 static inline void ftrace_trace_stack(struct trace_array *tr,
487 struct ring_buffer *buffer,
488 unsigned long flags,
489 int skip, int pc, struct pt_regs *regs);
491 #else
492 static inline void __ftrace_trace_stack(struct ring_buffer *buffer,
493 unsigned long flags,
494 int skip, int pc, struct pt_regs *regs)
497 static inline void ftrace_trace_stack(struct trace_array *tr,
498 struct ring_buffer *buffer,
499 unsigned long flags,
500 int skip, int pc, struct pt_regs *regs)
504 #endif
506 static void tracer_tracing_on(struct trace_array *tr)
508 if (tr->trace_buffer.buffer)
509 ring_buffer_record_on(tr->trace_buffer.buffer);
511 * This flag is looked at when buffers haven't been allocated
512 * yet, or by some tracers (like irqsoff), that just want to
513 * know if the ring buffer has been disabled, but it can handle
514 * races of where it gets disabled but we still do a record.
515 * As the check is in the fast path of the tracers, it is more
516 * important to be fast than accurate.
518 tr->buffer_disabled = 0;
519 /* Make the flag seen by readers */
520 smp_wmb();
524 * tracing_on - enable tracing buffers
526 * This function enables tracing buffers that may have been
527 * disabled with tracing_off.
529 void tracing_on(void)
531 tracer_tracing_on(&global_trace);
533 EXPORT_SYMBOL_GPL(tracing_on);
536 * __trace_puts - write a constant string into the trace buffer.
537 * @ip: The address of the caller
538 * @str: The constant string to write
539 * @size: The size of the string.
541 int __trace_puts(unsigned long ip, const char *str, int size)
543 struct ring_buffer_event *event;
544 struct ring_buffer *buffer;
545 struct print_entry *entry;
546 unsigned long irq_flags;
547 int alloc;
548 int pc;
550 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
551 return 0;
553 pc = preempt_count();
555 if (unlikely(tracing_selftest_running || tracing_disabled))
556 return 0;
558 alloc = sizeof(*entry) + size + 2; /* possible \n added */
560 local_save_flags(irq_flags);
561 buffer = global_trace.trace_buffer.buffer;
562 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc,
563 irq_flags, pc);
564 if (!event)
565 return 0;
567 entry = ring_buffer_event_data(event);
568 entry->ip = ip;
570 memcpy(&entry->buf, str, size);
572 /* Add a newline if necessary */
573 if (entry->buf[size - 1] != '\n') {
574 entry->buf[size] = '\n';
575 entry->buf[size + 1] = '\0';
576 } else
577 entry->buf[size] = '\0';
579 __buffer_unlock_commit(buffer, event);
580 ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL);
582 return size;
584 EXPORT_SYMBOL_GPL(__trace_puts);
587 * __trace_bputs - write the pointer to a constant string into trace buffer
588 * @ip: The address of the caller
589 * @str: The constant string to write to the buffer to
591 int __trace_bputs(unsigned long ip, const char *str)
593 struct ring_buffer_event *event;
594 struct ring_buffer *buffer;
595 struct bputs_entry *entry;
596 unsigned long irq_flags;
597 int size = sizeof(struct bputs_entry);
598 int pc;
600 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
601 return 0;
603 pc = preempt_count();
605 if (unlikely(tracing_selftest_running || tracing_disabled))
606 return 0;
608 local_save_flags(irq_flags);
609 buffer = global_trace.trace_buffer.buffer;
610 event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
611 irq_flags, pc);
612 if (!event)
613 return 0;
615 entry = ring_buffer_event_data(event);
616 entry->ip = ip;
617 entry->str = str;
619 __buffer_unlock_commit(buffer, event);
620 ftrace_trace_stack(&global_trace, buffer, irq_flags, 4, pc, NULL);
622 return 1;
624 EXPORT_SYMBOL_GPL(__trace_bputs);
626 #ifdef CONFIG_TRACER_SNAPSHOT
628 * trace_snapshot - take a snapshot of the current buffer.
630 * This causes a swap between the snapshot buffer and the current live
631 * tracing buffer. You can use this to take snapshots of the live
632 * trace when some condition is triggered, but continue to trace.
634 * Note, make sure to allocate the snapshot with either
635 * a tracing_snapshot_alloc(), or by doing it manually
636 * with: echo 1 > /sys/kernel/debug/tracing/snapshot
638 * If the snapshot buffer is not allocated, it will stop tracing.
639 * Basically making a permanent snapshot.
641 void tracing_snapshot(void)
643 struct trace_array *tr = &global_trace;
644 struct tracer *tracer = tr->current_trace;
645 unsigned long flags;
647 if (in_nmi()) {
648 internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n");
649 internal_trace_puts("*** snapshot is being ignored ***\n");
650 return;
653 if (!tr->allocated_snapshot) {
654 internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n");
655 internal_trace_puts("*** stopping trace here! ***\n");
656 tracing_off();
657 return;
660 /* Note, snapshot can not be used when the tracer uses it */
661 if (tracer->use_max_tr) {
662 internal_trace_puts("*** LATENCY TRACER ACTIVE ***\n");
663 internal_trace_puts("*** Can not use snapshot (sorry) ***\n");
664 return;
667 local_irq_save(flags);
668 update_max_tr(tr, current, smp_processor_id());
669 local_irq_restore(flags);
671 EXPORT_SYMBOL_GPL(tracing_snapshot);
673 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
674 struct trace_buffer *size_buf, int cpu_id);
675 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val);
677 static int alloc_snapshot(struct trace_array *tr)
679 int ret;
681 if (!tr->allocated_snapshot) {
683 /* allocate spare buffer */
684 ret = resize_buffer_duplicate_size(&tr->max_buffer,
685 &tr->trace_buffer, RING_BUFFER_ALL_CPUS);
686 if (ret < 0)
687 return ret;
689 tr->allocated_snapshot = true;
692 return 0;
695 static void free_snapshot(struct trace_array *tr)
698 * We don't free the ring buffer. instead, resize it because
699 * The max_tr ring buffer has some state (e.g. ring->clock) and
700 * we want preserve it.
702 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS);
703 set_buffer_entries(&tr->max_buffer, 1);
704 tracing_reset_online_cpus(&tr->max_buffer);
705 tr->allocated_snapshot = false;
709 * tracing_alloc_snapshot - allocate snapshot buffer.
711 * This only allocates the snapshot buffer if it isn't already
712 * allocated - it doesn't also take a snapshot.
714 * This is meant to be used in cases where the snapshot buffer needs
715 * to be set up for events that can't sleep but need to be able to
716 * trigger a snapshot.
718 int tracing_alloc_snapshot(void)
720 struct trace_array *tr = &global_trace;
721 int ret;
723 ret = alloc_snapshot(tr);
724 WARN_ON(ret < 0);
726 return ret;
728 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
731 * trace_snapshot_alloc - allocate and take a snapshot of the current buffer.
733 * This is similar to trace_snapshot(), but it will allocate the
734 * snapshot buffer if it isn't already allocated. Use this only
735 * where it is safe to sleep, as the allocation may sleep.
737 * This causes a swap between the snapshot buffer and the current live
738 * tracing buffer. You can use this to take snapshots of the live
739 * trace when some condition is triggered, but continue to trace.
741 void tracing_snapshot_alloc(void)
743 int ret;
745 ret = tracing_alloc_snapshot();
746 if (ret < 0)
747 return;
749 tracing_snapshot();
751 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
752 #else
753 void tracing_snapshot(void)
755 WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used");
757 EXPORT_SYMBOL_GPL(tracing_snapshot);
758 int tracing_alloc_snapshot(void)
760 WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used");
761 return -ENODEV;
763 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
764 void tracing_snapshot_alloc(void)
766 /* Give warning */
767 tracing_snapshot();
769 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
770 #endif /* CONFIG_TRACER_SNAPSHOT */
772 static void tracer_tracing_off(struct trace_array *tr)
774 if (tr->trace_buffer.buffer)
775 ring_buffer_record_off(tr->trace_buffer.buffer);
777 * This flag is looked at when buffers haven't been allocated
778 * yet, or by some tracers (like irqsoff), that just want to
779 * know if the ring buffer has been disabled, but it can handle
780 * races of where it gets disabled but we still do a record.
781 * As the check is in the fast path of the tracers, it is more
782 * important to be fast than accurate.
784 tr->buffer_disabled = 1;
785 /* Make the flag seen by readers */
786 smp_wmb();
790 * tracing_off - turn off tracing buffers
792 * This function stops the tracing buffers from recording data.
793 * It does not disable any overhead the tracers themselves may
794 * be causing. This function simply causes all recording to
795 * the ring buffers to fail.
797 void tracing_off(void)
799 tracer_tracing_off(&global_trace);
801 EXPORT_SYMBOL_GPL(tracing_off);
803 void disable_trace_on_warning(void)
805 if (__disable_trace_on_warning)
806 tracing_off();
810 * tracer_tracing_is_on - show real state of ring buffer enabled
811 * @tr : the trace array to know if ring buffer is enabled
813 * Shows real state of the ring buffer if it is enabled or not.
815 static int tracer_tracing_is_on(struct trace_array *tr)
817 if (tr->trace_buffer.buffer)
818 return ring_buffer_record_is_on(tr->trace_buffer.buffer);
819 return !tr->buffer_disabled;
823 * tracing_is_on - show state of ring buffers enabled
825 int tracing_is_on(void)
827 return tracer_tracing_is_on(&global_trace);
829 EXPORT_SYMBOL_GPL(tracing_is_on);
831 static int __init set_buf_size(char *str)
833 unsigned long buf_size;
835 if (!str)
836 return 0;
837 buf_size = memparse(str, &str);
838 /* nr_entries can not be zero */
839 if (buf_size == 0)
840 return 0;
841 trace_buf_size = buf_size;
842 return 1;
844 __setup("trace_buf_size=", set_buf_size);
846 static int __init set_tracing_thresh(char *str)
848 unsigned long threshold;
849 int ret;
851 if (!str)
852 return 0;
853 ret = kstrtoul(str, 0, &threshold);
854 if (ret < 0)
855 return 0;
856 tracing_thresh = threshold * 1000;
857 return 1;
859 __setup("tracing_thresh=", set_tracing_thresh);
861 unsigned long nsecs_to_usecs(unsigned long nsecs)
863 return nsecs / 1000;
867 * TRACE_FLAGS is defined as a tuple matching bit masks with strings.
868 * It uses C(a, b) where 'a' is the enum name and 'b' is the string that
869 * matches it. By defining "C(a, b) b", TRACE_FLAGS becomes a list
870 * of strings in the order that the enums were defined.
872 #undef C
873 #define C(a, b) b
875 /* These must match the bit postions in trace_iterator_flags */
876 static const char *trace_options[] = {
877 TRACE_FLAGS
878 NULL
881 static struct {
882 u64 (*func)(void);
883 const char *name;
884 int in_ns; /* is this clock in nanoseconds? */
885 } trace_clocks[] = {
886 { trace_clock_local, "local", 1 },
887 { trace_clock_global, "global", 1 },
888 { trace_clock_counter, "counter", 0 },
889 { trace_clock_jiffies, "uptime", 0 },
890 { trace_clock, "perf", 1 },
891 { ktime_get_mono_fast_ns, "mono", 1 },
892 { ktime_get_raw_fast_ns, "mono_raw", 1 },
893 ARCH_TRACE_CLOCKS
897 * trace_parser_get_init - gets the buffer for trace parser
899 int trace_parser_get_init(struct trace_parser *parser, int size)
901 memset(parser, 0, sizeof(*parser));
903 parser->buffer = kmalloc(size, GFP_KERNEL);
904 if (!parser->buffer)
905 return 1;
907 parser->size = size;
908 return 0;
912 * trace_parser_put - frees the buffer for trace parser
914 void trace_parser_put(struct trace_parser *parser)
916 kfree(parser->buffer);
920 * trace_get_user - reads the user input string separated by space
921 * (matched by isspace(ch))
923 * For each string found the 'struct trace_parser' is updated,
924 * and the function returns.
926 * Returns number of bytes read.
928 * See kernel/trace/trace.h for 'struct trace_parser' details.
930 int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
931 size_t cnt, loff_t *ppos)
933 char ch;
934 size_t read = 0;
935 ssize_t ret;
937 if (!*ppos)
938 trace_parser_clear(parser);
940 ret = get_user(ch, ubuf++);
941 if (ret)
942 goto out;
944 read++;
945 cnt--;
948 * The parser is not finished with the last write,
949 * continue reading the user input without skipping spaces.
951 if (!parser->cont) {
952 /* skip white space */
953 while (cnt && isspace(ch)) {
954 ret = get_user(ch, ubuf++);
955 if (ret)
956 goto out;
957 read++;
958 cnt--;
961 /* only spaces were written */
962 if (isspace(ch)) {
963 *ppos += read;
964 ret = read;
965 goto out;
968 parser->idx = 0;
971 /* read the non-space input */
972 while (cnt && !isspace(ch)) {
973 if (parser->idx < parser->size - 1)
974 parser->buffer[parser->idx++] = ch;
975 else {
976 ret = -EINVAL;
977 goto out;
979 ret = get_user(ch, ubuf++);
980 if (ret)
981 goto out;
982 read++;
983 cnt--;
986 /* We either got finished input or we have to wait for another call. */
987 if (isspace(ch)) {
988 parser->buffer[parser->idx] = 0;
989 parser->cont = false;
990 } else if (parser->idx < parser->size - 1) {
991 parser->cont = true;
992 parser->buffer[parser->idx++] = ch;
993 } else {
994 ret = -EINVAL;
995 goto out;
998 *ppos += read;
999 ret = read;
1001 out:
1002 return ret;
1005 /* TODO add a seq_buf_to_buffer() */
1006 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt)
1008 int len;
1010 if (trace_seq_used(s) <= s->seq.readpos)
1011 return -EBUSY;
1013 len = trace_seq_used(s) - s->seq.readpos;
1014 if (cnt > len)
1015 cnt = len;
1016 memcpy(buf, s->buffer + s->seq.readpos, cnt);
1018 s->seq.readpos += cnt;
1019 return cnt;
1022 unsigned long __read_mostly tracing_thresh;
1024 #ifdef CONFIG_TRACER_MAX_TRACE
1026 * Copy the new maximum trace into the separate maximum-trace
1027 * structure. (this way the maximum trace is permanently saved,
1028 * for later retrieval via /sys/kernel/debug/tracing/latency_trace)
1030 static void
1031 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1033 struct trace_buffer *trace_buf = &tr->trace_buffer;
1034 struct trace_buffer *max_buf = &tr->max_buffer;
1035 struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu);
1036 struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu);
1038 max_buf->cpu = cpu;
1039 max_buf->time_start = data->preempt_timestamp;
1041 max_data->saved_latency = tr->max_latency;
1042 max_data->critical_start = data->critical_start;
1043 max_data->critical_end = data->critical_end;
1045 memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
1046 max_data->pid = tsk->pid;
1048 * If tsk == current, then use current_uid(), as that does not use
1049 * RCU. The irq tracer can be called out of RCU scope.
1051 if (tsk == current)
1052 max_data->uid = current_uid();
1053 else
1054 max_data->uid = task_uid(tsk);
1056 max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
1057 max_data->policy = tsk->policy;
1058 max_data->rt_priority = tsk->rt_priority;
1060 /* record this tasks comm */
1061 tracing_record_cmdline(tsk);
1065 * update_max_tr - snapshot all trace buffers from global_trace to max_tr
1066 * @tr: tracer
1067 * @tsk: the task with the latency
1068 * @cpu: The cpu that initiated the trace.
1070 * Flip the buffers between the @tr and the max_tr and record information
1071 * about which task was the cause of this latency.
1073 void
1074 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1076 struct ring_buffer *buf;
1078 if (tr->stop_count)
1079 return;
1081 WARN_ON_ONCE(!irqs_disabled());
1083 if (!tr->allocated_snapshot) {
1084 /* Only the nop tracer should hit this when disabling */
1085 WARN_ON_ONCE(tr->current_trace != &nop_trace);
1086 return;
1089 arch_spin_lock(&tr->max_lock);
1091 /* Inherit the recordable setting from trace_buffer */
1092 if (ring_buffer_record_is_set_on(tr->trace_buffer.buffer))
1093 ring_buffer_record_on(tr->max_buffer.buffer);
1094 else
1095 ring_buffer_record_off(tr->max_buffer.buffer);
1097 buf = tr->trace_buffer.buffer;
1098 tr->trace_buffer.buffer = tr->max_buffer.buffer;
1099 tr->max_buffer.buffer = buf;
1101 __update_max_tr(tr, tsk, cpu);
1102 arch_spin_unlock(&tr->max_lock);
1106 * update_max_tr_single - only copy one trace over, and reset the rest
1107 * @tr - tracer
1108 * @tsk - task with the latency
1109 * @cpu - the cpu of the buffer to copy.
1111 * Flip the trace of a single CPU buffer between the @tr and the max_tr.
1113 void
1114 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
1116 int ret;
1118 if (tr->stop_count)
1119 return;
1121 WARN_ON_ONCE(!irqs_disabled());
1122 if (!tr->allocated_snapshot) {
1123 /* Only the nop tracer should hit this when disabling */
1124 WARN_ON_ONCE(tr->current_trace != &nop_trace);
1125 return;
1128 arch_spin_lock(&tr->max_lock);
1130 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu);
1132 if (ret == -EBUSY) {
1134 * We failed to swap the buffer due to a commit taking
1135 * place on this CPU. We fail to record, but we reset
1136 * the max trace buffer (no one writes directly to it)
1137 * and flag that it failed.
1139 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_,
1140 "Failed to swap buffers due to commit in progress\n");
1143 WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY);
1145 __update_max_tr(tr, tsk, cpu);
1146 arch_spin_unlock(&tr->max_lock);
1148 #endif /* CONFIG_TRACER_MAX_TRACE */
1150 static int wait_on_pipe(struct trace_iterator *iter, bool full)
1152 /* Iterators are static, they should be filled or empty */
1153 if (trace_buffer_iter(iter, iter->cpu_file))
1154 return 0;
1156 return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file,
1157 full);
1160 #ifdef CONFIG_FTRACE_STARTUP_TEST
1161 static int run_tracer_selftest(struct tracer *type)
1163 struct trace_array *tr = &global_trace;
1164 struct tracer *saved_tracer = tr->current_trace;
1165 int ret;
1167 if (!type->selftest || tracing_selftest_disabled)
1168 return 0;
1171 * Run a selftest on this tracer.
1172 * Here we reset the trace buffer, and set the current
1173 * tracer to be this tracer. The tracer can then run some
1174 * internal tracing to verify that everything is in order.
1175 * If we fail, we do not register this tracer.
1177 tracing_reset_online_cpus(&tr->trace_buffer);
1179 tr->current_trace = type;
1181 #ifdef CONFIG_TRACER_MAX_TRACE
1182 if (type->use_max_tr) {
1183 /* If we expanded the buffers, make sure the max is expanded too */
1184 if (ring_buffer_expanded)
1185 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size,
1186 RING_BUFFER_ALL_CPUS);
1187 tr->allocated_snapshot = true;
1189 #endif
1191 /* the test is responsible for initializing and enabling */
1192 pr_info("Testing tracer %s: ", type->name);
1193 ret = type->selftest(type, tr);
1194 /* the test is responsible for resetting too */
1195 tr->current_trace = saved_tracer;
1196 if (ret) {
1197 printk(KERN_CONT "FAILED!\n");
1198 /* Add the warning after printing 'FAILED' */
1199 WARN_ON(1);
1200 return -1;
1202 /* Only reset on passing, to avoid touching corrupted buffers */
1203 tracing_reset_online_cpus(&tr->trace_buffer);
1205 #ifdef CONFIG_TRACER_MAX_TRACE
1206 if (type->use_max_tr) {
1207 tr->allocated_snapshot = false;
1209 /* Shrink the max buffer again */
1210 if (ring_buffer_expanded)
1211 ring_buffer_resize(tr->max_buffer.buffer, 1,
1212 RING_BUFFER_ALL_CPUS);
1214 #endif
1216 printk(KERN_CONT "PASSED\n");
1217 return 0;
1219 #else
1220 static inline int run_tracer_selftest(struct tracer *type)
1222 return 0;
1224 #endif /* CONFIG_FTRACE_STARTUP_TEST */
1226 static void add_tracer_options(struct trace_array *tr, struct tracer *t);
1228 static void __init apply_trace_boot_options(void);
1231 * register_tracer - register a tracer with the ftrace system.
1232 * @type - the plugin for the tracer
1234 * Register a new plugin tracer.
1236 int __init register_tracer(struct tracer *type)
1238 struct tracer *t;
1239 int ret = 0;
1241 if (!type->name) {
1242 pr_info("Tracer must have a name\n");
1243 return -1;
1246 if (strlen(type->name) >= MAX_TRACER_SIZE) {
1247 pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE);
1248 return -1;
1251 mutex_lock(&trace_types_lock);
1253 tracing_selftest_running = true;
1255 for (t = trace_types; t; t = t->next) {
1256 if (strcmp(type->name, t->name) == 0) {
1257 /* already found */
1258 pr_info("Tracer %s already registered\n",
1259 type->name);
1260 ret = -1;
1261 goto out;
1265 if (!type->set_flag)
1266 type->set_flag = &dummy_set_flag;
1267 if (!type->flags)
1268 type->flags = &dummy_tracer_flags;
1269 else
1270 if (!type->flags->opts)
1271 type->flags->opts = dummy_tracer_opt;
1273 ret = run_tracer_selftest(type);
1274 if (ret < 0)
1275 goto out;
1277 type->next = trace_types;
1278 trace_types = type;
1279 add_tracer_options(&global_trace, type);
1281 out:
1282 tracing_selftest_running = false;
1283 mutex_unlock(&trace_types_lock);
1285 if (ret || !default_bootup_tracer)
1286 goto out_unlock;
1288 if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE))
1289 goto out_unlock;
1291 printk(KERN_INFO "Starting tracer '%s'\n", type->name);
1292 /* Do we want this tracer to start on bootup? */
1293 tracing_set_tracer(&global_trace, type->name);
1294 default_bootup_tracer = NULL;
1296 apply_trace_boot_options();
1298 /* disable other selftests, since this will break it. */
1299 tracing_selftest_disabled = true;
1300 #ifdef CONFIG_FTRACE_STARTUP_TEST
1301 printk(KERN_INFO "Disabling FTRACE selftests due to running tracer '%s'\n",
1302 type->name);
1303 #endif
1305 out_unlock:
1306 return ret;
1309 void tracing_reset(struct trace_buffer *buf, int cpu)
1311 struct ring_buffer *buffer = buf->buffer;
1313 if (!buffer)
1314 return;
1316 ring_buffer_record_disable(buffer);
1318 /* Make sure all commits have finished */
1319 synchronize_sched();
1320 ring_buffer_reset_cpu(buffer, cpu);
1322 ring_buffer_record_enable(buffer);
1325 void tracing_reset_online_cpus(struct trace_buffer *buf)
1327 struct ring_buffer *buffer = buf->buffer;
1328 int cpu;
1330 if (!buffer)
1331 return;
1333 ring_buffer_record_disable(buffer);
1335 /* Make sure all commits have finished */
1336 synchronize_sched();
1338 buf->time_start = buffer_ftrace_now(buf, buf->cpu);
1340 for_each_online_cpu(cpu)
1341 ring_buffer_reset_cpu(buffer, cpu);
1343 ring_buffer_record_enable(buffer);
1346 /* Must have trace_types_lock held */
1347 void tracing_reset_all_online_cpus(void)
1349 struct trace_array *tr;
1351 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
1352 tracing_reset_online_cpus(&tr->trace_buffer);
1353 #ifdef CONFIG_TRACER_MAX_TRACE
1354 tracing_reset_online_cpus(&tr->max_buffer);
1355 #endif
1359 #define SAVED_CMDLINES_DEFAULT 128
1360 #define NO_CMDLINE_MAP UINT_MAX
1361 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED;
1362 struct saved_cmdlines_buffer {
1363 unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1];
1364 unsigned *map_cmdline_to_pid;
1365 unsigned cmdline_num;
1366 int cmdline_idx;
1367 char *saved_cmdlines;
1369 static struct saved_cmdlines_buffer *savedcmd;
1371 /* temporary disable recording */
1372 static atomic_t trace_record_cmdline_disabled __read_mostly;
1374 static inline char *get_saved_cmdlines(int idx)
1376 return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN];
1379 static inline void set_cmdline(int idx, const char *cmdline)
1381 memcpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN);
1384 static int allocate_cmdlines_buffer(unsigned int val,
1385 struct saved_cmdlines_buffer *s)
1387 s->map_cmdline_to_pid = kmalloc(val * sizeof(*s->map_cmdline_to_pid),
1388 GFP_KERNEL);
1389 if (!s->map_cmdline_to_pid)
1390 return -ENOMEM;
1392 s->saved_cmdlines = kmalloc(val * TASK_COMM_LEN, GFP_KERNEL);
1393 if (!s->saved_cmdlines) {
1394 kfree(s->map_cmdline_to_pid);
1395 return -ENOMEM;
1398 s->cmdline_idx = 0;
1399 s->cmdline_num = val;
1400 memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP,
1401 sizeof(s->map_pid_to_cmdline));
1402 memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP,
1403 val * sizeof(*s->map_cmdline_to_pid));
1405 return 0;
1408 static int trace_create_savedcmd(void)
1410 int ret;
1412 savedcmd = kmalloc(sizeof(*savedcmd), GFP_KERNEL);
1413 if (!savedcmd)
1414 return -ENOMEM;
1416 ret = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT, savedcmd);
1417 if (ret < 0) {
1418 kfree(savedcmd);
1419 savedcmd = NULL;
1420 return -ENOMEM;
1423 return 0;
1426 int is_tracing_stopped(void)
1428 return global_trace.stop_count;
1432 * tracing_start - quick start of the tracer
1434 * If tracing is enabled but was stopped by tracing_stop,
1435 * this will start the tracer back up.
1437 void tracing_start(void)
1439 struct ring_buffer *buffer;
1440 unsigned long flags;
1442 if (tracing_disabled)
1443 return;
1445 raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1446 if (--global_trace.stop_count) {
1447 if (global_trace.stop_count < 0) {
1448 /* Someone screwed up their debugging */
1449 WARN_ON_ONCE(1);
1450 global_trace.stop_count = 0;
1452 goto out;
1455 /* Prevent the buffers from switching */
1456 arch_spin_lock(&global_trace.max_lock);
1458 buffer = global_trace.trace_buffer.buffer;
1459 if (buffer)
1460 ring_buffer_record_enable(buffer);
1462 #ifdef CONFIG_TRACER_MAX_TRACE
1463 buffer = global_trace.max_buffer.buffer;
1464 if (buffer)
1465 ring_buffer_record_enable(buffer);
1466 #endif
1468 arch_spin_unlock(&global_trace.max_lock);
1470 out:
1471 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1474 static void tracing_start_tr(struct trace_array *tr)
1476 struct ring_buffer *buffer;
1477 unsigned long flags;
1479 if (tracing_disabled)
1480 return;
1482 /* If global, we need to also start the max tracer */
1483 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1484 return tracing_start();
1486 raw_spin_lock_irqsave(&tr->start_lock, flags);
1488 if (--tr->stop_count) {
1489 if (tr->stop_count < 0) {
1490 /* Someone screwed up their debugging */
1491 WARN_ON_ONCE(1);
1492 tr->stop_count = 0;
1494 goto out;
1497 buffer = tr->trace_buffer.buffer;
1498 if (buffer)
1499 ring_buffer_record_enable(buffer);
1501 out:
1502 raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1506 * tracing_stop - quick stop of the tracer
1508 * Light weight way to stop tracing. Use in conjunction with
1509 * tracing_start.
1511 void tracing_stop(void)
1513 struct ring_buffer *buffer;
1514 unsigned long flags;
1516 raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1517 if (global_trace.stop_count++)
1518 goto out;
1520 /* Prevent the buffers from switching */
1521 arch_spin_lock(&global_trace.max_lock);
1523 buffer = global_trace.trace_buffer.buffer;
1524 if (buffer)
1525 ring_buffer_record_disable(buffer);
1527 #ifdef CONFIG_TRACER_MAX_TRACE
1528 buffer = global_trace.max_buffer.buffer;
1529 if (buffer)
1530 ring_buffer_record_disable(buffer);
1531 #endif
1533 arch_spin_unlock(&global_trace.max_lock);
1535 out:
1536 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1539 static void tracing_stop_tr(struct trace_array *tr)
1541 struct ring_buffer *buffer;
1542 unsigned long flags;
1544 /* If global, we need to also stop the max tracer */
1545 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1546 return tracing_stop();
1548 raw_spin_lock_irqsave(&tr->start_lock, flags);
1549 if (tr->stop_count++)
1550 goto out;
1552 buffer = tr->trace_buffer.buffer;
1553 if (buffer)
1554 ring_buffer_record_disable(buffer);
1556 out:
1557 raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1560 void trace_stop_cmdline_recording(void);
1562 static int trace_save_cmdline(struct task_struct *tsk)
1564 unsigned pid, idx;
1566 if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT))
1567 return 0;
1570 * It's not the end of the world if we don't get
1571 * the lock, but we also don't want to spin
1572 * nor do we want to disable interrupts,
1573 * so if we miss here, then better luck next time.
1575 if (!arch_spin_trylock(&trace_cmdline_lock))
1576 return 0;
1578 idx = savedcmd->map_pid_to_cmdline[tsk->pid];
1579 if (idx == NO_CMDLINE_MAP) {
1580 idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num;
1583 * Check whether the cmdline buffer at idx has a pid
1584 * mapped. We are going to overwrite that entry so we
1585 * need to clear the map_pid_to_cmdline. Otherwise we
1586 * would read the new comm for the old pid.
1588 pid = savedcmd->map_cmdline_to_pid[idx];
1589 if (pid != NO_CMDLINE_MAP)
1590 savedcmd->map_pid_to_cmdline[pid] = NO_CMDLINE_MAP;
1592 savedcmd->map_cmdline_to_pid[idx] = tsk->pid;
1593 savedcmd->map_pid_to_cmdline[tsk->pid] = idx;
1595 savedcmd->cmdline_idx = idx;
1598 set_cmdline(idx, tsk->comm);
1600 arch_spin_unlock(&trace_cmdline_lock);
1602 return 1;
1605 static void __trace_find_cmdline(int pid, char comm[])
1607 unsigned map;
1609 if (!pid) {
1610 strcpy(comm, "<idle>");
1611 return;
1614 if (WARN_ON_ONCE(pid < 0)) {
1615 strcpy(comm, "<XXX>");
1616 return;
1619 if (pid > PID_MAX_DEFAULT) {
1620 strcpy(comm, "<...>");
1621 return;
1624 map = savedcmd->map_pid_to_cmdline[pid];
1625 if (map != NO_CMDLINE_MAP)
1626 strcpy(comm, get_saved_cmdlines(map));
1627 else
1628 strcpy(comm, "<...>");
1631 void trace_find_cmdline(int pid, char comm[])
1633 preempt_disable();
1634 arch_spin_lock(&trace_cmdline_lock);
1636 __trace_find_cmdline(pid, comm);
1638 arch_spin_unlock(&trace_cmdline_lock);
1639 preempt_enable();
1642 void tracing_record_cmdline(struct task_struct *tsk)
1644 if (atomic_read(&trace_record_cmdline_disabled) || !tracing_is_on())
1645 return;
1647 if (!__this_cpu_read(trace_cmdline_save))
1648 return;
1650 if (trace_save_cmdline(tsk))
1651 __this_cpu_write(trace_cmdline_save, false);
1654 void
1655 tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
1656 int pc)
1658 struct task_struct *tsk = current;
1660 entry->preempt_count = pc & 0xff;
1661 entry->pid = (tsk) ? tsk->pid : 0;
1662 entry->flags =
1663 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
1664 (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) |
1665 #else
1666 TRACE_FLAG_IRQS_NOSUPPORT |
1667 #endif
1668 ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
1669 ((pc & SOFTIRQ_OFFSET) ? TRACE_FLAG_SOFTIRQ : 0) |
1670 (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
1671 (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
1673 EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
1675 struct ring_buffer_event *
1676 trace_buffer_lock_reserve(struct ring_buffer *buffer,
1677 int type,
1678 unsigned long len,
1679 unsigned long flags, int pc)
1681 struct ring_buffer_event *event;
1683 event = ring_buffer_lock_reserve(buffer, len);
1684 if (event != NULL) {
1685 struct trace_entry *ent = ring_buffer_event_data(event);
1687 tracing_generic_entry_update(ent, flags, pc);
1688 ent->type = type;
1691 return event;
1694 void
1695 __buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event)
1697 __this_cpu_write(trace_cmdline_save, true);
1698 ring_buffer_unlock_commit(buffer, event);
1701 void trace_buffer_unlock_commit(struct trace_array *tr,
1702 struct ring_buffer *buffer,
1703 struct ring_buffer_event *event,
1704 unsigned long flags, int pc)
1706 __buffer_unlock_commit(buffer, event);
1708 ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL);
1709 ftrace_trace_userstack(buffer, flags, pc);
1711 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit);
1713 static struct ring_buffer *temp_buffer;
1715 struct ring_buffer_event *
1716 trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
1717 struct trace_event_file *trace_file,
1718 int type, unsigned long len,
1719 unsigned long flags, int pc)
1721 struct ring_buffer_event *entry;
1723 *current_rb = trace_file->tr->trace_buffer.buffer;
1724 entry = trace_buffer_lock_reserve(*current_rb,
1725 type, len, flags, pc);
1727 * If tracing is off, but we have triggers enabled
1728 * we still need to look at the event data. Use the temp_buffer
1729 * to store the trace event for the tigger to use. It's recusive
1730 * safe and will not be recorded anywhere.
1732 if (!entry && trace_file->flags & EVENT_FILE_FL_TRIGGER_COND) {
1733 *current_rb = temp_buffer;
1734 entry = trace_buffer_lock_reserve(*current_rb,
1735 type, len, flags, pc);
1737 return entry;
1739 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve);
1741 struct ring_buffer_event *
1742 trace_current_buffer_lock_reserve(struct ring_buffer **current_rb,
1743 int type, unsigned long len,
1744 unsigned long flags, int pc)
1746 *current_rb = global_trace.trace_buffer.buffer;
1747 return trace_buffer_lock_reserve(*current_rb,
1748 type, len, flags, pc);
1750 EXPORT_SYMBOL_GPL(trace_current_buffer_lock_reserve);
1752 void trace_buffer_unlock_commit_regs(struct trace_array *tr,
1753 struct ring_buffer *buffer,
1754 struct ring_buffer_event *event,
1755 unsigned long flags, int pc,
1756 struct pt_regs *regs)
1758 __buffer_unlock_commit(buffer, event);
1760 ftrace_trace_stack(tr, buffer, flags, 0, pc, regs);
1761 ftrace_trace_userstack(buffer, flags, pc);
1763 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit_regs);
1765 void trace_current_buffer_discard_commit(struct ring_buffer *buffer,
1766 struct ring_buffer_event *event)
1768 ring_buffer_discard_commit(buffer, event);
1770 EXPORT_SYMBOL_GPL(trace_current_buffer_discard_commit);
1772 void
1773 trace_function(struct trace_array *tr,
1774 unsigned long ip, unsigned long parent_ip, unsigned long flags,
1775 int pc)
1777 struct trace_event_call *call = &event_function;
1778 struct ring_buffer *buffer = tr->trace_buffer.buffer;
1779 struct ring_buffer_event *event;
1780 struct ftrace_entry *entry;
1782 event = trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry),
1783 flags, pc);
1784 if (!event)
1785 return;
1786 entry = ring_buffer_event_data(event);
1787 entry->ip = ip;
1788 entry->parent_ip = parent_ip;
1790 if (!call_filter_check_discard(call, entry, buffer, event))
1791 __buffer_unlock_commit(buffer, event);
1794 #ifdef CONFIG_STACKTRACE
1796 #define FTRACE_STACK_MAX_ENTRIES (PAGE_SIZE / sizeof(unsigned long))
1797 struct ftrace_stack {
1798 unsigned long calls[FTRACE_STACK_MAX_ENTRIES];
1801 static DEFINE_PER_CPU(struct ftrace_stack, ftrace_stack);
1802 static DEFINE_PER_CPU(int, ftrace_stack_reserve);
1804 static void __ftrace_trace_stack(struct ring_buffer *buffer,
1805 unsigned long flags,
1806 int skip, int pc, struct pt_regs *regs)
1808 struct trace_event_call *call = &event_kernel_stack;
1809 struct ring_buffer_event *event;
1810 struct stack_entry *entry;
1811 struct stack_trace trace;
1812 int use_stack;
1813 int size = FTRACE_STACK_ENTRIES;
1815 trace.nr_entries = 0;
1816 trace.skip = skip;
1819 * Since events can happen in NMIs there's no safe way to
1820 * use the per cpu ftrace_stacks. We reserve it and if an interrupt
1821 * or NMI comes in, it will just have to use the default
1822 * FTRACE_STACK_SIZE.
1824 preempt_disable_notrace();
1826 use_stack = __this_cpu_inc_return(ftrace_stack_reserve);
1828 * We don't need any atomic variables, just a barrier.
1829 * If an interrupt comes in, we don't care, because it would
1830 * have exited and put the counter back to what we want.
1831 * We just need a barrier to keep gcc from moving things
1832 * around.
1834 barrier();
1835 if (use_stack == 1) {
1836 trace.entries = this_cpu_ptr(ftrace_stack.calls);
1837 trace.max_entries = FTRACE_STACK_MAX_ENTRIES;
1839 if (regs)
1840 save_stack_trace_regs(regs, &trace);
1841 else
1842 save_stack_trace(&trace);
1844 if (trace.nr_entries > size)
1845 size = trace.nr_entries;
1846 } else
1847 /* From now on, use_stack is a boolean */
1848 use_stack = 0;
1850 size *= sizeof(unsigned long);
1852 event = trace_buffer_lock_reserve(buffer, TRACE_STACK,
1853 sizeof(*entry) + size, flags, pc);
1854 if (!event)
1855 goto out;
1856 entry = ring_buffer_event_data(event);
1858 memset(&entry->caller, 0, size);
1860 if (use_stack)
1861 memcpy(&entry->caller, trace.entries,
1862 trace.nr_entries * sizeof(unsigned long));
1863 else {
1864 trace.max_entries = FTRACE_STACK_ENTRIES;
1865 trace.entries = entry->caller;
1866 if (regs)
1867 save_stack_trace_regs(regs, &trace);
1868 else
1869 save_stack_trace(&trace);
1872 entry->size = trace.nr_entries;
1874 if (!call_filter_check_discard(call, entry, buffer, event))
1875 __buffer_unlock_commit(buffer, event);
1877 out:
1878 /* Again, don't let gcc optimize things here */
1879 barrier();
1880 __this_cpu_dec(ftrace_stack_reserve);
1881 preempt_enable_notrace();
1885 static inline void ftrace_trace_stack(struct trace_array *tr,
1886 struct ring_buffer *buffer,
1887 unsigned long flags,
1888 int skip, int pc, struct pt_regs *regs)
1890 if (!(tr->trace_flags & TRACE_ITER_STACKTRACE))
1891 return;
1893 __ftrace_trace_stack(buffer, flags, skip, pc, regs);
1896 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
1897 int pc)
1899 __ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL);
1903 * trace_dump_stack - record a stack back trace in the trace buffer
1904 * @skip: Number of functions to skip (helper handlers)
1906 void trace_dump_stack(int skip)
1908 unsigned long flags;
1910 if (tracing_disabled || tracing_selftest_running)
1911 return;
1913 local_save_flags(flags);
1916 * Skip 3 more, seems to get us at the caller of
1917 * this function.
1919 skip += 3;
1920 __ftrace_trace_stack(global_trace.trace_buffer.buffer,
1921 flags, skip, preempt_count(), NULL);
1924 static DEFINE_PER_CPU(int, user_stack_count);
1926 void
1927 ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
1929 struct trace_event_call *call = &event_user_stack;
1930 struct ring_buffer_event *event;
1931 struct userstack_entry *entry;
1932 struct stack_trace trace;
1934 if (!(global_trace.trace_flags & TRACE_ITER_USERSTACKTRACE))
1935 return;
1938 * NMIs can not handle page faults, even with fix ups.
1939 * The save user stack can (and often does) fault.
1941 if (unlikely(in_nmi()))
1942 return;
1945 * prevent recursion, since the user stack tracing may
1946 * trigger other kernel events.
1948 preempt_disable();
1949 if (__this_cpu_read(user_stack_count))
1950 goto out;
1952 __this_cpu_inc(user_stack_count);
1954 event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK,
1955 sizeof(*entry), flags, pc);
1956 if (!event)
1957 goto out_drop_count;
1958 entry = ring_buffer_event_data(event);
1960 entry->tgid = current->tgid;
1961 memset(&entry->caller, 0, sizeof(entry->caller));
1963 trace.nr_entries = 0;
1964 trace.max_entries = FTRACE_STACK_ENTRIES;
1965 trace.skip = 0;
1966 trace.entries = entry->caller;
1968 save_stack_trace_user(&trace);
1969 if (!call_filter_check_discard(call, entry, buffer, event))
1970 __buffer_unlock_commit(buffer, event);
1972 out_drop_count:
1973 __this_cpu_dec(user_stack_count);
1974 out:
1975 preempt_enable();
1978 #ifdef UNUSED
1979 static void __trace_userstack(struct trace_array *tr, unsigned long flags)
1981 ftrace_trace_userstack(tr, flags, preempt_count());
1983 #endif /* UNUSED */
1985 #endif /* CONFIG_STACKTRACE */
1987 /* created for use with alloc_percpu */
1988 struct trace_buffer_struct {
1989 char buffer[TRACE_BUF_SIZE];
1992 static struct trace_buffer_struct *trace_percpu_buffer;
1993 static struct trace_buffer_struct *trace_percpu_sirq_buffer;
1994 static struct trace_buffer_struct *trace_percpu_irq_buffer;
1995 static struct trace_buffer_struct *trace_percpu_nmi_buffer;
1998 * The buffer used is dependent on the context. There is a per cpu
1999 * buffer for normal context, softirq contex, hard irq context and
2000 * for NMI context. Thise allows for lockless recording.
2002 * Note, if the buffers failed to be allocated, then this returns NULL
2004 static char *get_trace_buf(void)
2006 struct trace_buffer_struct *percpu_buffer;
2009 * If we have allocated per cpu buffers, then we do not
2010 * need to do any locking.
2012 if (in_nmi())
2013 percpu_buffer = trace_percpu_nmi_buffer;
2014 else if (in_irq())
2015 percpu_buffer = trace_percpu_irq_buffer;
2016 else if (in_softirq())
2017 percpu_buffer = trace_percpu_sirq_buffer;
2018 else
2019 percpu_buffer = trace_percpu_buffer;
2021 if (!percpu_buffer)
2022 return NULL;
2024 return this_cpu_ptr(&percpu_buffer->buffer[0]);
2027 static int alloc_percpu_trace_buffer(void)
2029 struct trace_buffer_struct *buffers;
2030 struct trace_buffer_struct *sirq_buffers;
2031 struct trace_buffer_struct *irq_buffers;
2032 struct trace_buffer_struct *nmi_buffers;
2034 buffers = alloc_percpu(struct trace_buffer_struct);
2035 if (!buffers)
2036 goto err_warn;
2038 sirq_buffers = alloc_percpu(struct trace_buffer_struct);
2039 if (!sirq_buffers)
2040 goto err_sirq;
2042 irq_buffers = alloc_percpu(struct trace_buffer_struct);
2043 if (!irq_buffers)
2044 goto err_irq;
2046 nmi_buffers = alloc_percpu(struct trace_buffer_struct);
2047 if (!nmi_buffers)
2048 goto err_nmi;
2050 trace_percpu_buffer = buffers;
2051 trace_percpu_sirq_buffer = sirq_buffers;
2052 trace_percpu_irq_buffer = irq_buffers;
2053 trace_percpu_nmi_buffer = nmi_buffers;
2055 return 0;
2057 err_nmi:
2058 free_percpu(irq_buffers);
2059 err_irq:
2060 free_percpu(sirq_buffers);
2061 err_sirq:
2062 free_percpu(buffers);
2063 err_warn:
2064 WARN(1, "Could not allocate percpu trace_printk buffer");
2065 return -ENOMEM;
2068 static int buffers_allocated;
2070 void trace_printk_init_buffers(void)
2072 if (buffers_allocated)
2073 return;
2075 if (alloc_percpu_trace_buffer())
2076 return;
2078 /* trace_printk() is for debug use only. Don't use it in production. */
2080 pr_warning("\n");
2081 pr_warning("**********************************************************\n");
2082 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
2083 pr_warning("** **\n");
2084 pr_warning("** trace_printk() being used. Allocating extra memory. **\n");
2085 pr_warning("** **\n");
2086 pr_warning("** This means that this is a DEBUG kernel and it is **\n");
2087 pr_warning("** unsafe for production use. **\n");
2088 pr_warning("** **\n");
2089 pr_warning("** If you see this message and you are not debugging **\n");
2090 pr_warning("** the kernel, report this immediately to your vendor! **\n");
2091 pr_warning("** **\n");
2092 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
2093 pr_warning("**********************************************************\n");
2095 /* Expand the buffers to set size */
2096 tracing_update_buffers();
2098 buffers_allocated = 1;
2101 * trace_printk_init_buffers() can be called by modules.
2102 * If that happens, then we need to start cmdline recording
2103 * directly here. If the global_trace.buffer is already
2104 * allocated here, then this was called by module code.
2106 if (global_trace.trace_buffer.buffer)
2107 tracing_start_cmdline_record();
2110 void trace_printk_start_comm(void)
2112 /* Start tracing comms if trace printk is set */
2113 if (!buffers_allocated)
2114 return;
2115 tracing_start_cmdline_record();
2118 static void trace_printk_start_stop_comm(int enabled)
2120 if (!buffers_allocated)
2121 return;
2123 if (enabled)
2124 tracing_start_cmdline_record();
2125 else
2126 tracing_stop_cmdline_record();
2130 * trace_vbprintk - write binary msg to tracing buffer
2133 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args)
2135 struct trace_event_call *call = &event_bprint;
2136 struct ring_buffer_event *event;
2137 struct ring_buffer *buffer;
2138 struct trace_array *tr = &global_trace;
2139 struct bprint_entry *entry;
2140 unsigned long flags;
2141 char *tbuffer;
2142 int len = 0, size, pc;
2144 if (unlikely(tracing_selftest_running || tracing_disabled))
2145 return 0;
2147 /* Don't pollute graph traces with trace_vprintk internals */
2148 pause_graph_tracing();
2150 pc = preempt_count();
2151 preempt_disable_notrace();
2153 tbuffer = get_trace_buf();
2154 if (!tbuffer) {
2155 len = 0;
2156 goto out;
2159 len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args);
2161 if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0)
2162 goto out;
2164 local_save_flags(flags);
2165 size = sizeof(*entry) + sizeof(u32) * len;
2166 buffer = tr->trace_buffer.buffer;
2167 event = trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size,
2168 flags, pc);
2169 if (!event)
2170 goto out;
2171 entry = ring_buffer_event_data(event);
2172 entry->ip = ip;
2173 entry->fmt = fmt;
2175 memcpy(entry->buf, tbuffer, sizeof(u32) * len);
2176 if (!call_filter_check_discard(call, entry, buffer, event)) {
2177 __buffer_unlock_commit(buffer, event);
2178 ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL);
2181 out:
2182 preempt_enable_notrace();
2183 unpause_graph_tracing();
2185 return len;
2187 EXPORT_SYMBOL_GPL(trace_vbprintk);
2189 __printf(3, 0)
2190 static int
2191 __trace_array_vprintk(struct ring_buffer *buffer,
2192 unsigned long ip, const char *fmt, va_list args)
2194 struct trace_event_call *call = &event_print;
2195 struct ring_buffer_event *event;
2196 int len = 0, size, pc;
2197 struct print_entry *entry;
2198 unsigned long flags;
2199 char *tbuffer;
2201 if (tracing_disabled || tracing_selftest_running)
2202 return 0;
2204 /* Don't pollute graph traces with trace_vprintk internals */
2205 pause_graph_tracing();
2207 pc = preempt_count();
2208 preempt_disable_notrace();
2211 tbuffer = get_trace_buf();
2212 if (!tbuffer) {
2213 len = 0;
2214 goto out;
2217 len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args);
2219 local_save_flags(flags);
2220 size = sizeof(*entry) + len + 1;
2221 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
2222 flags, pc);
2223 if (!event)
2224 goto out;
2225 entry = ring_buffer_event_data(event);
2226 entry->ip = ip;
2228 memcpy(&entry->buf, tbuffer, len + 1);
2229 if (!call_filter_check_discard(call, entry, buffer, event)) {
2230 __buffer_unlock_commit(buffer, event);
2231 ftrace_trace_stack(&global_trace, buffer, flags, 6, pc, NULL);
2233 out:
2234 preempt_enable_notrace();
2235 unpause_graph_tracing();
2237 return len;
2240 __printf(3, 0)
2241 int trace_array_vprintk(struct trace_array *tr,
2242 unsigned long ip, const char *fmt, va_list args)
2244 return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
2247 __printf(3, 0)
2248 int trace_array_printk(struct trace_array *tr,
2249 unsigned long ip, const char *fmt, ...)
2251 int ret;
2252 va_list ap;
2254 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
2255 return 0;
2257 va_start(ap, fmt);
2258 ret = trace_array_vprintk(tr, ip, fmt, ap);
2259 va_end(ap);
2260 return ret;
2263 __printf(3, 4)
2264 int trace_array_printk_buf(struct ring_buffer *buffer,
2265 unsigned long ip, const char *fmt, ...)
2267 int ret;
2268 va_list ap;
2270 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
2271 return 0;
2273 va_start(ap, fmt);
2274 ret = __trace_array_vprintk(buffer, ip, fmt, ap);
2275 va_end(ap);
2276 return ret;
2279 __printf(2, 0)
2280 int trace_vprintk(unsigned long ip, const char *fmt, va_list args)
2282 return trace_array_vprintk(&global_trace, ip, fmt, args);
2284 EXPORT_SYMBOL_GPL(trace_vprintk);
2286 static void trace_iterator_increment(struct trace_iterator *iter)
2288 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu);
2290 iter->idx++;
2291 if (buf_iter)
2292 ring_buffer_read(buf_iter, NULL);
2295 static struct trace_entry *
2296 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts,
2297 unsigned long *lost_events)
2299 struct ring_buffer_event *event;
2300 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu);
2302 if (buf_iter)
2303 event = ring_buffer_iter_peek(buf_iter, ts);
2304 else
2305 event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts,
2306 lost_events);
2308 if (event) {
2309 iter->ent_size = ring_buffer_event_length(event);
2310 return ring_buffer_event_data(event);
2312 iter->ent_size = 0;
2313 return NULL;
2316 static struct trace_entry *
2317 __find_next_entry(struct trace_iterator *iter, int *ent_cpu,
2318 unsigned long *missing_events, u64 *ent_ts)
2320 struct ring_buffer *buffer = iter->trace_buffer->buffer;
2321 struct trace_entry *ent, *next = NULL;
2322 unsigned long lost_events = 0, next_lost = 0;
2323 int cpu_file = iter->cpu_file;
2324 u64 next_ts = 0, ts;
2325 int next_cpu = -1;
2326 int next_size = 0;
2327 int cpu;
2330 * If we are in a per_cpu trace file, don't bother by iterating over
2331 * all cpu and peek directly.
2333 if (cpu_file > RING_BUFFER_ALL_CPUS) {
2334 if (ring_buffer_empty_cpu(buffer, cpu_file))
2335 return NULL;
2336 ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events);
2337 if (ent_cpu)
2338 *ent_cpu = cpu_file;
2340 return ent;
2343 for_each_tracing_cpu(cpu) {
2345 if (ring_buffer_empty_cpu(buffer, cpu))
2346 continue;
2348 ent = peek_next_entry(iter, cpu, &ts, &lost_events);
2351 * Pick the entry with the smallest timestamp:
2353 if (ent && (!next || ts < next_ts)) {
2354 next = ent;
2355 next_cpu = cpu;
2356 next_ts = ts;
2357 next_lost = lost_events;
2358 next_size = iter->ent_size;
2362 iter->ent_size = next_size;
2364 if (ent_cpu)
2365 *ent_cpu = next_cpu;
2367 if (ent_ts)
2368 *ent_ts = next_ts;
2370 if (missing_events)
2371 *missing_events = next_lost;
2373 return next;
2376 /* Find the next real entry, without updating the iterator itself */
2377 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
2378 int *ent_cpu, u64 *ent_ts)
2380 return __find_next_entry(iter, ent_cpu, NULL, ent_ts);
2383 /* Find the next real entry, and increment the iterator to the next entry */
2384 void *trace_find_next_entry_inc(struct trace_iterator *iter)
2386 iter->ent = __find_next_entry(iter, &iter->cpu,
2387 &iter->lost_events, &iter->ts);
2389 if (iter->ent)
2390 trace_iterator_increment(iter);
2392 return iter->ent ? iter : NULL;
2395 static void trace_consume(struct trace_iterator *iter)
2397 ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts,
2398 &iter->lost_events);
2401 static void *s_next(struct seq_file *m, void *v, loff_t *pos)
2403 struct trace_iterator *iter = m->private;
2404 int i = (int)*pos;
2405 void *ent;
2407 WARN_ON_ONCE(iter->leftover);
2409 (*pos)++;
2411 /* can't go backwards */
2412 if (iter->idx > i)
2413 return NULL;
2415 if (iter->idx < 0)
2416 ent = trace_find_next_entry_inc(iter);
2417 else
2418 ent = iter;
2420 while (ent && iter->idx < i)
2421 ent = trace_find_next_entry_inc(iter);
2423 iter->pos = *pos;
2425 return ent;
2428 void tracing_iter_reset(struct trace_iterator *iter, int cpu)
2430 struct ring_buffer_event *event;
2431 struct ring_buffer_iter *buf_iter;
2432 unsigned long entries = 0;
2433 u64 ts;
2435 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0;
2437 buf_iter = trace_buffer_iter(iter, cpu);
2438 if (!buf_iter)
2439 return;
2441 ring_buffer_iter_reset(buf_iter);
2444 * We could have the case with the max latency tracers
2445 * that a reset never took place on a cpu. This is evident
2446 * by the timestamp being before the start of the buffer.
2448 while ((event = ring_buffer_iter_peek(buf_iter, &ts))) {
2449 if (ts >= iter->trace_buffer->time_start)
2450 break;
2451 entries++;
2452 ring_buffer_read(buf_iter, NULL);
2455 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries;
2459 * The current tracer is copied to avoid a global locking
2460 * all around.
2462 static void *s_start(struct seq_file *m, loff_t *pos)
2464 struct trace_iterator *iter = m->private;
2465 struct trace_array *tr = iter->tr;
2466 int cpu_file = iter->cpu_file;
2467 void *p = NULL;
2468 loff_t l = 0;
2469 int cpu;
2472 * copy the tracer to avoid using a global lock all around.
2473 * iter->trace is a copy of current_trace, the pointer to the
2474 * name may be used instead of a strcmp(), as iter->trace->name
2475 * will point to the same string as current_trace->name.
2477 mutex_lock(&trace_types_lock);
2478 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name))
2479 *iter->trace = *tr->current_trace;
2480 mutex_unlock(&trace_types_lock);
2482 #ifdef CONFIG_TRACER_MAX_TRACE
2483 if (iter->snapshot && iter->trace->use_max_tr)
2484 return ERR_PTR(-EBUSY);
2485 #endif
2487 if (!iter->snapshot)
2488 atomic_inc(&trace_record_cmdline_disabled);
2490 if (*pos != iter->pos) {
2491 iter->ent = NULL;
2492 iter->cpu = 0;
2493 iter->idx = -1;
2495 if (cpu_file == RING_BUFFER_ALL_CPUS) {
2496 for_each_tracing_cpu(cpu)
2497 tracing_iter_reset(iter, cpu);
2498 } else
2499 tracing_iter_reset(iter, cpu_file);
2501 iter->leftover = 0;
2502 for (p = iter; p && l < *pos; p = s_next(m, p, &l))
2505 } else {
2507 * If we overflowed the seq_file before, then we want
2508 * to just reuse the trace_seq buffer again.
2510 if (iter->leftover)
2511 p = iter;
2512 else {
2513 l = *pos - 1;
2514 p = s_next(m, p, &l);
2518 trace_event_read_lock();
2519 trace_access_lock(cpu_file);
2520 return p;
2523 static void s_stop(struct seq_file *m, void *p)
2525 struct trace_iterator *iter = m->private;
2527 #ifdef CONFIG_TRACER_MAX_TRACE
2528 if (iter->snapshot && iter->trace->use_max_tr)
2529 return;
2530 #endif
2532 if (!iter->snapshot)
2533 atomic_dec(&trace_record_cmdline_disabled);
2535 trace_access_unlock(iter->cpu_file);
2536 trace_event_read_unlock();
2539 static void
2540 get_total_entries(struct trace_buffer *buf,
2541 unsigned long *total, unsigned long *entries)
2543 unsigned long count;
2544 int cpu;
2546 *total = 0;
2547 *entries = 0;
2549 for_each_tracing_cpu(cpu) {
2550 count = ring_buffer_entries_cpu(buf->buffer, cpu);
2552 * If this buffer has skipped entries, then we hold all
2553 * entries for the trace and we need to ignore the
2554 * ones before the time stamp.
2556 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) {
2557 count -= per_cpu_ptr(buf->data, cpu)->skipped_entries;
2558 /* total is the same as the entries */
2559 *total += count;
2560 } else
2561 *total += count +
2562 ring_buffer_overrun_cpu(buf->buffer, cpu);
2563 *entries += count;
2567 static void print_lat_help_header(struct seq_file *m)
2569 seq_puts(m, "# _------=> CPU# \n"
2570 "# / _-----=> irqs-off \n"
2571 "# | / _----=> need-resched \n"
2572 "# || / _---=> hardirq/softirq \n"
2573 "# ||| / _--=> preempt-depth \n"
2574 "# |||| / delay \n"
2575 "# cmd pid ||||| time | caller \n"
2576 "# \\ / ||||| \\ | / \n");
2579 static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
2581 unsigned long total;
2582 unsigned long entries;
2584 get_total_entries(buf, &total, &entries);
2585 seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu #P:%d\n",
2586 entries, total, num_online_cpus());
2587 seq_puts(m, "#\n");
2590 static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m)
2592 print_event_info(buf, m);
2593 seq_puts(m, "# TASK-PID CPU# TIMESTAMP FUNCTION\n"
2594 "# | | | | |\n");
2597 static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m)
2599 print_event_info(buf, m);
2600 seq_puts(m, "# _-----=> irqs-off\n"
2601 "# / _----=> need-resched\n"
2602 "# | / _---=> hardirq/softirq\n"
2603 "# || / _--=> preempt-depth\n"
2604 "# ||| / delay\n"
2605 "# TASK-PID CPU# |||| TIMESTAMP FUNCTION\n"
2606 "# | | | |||| | |\n");
2609 void
2610 print_trace_header(struct seq_file *m, struct trace_iterator *iter)
2612 unsigned long sym_flags = (global_trace.trace_flags & TRACE_ITER_SYM_MASK);
2613 struct trace_buffer *buf = iter->trace_buffer;
2614 struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu);
2615 struct tracer *type = iter->trace;
2616 unsigned long entries;
2617 unsigned long total;
2618 const char *name = "preemption";
2620 name = type->name;
2622 get_total_entries(buf, &total, &entries);
2624 seq_printf(m, "# %s latency trace v1.1.5 on %s\n",
2625 name, UTS_RELEASE);
2626 seq_puts(m, "# -----------------------------------"
2627 "---------------------------------\n");
2628 seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |"
2629 " (M:%s VP:%d, KP:%d, SP:%d HP:%d",
2630 nsecs_to_usecs(data->saved_latency),
2631 entries,
2632 total,
2633 buf->cpu,
2634 #if defined(CONFIG_PREEMPT_NONE)
2635 "server",
2636 #elif defined(CONFIG_PREEMPT_VOLUNTARY)
2637 "desktop",
2638 #elif defined(CONFIG_PREEMPT)
2639 "preempt",
2640 #else
2641 "unknown",
2642 #endif
2643 /* These are reserved for later use */
2644 0, 0, 0, 0);
2645 #ifdef CONFIG_SMP
2646 seq_printf(m, " #P:%d)\n", num_online_cpus());
2647 #else
2648 seq_puts(m, ")\n");
2649 #endif
2650 seq_puts(m, "# -----------------\n");
2651 seq_printf(m, "# | task: %.16s-%d "
2652 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n",
2653 data->comm, data->pid,
2654 from_kuid_munged(seq_user_ns(m), data->uid), data->nice,
2655 data->policy, data->rt_priority);
2656 seq_puts(m, "# -----------------\n");
2658 if (data->critical_start) {
2659 seq_puts(m, "# => started at: ");
2660 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags);
2661 trace_print_seq(m, &iter->seq);
2662 seq_puts(m, "\n# => ended at: ");
2663 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags);
2664 trace_print_seq(m, &iter->seq);
2665 seq_puts(m, "\n#\n");
2668 seq_puts(m, "#\n");
2671 static void test_cpu_buff_start(struct trace_iterator *iter)
2673 struct trace_seq *s = &iter->seq;
2674 struct trace_array *tr = iter->tr;
2676 if (!(tr->trace_flags & TRACE_ITER_ANNOTATE))
2677 return;
2679 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
2680 return;
2682 if (iter->started && cpumask_test_cpu(iter->cpu, iter->started))
2683 return;
2685 if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries)
2686 return;
2688 if (iter->started)
2689 cpumask_set_cpu(iter->cpu, iter->started);
2691 /* Don't print started cpu buffer for the first entry of the trace */
2692 if (iter->idx > 1)
2693 trace_seq_printf(s, "##### CPU %u buffer started ####\n",
2694 iter->cpu);
2697 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
2699 struct trace_array *tr = iter->tr;
2700 struct trace_seq *s = &iter->seq;
2701 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
2702 struct trace_entry *entry;
2703 struct trace_event *event;
2705 entry = iter->ent;
2707 test_cpu_buff_start(iter);
2709 event = ftrace_find_event(entry->type);
2711 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2712 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2713 trace_print_lat_context(iter);
2714 else
2715 trace_print_context(iter);
2718 if (trace_seq_has_overflowed(s))
2719 return TRACE_TYPE_PARTIAL_LINE;
2721 if (event)
2722 return event->funcs->trace(iter, sym_flags, event);
2724 trace_seq_printf(s, "Unknown type %d\n", entry->type);
2726 return trace_handle_return(s);
2729 static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
2731 struct trace_array *tr = iter->tr;
2732 struct trace_seq *s = &iter->seq;
2733 struct trace_entry *entry;
2734 struct trace_event *event;
2736 entry = iter->ent;
2738 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO)
2739 trace_seq_printf(s, "%d %d %llu ",
2740 entry->pid, iter->cpu, iter->ts);
2742 if (trace_seq_has_overflowed(s))
2743 return TRACE_TYPE_PARTIAL_LINE;
2745 event = ftrace_find_event(entry->type);
2746 if (event)
2747 return event->funcs->raw(iter, 0, event);
2749 trace_seq_printf(s, "%d ?\n", entry->type);
2751 return trace_handle_return(s);
2754 static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
2756 struct trace_array *tr = iter->tr;
2757 struct trace_seq *s = &iter->seq;
2758 unsigned char newline = '\n';
2759 struct trace_entry *entry;
2760 struct trace_event *event;
2762 entry = iter->ent;
2764 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2765 SEQ_PUT_HEX_FIELD(s, entry->pid);
2766 SEQ_PUT_HEX_FIELD(s, iter->cpu);
2767 SEQ_PUT_HEX_FIELD(s, iter->ts);
2768 if (trace_seq_has_overflowed(s))
2769 return TRACE_TYPE_PARTIAL_LINE;
2772 event = ftrace_find_event(entry->type);
2773 if (event) {
2774 enum print_line_t ret = event->funcs->hex(iter, 0, event);
2775 if (ret != TRACE_TYPE_HANDLED)
2776 return ret;
2779 SEQ_PUT_FIELD(s, newline);
2781 return trace_handle_return(s);
2784 static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
2786 struct trace_array *tr = iter->tr;
2787 struct trace_seq *s = &iter->seq;
2788 struct trace_entry *entry;
2789 struct trace_event *event;
2791 entry = iter->ent;
2793 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
2794 SEQ_PUT_FIELD(s, entry->pid);
2795 SEQ_PUT_FIELD(s, iter->cpu);
2796 SEQ_PUT_FIELD(s, iter->ts);
2797 if (trace_seq_has_overflowed(s))
2798 return TRACE_TYPE_PARTIAL_LINE;
2801 event = ftrace_find_event(entry->type);
2802 return event ? event->funcs->binary(iter, 0, event) :
2803 TRACE_TYPE_HANDLED;
2806 int trace_empty(struct trace_iterator *iter)
2808 struct ring_buffer_iter *buf_iter;
2809 int cpu;
2811 /* If we are looking at one CPU buffer, only check that one */
2812 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
2813 cpu = iter->cpu_file;
2814 buf_iter = trace_buffer_iter(iter, cpu);
2815 if (buf_iter) {
2816 if (!ring_buffer_iter_empty(buf_iter))
2817 return 0;
2818 } else {
2819 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2820 return 0;
2822 return 1;
2825 for_each_tracing_cpu(cpu) {
2826 buf_iter = trace_buffer_iter(iter, cpu);
2827 if (buf_iter) {
2828 if (!ring_buffer_iter_empty(buf_iter))
2829 return 0;
2830 } else {
2831 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2832 return 0;
2836 return 1;
2839 /* Called with trace_event_read_lock() held. */
2840 enum print_line_t print_trace_line(struct trace_iterator *iter)
2842 struct trace_array *tr = iter->tr;
2843 unsigned long trace_flags = tr->trace_flags;
2844 enum print_line_t ret;
2846 if (iter->lost_events) {
2847 trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
2848 iter->cpu, iter->lost_events);
2849 if (trace_seq_has_overflowed(&iter->seq))
2850 return TRACE_TYPE_PARTIAL_LINE;
2853 if (iter->trace && iter->trace->print_line) {
2854 ret = iter->trace->print_line(iter);
2855 if (ret != TRACE_TYPE_UNHANDLED)
2856 return ret;
2859 if (iter->ent->type == TRACE_BPUTS &&
2860 trace_flags & TRACE_ITER_PRINTK &&
2861 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2862 return trace_print_bputs_msg_only(iter);
2864 if (iter->ent->type == TRACE_BPRINT &&
2865 trace_flags & TRACE_ITER_PRINTK &&
2866 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2867 return trace_print_bprintk_msg_only(iter);
2869 if (iter->ent->type == TRACE_PRINT &&
2870 trace_flags & TRACE_ITER_PRINTK &&
2871 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2872 return trace_print_printk_msg_only(iter);
2874 if (trace_flags & TRACE_ITER_BIN)
2875 return print_bin_fmt(iter);
2877 if (trace_flags & TRACE_ITER_HEX)
2878 return print_hex_fmt(iter);
2880 if (trace_flags & TRACE_ITER_RAW)
2881 return print_raw_fmt(iter);
2883 return print_trace_fmt(iter);
2886 void trace_latency_header(struct seq_file *m)
2888 struct trace_iterator *iter = m->private;
2889 struct trace_array *tr = iter->tr;
2891 /* print nothing if the buffers are empty */
2892 if (trace_empty(iter))
2893 return;
2895 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2896 print_trace_header(m, iter);
2898 if (!(tr->trace_flags & TRACE_ITER_VERBOSE))
2899 print_lat_help_header(m);
2902 void trace_default_header(struct seq_file *m)
2904 struct trace_iterator *iter = m->private;
2905 struct trace_array *tr = iter->tr;
2906 unsigned long trace_flags = tr->trace_flags;
2908 if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
2909 return;
2911 if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
2912 /* print nothing if the buffers are empty */
2913 if (trace_empty(iter))
2914 return;
2915 print_trace_header(m, iter);
2916 if (!(trace_flags & TRACE_ITER_VERBOSE))
2917 print_lat_help_header(m);
2918 } else {
2919 if (!(trace_flags & TRACE_ITER_VERBOSE)) {
2920 if (trace_flags & TRACE_ITER_IRQ_INFO)
2921 print_func_help_header_irq(iter->trace_buffer, m);
2922 else
2923 print_func_help_header(iter->trace_buffer, m);
2928 static void test_ftrace_alive(struct seq_file *m)
2930 if (!ftrace_is_dead())
2931 return;
2932 seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n"
2933 "# MAY BE MISSING FUNCTION EVENTS\n");
2936 #ifdef CONFIG_TRACER_MAX_TRACE
2937 static void show_snapshot_main_help(struct seq_file *m)
2939 seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n"
2940 "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
2941 "# Takes a snapshot of the main buffer.\n"
2942 "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n"
2943 "# (Doesn't have to be '2' works with any number that\n"
2944 "# is not a '0' or '1')\n");
2947 static void show_snapshot_percpu_help(struct seq_file *m)
2949 seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n");
2950 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
2951 seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
2952 "# Takes a snapshot of the main buffer for this cpu.\n");
2953 #else
2954 seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n"
2955 "# Must use main snapshot file to allocate.\n");
2956 #endif
2957 seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n"
2958 "# (Doesn't have to be '2' works with any number that\n"
2959 "# is not a '0' or '1')\n");
2962 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
2964 if (iter->tr->allocated_snapshot)
2965 seq_puts(m, "#\n# * Snapshot is allocated *\n#\n");
2966 else
2967 seq_puts(m, "#\n# * Snapshot is freed *\n#\n");
2969 seq_puts(m, "# Snapshot commands:\n");
2970 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
2971 show_snapshot_main_help(m);
2972 else
2973 show_snapshot_percpu_help(m);
2975 #else
2976 /* Should never be called */
2977 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
2978 #endif
2980 static int s_show(struct seq_file *m, void *v)
2982 struct trace_iterator *iter = v;
2983 int ret;
2985 if (iter->ent == NULL) {
2986 if (iter->tr) {
2987 seq_printf(m, "# tracer: %s\n", iter->trace->name);
2988 seq_puts(m, "#\n");
2989 test_ftrace_alive(m);
2991 if (iter->snapshot && trace_empty(iter))
2992 print_snapshot_help(m, iter);
2993 else if (iter->trace && iter->trace->print_header)
2994 iter->trace->print_header(m);
2995 else
2996 trace_default_header(m);
2998 } else if (iter->leftover) {
3000 * If we filled the seq_file buffer earlier, we
3001 * want to just show it now.
3003 ret = trace_print_seq(m, &iter->seq);
3005 /* ret should this time be zero, but you never know */
3006 iter->leftover = ret;
3008 } else {
3009 print_trace_line(iter);
3010 ret = trace_print_seq(m, &iter->seq);
3012 * If we overflow the seq_file buffer, then it will
3013 * ask us for this data again at start up.
3014 * Use that instead.
3015 * ret is 0 if seq_file write succeeded.
3016 * -1 otherwise.
3018 iter->leftover = ret;
3021 return 0;
3025 * Should be used after trace_array_get(), trace_types_lock
3026 * ensures that i_cdev was already initialized.
3028 static inline int tracing_get_cpu(struct inode *inode)
3030 if (inode->i_cdev) /* See trace_create_cpu_file() */
3031 return (long)inode->i_cdev - 1;
3032 return RING_BUFFER_ALL_CPUS;
3035 static const struct seq_operations tracer_seq_ops = {
3036 .start = s_start,
3037 .next = s_next,
3038 .stop = s_stop,
3039 .show = s_show,
3042 static struct trace_iterator *
3043 __tracing_open(struct inode *inode, struct file *file, bool snapshot)
3045 struct trace_array *tr = inode->i_private;
3046 struct trace_iterator *iter;
3047 int cpu;
3049 if (tracing_disabled)
3050 return ERR_PTR(-ENODEV);
3052 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
3053 if (!iter)
3054 return ERR_PTR(-ENOMEM);
3056 iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter),
3057 GFP_KERNEL);
3058 if (!iter->buffer_iter)
3059 goto release;
3062 * We make a copy of the current tracer to avoid concurrent
3063 * changes on it while we are reading.
3065 mutex_lock(&trace_types_lock);
3066 iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL);
3067 if (!iter->trace)
3068 goto fail;
3070 *iter->trace = *tr->current_trace;
3072 if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL))
3073 goto fail;
3075 iter->tr = tr;
3077 #ifdef CONFIG_TRACER_MAX_TRACE
3078 /* Currently only the top directory has a snapshot */
3079 if (tr->current_trace->print_max || snapshot)
3080 iter->trace_buffer = &tr->max_buffer;
3081 else
3082 #endif
3083 iter->trace_buffer = &tr->trace_buffer;
3084 iter->snapshot = snapshot;
3085 iter->pos = -1;
3086 iter->cpu_file = tracing_get_cpu(inode);
3087 mutex_init(&iter->mutex);
3089 /* Notify the tracer early; before we stop tracing. */
3090 if (iter->trace && iter->trace->open)
3091 iter->trace->open(iter);
3093 /* Annotate start of buffers if we had overruns */
3094 if (ring_buffer_overruns(iter->trace_buffer->buffer))
3095 iter->iter_flags |= TRACE_FILE_ANNOTATE;
3097 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
3098 if (trace_clocks[tr->clock_id].in_ns)
3099 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
3101 /* stop the trace while dumping if we are not opening "snapshot" */
3102 if (!iter->snapshot)
3103 tracing_stop_tr(tr);
3105 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
3106 for_each_tracing_cpu(cpu) {
3107 iter->buffer_iter[cpu] =
3108 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3110 ring_buffer_read_prepare_sync();
3111 for_each_tracing_cpu(cpu) {
3112 ring_buffer_read_start(iter->buffer_iter[cpu]);
3113 tracing_iter_reset(iter, cpu);
3115 } else {
3116 cpu = iter->cpu_file;
3117 iter->buffer_iter[cpu] =
3118 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3119 ring_buffer_read_prepare_sync();
3120 ring_buffer_read_start(iter->buffer_iter[cpu]);
3121 tracing_iter_reset(iter, cpu);
3124 mutex_unlock(&trace_types_lock);
3126 return iter;
3128 fail:
3129 mutex_unlock(&trace_types_lock);
3130 kfree(iter->trace);
3131 kfree(iter->buffer_iter);
3132 release:
3133 seq_release_private(inode, file);
3134 return ERR_PTR(-ENOMEM);
3137 int tracing_open_generic(struct inode *inode, struct file *filp)
3139 if (tracing_disabled)
3140 return -ENODEV;
3142 filp->private_data = inode->i_private;
3143 return 0;
3146 bool tracing_is_disabled(void)
3148 return (tracing_disabled) ? true: false;
3152 * Open and update trace_array ref count.
3153 * Must have the current trace_array passed to it.
3155 static int tracing_open_generic_tr(struct inode *inode, struct file *filp)
3157 struct trace_array *tr = inode->i_private;
3159 if (tracing_disabled)
3160 return -ENODEV;
3162 if (trace_array_get(tr) < 0)
3163 return -ENODEV;
3165 filp->private_data = inode->i_private;
3167 return 0;
3170 static int tracing_release(struct inode *inode, struct file *file)
3172 struct trace_array *tr = inode->i_private;
3173 struct seq_file *m = file->private_data;
3174 struct trace_iterator *iter;
3175 int cpu;
3177 if (!(file->f_mode & FMODE_READ)) {
3178 trace_array_put(tr);
3179 return 0;
3182 /* Writes do not use seq_file */
3183 iter = m->private;
3184 mutex_lock(&trace_types_lock);
3186 for_each_tracing_cpu(cpu) {
3187 if (iter->buffer_iter[cpu])
3188 ring_buffer_read_finish(iter->buffer_iter[cpu]);
3191 if (iter->trace && iter->trace->close)
3192 iter->trace->close(iter);
3194 if (!iter->snapshot)
3195 /* reenable tracing if it was previously enabled */
3196 tracing_start_tr(tr);
3198 __trace_array_put(tr);
3200 mutex_unlock(&trace_types_lock);
3202 mutex_destroy(&iter->mutex);
3203 free_cpumask_var(iter->started);
3204 kfree(iter->trace);
3205 kfree(iter->buffer_iter);
3206 seq_release_private(inode, file);
3208 return 0;
3211 static int tracing_release_generic_tr(struct inode *inode, struct file *file)
3213 struct trace_array *tr = inode->i_private;
3215 trace_array_put(tr);
3216 return 0;
3219 static int tracing_single_release_tr(struct inode *inode, struct file *file)
3221 struct trace_array *tr = inode->i_private;
3223 trace_array_put(tr);
3225 return single_release(inode, file);
3228 static int tracing_open(struct inode *inode, struct file *file)
3230 struct trace_array *tr = inode->i_private;
3231 struct trace_iterator *iter;
3232 int ret = 0;
3234 if (trace_array_get(tr) < 0)
3235 return -ENODEV;
3237 /* If this file was open for write, then erase contents */
3238 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
3239 int cpu = tracing_get_cpu(inode);
3240 struct trace_buffer *trace_buf = &tr->trace_buffer;
3242 #ifdef CONFIG_TRACER_MAX_TRACE
3243 if (tr->current_trace->print_max)
3244 trace_buf = &tr->max_buffer;
3245 #endif
3247 if (cpu == RING_BUFFER_ALL_CPUS)
3248 tracing_reset_online_cpus(trace_buf);
3249 else
3250 tracing_reset(trace_buf, cpu);
3253 if (file->f_mode & FMODE_READ) {
3254 iter = __tracing_open(inode, file, false);
3255 if (IS_ERR(iter))
3256 ret = PTR_ERR(iter);
3257 else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
3258 iter->iter_flags |= TRACE_FILE_LAT_FMT;
3261 if (ret < 0)
3262 trace_array_put(tr);
3264 return ret;
3268 * Some tracers are not suitable for instance buffers.
3269 * A tracer is always available for the global array (toplevel)
3270 * or if it explicitly states that it is.
3272 static bool
3273 trace_ok_for_array(struct tracer *t, struct trace_array *tr)
3275 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances;
3278 /* Find the next tracer that this trace array may use */
3279 static struct tracer *
3280 get_tracer_for_array(struct trace_array *tr, struct tracer *t)
3282 while (t && !trace_ok_for_array(t, tr))
3283 t = t->next;
3285 return t;
3288 static void *
3289 t_next(struct seq_file *m, void *v, loff_t *pos)
3291 struct trace_array *tr = m->private;
3292 struct tracer *t = v;
3294 (*pos)++;
3296 if (t)
3297 t = get_tracer_for_array(tr, t->next);
3299 return t;
3302 static void *t_start(struct seq_file *m, loff_t *pos)
3304 struct trace_array *tr = m->private;
3305 struct tracer *t;
3306 loff_t l = 0;
3308 mutex_lock(&trace_types_lock);
3310 t = get_tracer_for_array(tr, trace_types);
3311 for (; t && l < *pos; t = t_next(m, t, &l))
3314 return t;
3317 static void t_stop(struct seq_file *m, void *p)
3319 mutex_unlock(&trace_types_lock);
3322 static int t_show(struct seq_file *m, void *v)
3324 struct tracer *t = v;
3326 if (!t)
3327 return 0;
3329 seq_puts(m, t->name);
3330 if (t->next)
3331 seq_putc(m, ' ');
3332 else
3333 seq_putc(m, '\n');
3335 return 0;
3338 static const struct seq_operations show_traces_seq_ops = {
3339 .start = t_start,
3340 .next = t_next,
3341 .stop = t_stop,
3342 .show = t_show,
3345 static int show_traces_open(struct inode *inode, struct file *file)
3347 struct trace_array *tr = inode->i_private;
3348 struct seq_file *m;
3349 int ret;
3351 if (tracing_disabled)
3352 return -ENODEV;
3354 ret = seq_open(file, &show_traces_seq_ops);
3355 if (ret)
3356 return ret;
3358 m = file->private_data;
3359 m->private = tr;
3361 return 0;
3364 static ssize_t
3365 tracing_write_stub(struct file *filp, const char __user *ubuf,
3366 size_t count, loff_t *ppos)
3368 return count;
3371 loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
3373 int ret;
3375 if (file->f_mode & FMODE_READ)
3376 ret = seq_lseek(file, offset, whence);
3377 else
3378 file->f_pos = ret = 0;
3380 return ret;
3383 static const struct file_operations tracing_fops = {
3384 .open = tracing_open,
3385 .read = seq_read,
3386 .write = tracing_write_stub,
3387 .llseek = tracing_lseek,
3388 .release = tracing_release,
3391 static const struct file_operations show_traces_fops = {
3392 .open = show_traces_open,
3393 .read = seq_read,
3394 .release = seq_release,
3395 .llseek = seq_lseek,
3398 static ssize_t
3399 tracing_cpumask_read(struct file *filp, char __user *ubuf,
3400 size_t count, loff_t *ppos)
3402 struct trace_array *tr = file_inode(filp)->i_private;
3403 char *mask_str;
3404 int len;
3406 len = snprintf(NULL, 0, "%*pb\n",
3407 cpumask_pr_args(tr->tracing_cpumask)) + 1;
3408 mask_str = kmalloc(len, GFP_KERNEL);
3409 if (!mask_str)
3410 return -ENOMEM;
3412 len = snprintf(mask_str, len, "%*pb\n",
3413 cpumask_pr_args(tr->tracing_cpumask));
3414 if (len >= count) {
3415 count = -EINVAL;
3416 goto out_err;
3418 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
3420 out_err:
3421 kfree(mask_str);
3423 return count;
3426 static ssize_t
3427 tracing_cpumask_write(struct file *filp, const char __user *ubuf,
3428 size_t count, loff_t *ppos)
3430 struct trace_array *tr = file_inode(filp)->i_private;
3431 cpumask_var_t tracing_cpumask_new;
3432 int err, cpu;
3434 if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL))
3435 return -ENOMEM;
3437 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new);
3438 if (err)
3439 goto err_unlock;
3441 local_irq_disable();
3442 arch_spin_lock(&tr->max_lock);
3443 for_each_tracing_cpu(cpu) {
3445 * Increase/decrease the disabled counter if we are
3446 * about to flip a bit in the cpumask:
3448 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3449 !cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3450 atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3451 ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu);
3453 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3454 cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3455 atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3456 ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu);
3459 arch_spin_unlock(&tr->max_lock);
3460 local_irq_enable();
3462 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
3463 free_cpumask_var(tracing_cpumask_new);
3465 return count;
3467 err_unlock:
3468 free_cpumask_var(tracing_cpumask_new);
3470 return err;
3473 static const struct file_operations tracing_cpumask_fops = {
3474 .open = tracing_open_generic_tr,
3475 .read = tracing_cpumask_read,
3476 .write = tracing_cpumask_write,
3477 .release = tracing_release_generic_tr,
3478 .llseek = generic_file_llseek,
3481 static int tracing_trace_options_show(struct seq_file *m, void *v)
3483 struct tracer_opt *trace_opts;
3484 struct trace_array *tr = m->private;
3485 u32 tracer_flags;
3486 int i;
3488 mutex_lock(&trace_types_lock);
3489 tracer_flags = tr->current_trace->flags->val;
3490 trace_opts = tr->current_trace->flags->opts;
3492 for (i = 0; trace_options[i]; i++) {
3493 if (tr->trace_flags & (1 << i))
3494 seq_printf(m, "%s\n", trace_options[i]);
3495 else
3496 seq_printf(m, "no%s\n", trace_options[i]);
3499 for (i = 0; trace_opts[i].name; i++) {
3500 if (tracer_flags & trace_opts[i].bit)
3501 seq_printf(m, "%s\n", trace_opts[i].name);
3502 else
3503 seq_printf(m, "no%s\n", trace_opts[i].name);
3505 mutex_unlock(&trace_types_lock);
3507 return 0;
3510 static int __set_tracer_option(struct trace_array *tr,
3511 struct tracer_flags *tracer_flags,
3512 struct tracer_opt *opts, int neg)
3514 struct tracer *trace = tr->current_trace;
3515 int ret;
3517 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg);
3518 if (ret)
3519 return ret;
3521 if (neg)
3522 tracer_flags->val &= ~opts->bit;
3523 else
3524 tracer_flags->val |= opts->bit;
3525 return 0;
3528 /* Try to assign a tracer specific option */
3529 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg)
3531 struct tracer *trace = tr->current_trace;
3532 struct tracer_flags *tracer_flags = trace->flags;
3533 struct tracer_opt *opts = NULL;
3534 int i;
3536 for (i = 0; tracer_flags->opts[i].name; i++) {
3537 opts = &tracer_flags->opts[i];
3539 if (strcmp(cmp, opts->name) == 0)
3540 return __set_tracer_option(tr, trace->flags, opts, neg);
3543 return -EINVAL;
3546 /* Some tracers require overwrite to stay enabled */
3547 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
3549 if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set)
3550 return -1;
3552 return 0;
3555 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled)
3557 /* do nothing if flag is already set */
3558 if (!!(tr->trace_flags & mask) == !!enabled)
3559 return 0;
3561 /* Give the tracer a chance to approve the change */
3562 if (tr->current_trace->flag_changed)
3563 if (tr->current_trace->flag_changed(tr, mask, !!enabled))
3564 return -EINVAL;
3566 if (enabled)
3567 tr->trace_flags |= mask;
3568 else
3569 tr->trace_flags &= ~mask;
3571 if (mask == TRACE_ITER_RECORD_CMD)
3572 trace_event_enable_cmd_record(enabled);
3574 if (mask == TRACE_ITER_OVERWRITE) {
3575 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled);
3576 #ifdef CONFIG_TRACER_MAX_TRACE
3577 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled);
3578 #endif
3581 if (mask == TRACE_ITER_PRINTK) {
3582 trace_printk_start_stop_comm(enabled);
3583 trace_printk_control(enabled);
3586 return 0;
3589 static int trace_set_options(struct trace_array *tr, char *option)
3591 char *cmp;
3592 int neg = 0;
3593 int ret = -ENODEV;
3594 int i;
3595 size_t orig_len = strlen(option);
3597 cmp = strstrip(option);
3599 if (strncmp(cmp, "no", 2) == 0) {
3600 neg = 1;
3601 cmp += 2;
3604 mutex_lock(&trace_types_lock);
3606 for (i = 0; trace_options[i]; i++) {
3607 if (strcmp(cmp, trace_options[i]) == 0) {
3608 ret = set_tracer_flag(tr, 1 << i, !neg);
3609 break;
3613 /* If no option could be set, test the specific tracer options */
3614 if (!trace_options[i])
3615 ret = set_tracer_option(tr, cmp, neg);
3617 mutex_unlock(&trace_types_lock);
3620 * If the first trailing whitespace is replaced with '\0' by strstrip,
3621 * turn it back into a space.
3623 if (orig_len > strlen(option))
3624 option[strlen(option)] = ' ';
3626 return ret;
3629 static void __init apply_trace_boot_options(void)
3631 char *buf = trace_boot_options_buf;
3632 char *option;
3634 while (true) {
3635 option = strsep(&buf, ",");
3637 if (!option)
3638 break;
3640 if (*option)
3641 trace_set_options(&global_trace, option);
3643 /* Put back the comma to allow this to be called again */
3644 if (buf)
3645 *(buf - 1) = ',';
3649 static ssize_t
3650 tracing_trace_options_write(struct file *filp, const char __user *ubuf,
3651 size_t cnt, loff_t *ppos)
3653 struct seq_file *m = filp->private_data;
3654 struct trace_array *tr = m->private;
3655 char buf[64];
3656 int ret;
3658 if (cnt >= sizeof(buf))
3659 return -EINVAL;
3661 if (copy_from_user(&buf, ubuf, cnt))
3662 return -EFAULT;
3664 buf[cnt] = 0;
3666 ret = trace_set_options(tr, buf);
3667 if (ret < 0)
3668 return ret;
3670 *ppos += cnt;
3672 return cnt;
3675 static int tracing_trace_options_open(struct inode *inode, struct file *file)
3677 struct trace_array *tr = inode->i_private;
3678 int ret;
3680 if (tracing_disabled)
3681 return -ENODEV;
3683 if (trace_array_get(tr) < 0)
3684 return -ENODEV;
3686 ret = single_open(file, tracing_trace_options_show, inode->i_private);
3687 if (ret < 0)
3688 trace_array_put(tr);
3690 return ret;
3693 static const struct file_operations tracing_iter_fops = {
3694 .open = tracing_trace_options_open,
3695 .read = seq_read,
3696 .llseek = seq_lseek,
3697 .release = tracing_single_release_tr,
3698 .write = tracing_trace_options_write,
3701 static const char readme_msg[] =
3702 "tracing mini-HOWTO:\n\n"
3703 "# echo 0 > tracing_on : quick way to disable tracing\n"
3704 "# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
3705 " Important files:\n"
3706 " trace\t\t\t- The static contents of the buffer\n"
3707 "\t\t\t To clear the buffer write into this file: echo > trace\n"
3708 " trace_pipe\t\t- A consuming read to see the contents of the buffer\n"
3709 " current_tracer\t- function and latency tracers\n"
3710 " available_tracers\t- list of configured tracers for current_tracer\n"
3711 " buffer_size_kb\t- view and modify size of per cpu buffer\n"
3712 " buffer_total_size_kb - view total size of all cpu buffers\n\n"
3713 " trace_clock\t\t-change the clock used to order events\n"
3714 " local: Per cpu clock but may not be synced across CPUs\n"
3715 " global: Synced across CPUs but slows tracing down.\n"
3716 " counter: Not a clock, but just an increment\n"
3717 " uptime: Jiffy counter from time of boot\n"
3718 " perf: Same clock that perf events use\n"
3719 #ifdef CONFIG_X86_64
3720 " x86-tsc: TSC cycle counter\n"
3721 #endif
3722 "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
3723 " tracing_cpumask\t- Limit which CPUs to trace\n"
3724 " instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
3725 "\t\t\t Remove sub-buffer with rmdir\n"
3726 " trace_options\t\t- Set format or modify how tracing happens\n"
3727 "\t\t\t Disable an option by adding a suffix 'no' to the\n"
3728 "\t\t\t option name\n"
3729 " saved_cmdlines_size\t- echo command number in here to store comm-pid list\n"
3730 #ifdef CONFIG_DYNAMIC_FTRACE
3731 "\n available_filter_functions - list of functions that can be filtered on\n"
3732 " set_ftrace_filter\t- echo function name in here to only trace these\n"
3733 "\t\t\t functions\n"
3734 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3735 "\t modules: Can select a group via module\n"
3736 "\t Format: :mod:<module-name>\n"
3737 "\t example: echo :mod:ext3 > set_ftrace_filter\n"
3738 "\t triggers: a command to perform when function is hit\n"
3739 "\t Format: <function>:<trigger>[:count]\n"
3740 "\t trigger: traceon, traceoff\n"
3741 "\t\t enable_event:<system>:<event>\n"
3742 "\t\t disable_event:<system>:<event>\n"
3743 #ifdef CONFIG_STACKTRACE
3744 "\t\t stacktrace\n"
3745 #endif
3746 #ifdef CONFIG_TRACER_SNAPSHOT
3747 "\t\t snapshot\n"
3748 #endif
3749 "\t\t dump\n"
3750 "\t\t cpudump\n"
3751 "\t example: echo do_fault:traceoff > set_ftrace_filter\n"
3752 "\t echo do_trap:traceoff:3 > set_ftrace_filter\n"
3753 "\t The first one will disable tracing every time do_fault is hit\n"
3754 "\t The second will disable tracing at most 3 times when do_trap is hit\n"
3755 "\t The first time do trap is hit and it disables tracing, the\n"
3756 "\t counter will decrement to 2. If tracing is already disabled,\n"
3757 "\t the counter will not decrement. It only decrements when the\n"
3758 "\t trigger did work\n"
3759 "\t To remove trigger without count:\n"
3760 "\t echo '!<function>:<trigger> > set_ftrace_filter\n"
3761 "\t To remove trigger with a count:\n"
3762 "\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
3763 " set_ftrace_notrace\t- echo function name in here to never trace.\n"
3764 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3765 "\t modules: Can select a group via module command :mod:\n"
3766 "\t Does not accept triggers\n"
3767 #endif /* CONFIG_DYNAMIC_FTRACE */
3768 #ifdef CONFIG_FUNCTION_TRACER
3769 " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
3770 "\t\t (function)\n"
3771 #endif
3772 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
3773 " set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
3774 " set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n"
3775 " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
3776 #endif
3777 #ifdef CONFIG_TRACER_SNAPSHOT
3778 "\n snapshot\t\t- Like 'trace' but shows the content of the static\n"
3779 "\t\t\t snapshot buffer. Read the contents for more\n"
3780 "\t\t\t information\n"
3781 #endif
3782 #ifdef CONFIG_STACK_TRACER
3783 " stack_trace\t\t- Shows the max stack trace when active\n"
3784 " stack_max_size\t- Shows current max stack size that was traced\n"
3785 "\t\t\t Write into this file to reset the max size (trigger a\n"
3786 "\t\t\t new trace)\n"
3787 #ifdef CONFIG_DYNAMIC_FTRACE
3788 " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
3789 "\t\t\t traces\n"
3790 #endif
3791 #endif /* CONFIG_STACK_TRACER */
3792 " events/\t\t- Directory containing all trace event subsystems:\n"
3793 " enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
3794 " events/<system>/\t- Directory containing all trace events for <system>:\n"
3795 " enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
3796 "\t\t\t events\n"
3797 " filter\t\t- If set, only events passing filter are traced\n"
3798 " events/<system>/<event>/\t- Directory containing control files for\n"
3799 "\t\t\t <event>:\n"
3800 " enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
3801 " filter\t\t- If set, only events passing filter are traced\n"
3802 " trigger\t\t- If set, a command to perform when event is hit\n"
3803 "\t Format: <trigger>[:count][if <filter>]\n"
3804 "\t trigger: traceon, traceoff\n"
3805 "\t enable_event:<system>:<event>\n"
3806 "\t disable_event:<system>:<event>\n"
3807 #ifdef CONFIG_STACKTRACE
3808 "\t\t stacktrace\n"
3809 #endif
3810 #ifdef CONFIG_TRACER_SNAPSHOT
3811 "\t\t snapshot\n"
3812 #endif
3813 "\t example: echo traceoff > events/block/block_unplug/trigger\n"
3814 "\t echo traceoff:3 > events/block/block_unplug/trigger\n"
3815 "\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
3816 "\t events/block/block_unplug/trigger\n"
3817 "\t The first disables tracing every time block_unplug is hit.\n"
3818 "\t The second disables tracing the first 3 times block_unplug is hit.\n"
3819 "\t The third enables the kmalloc event the first 3 times block_unplug\n"
3820 "\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
3821 "\t Like function triggers, the counter is only decremented if it\n"
3822 "\t enabled or disabled tracing.\n"
3823 "\t To remove a trigger without a count:\n"
3824 "\t echo '!<trigger> > <system>/<event>/trigger\n"
3825 "\t To remove a trigger with a count:\n"
3826 "\t echo '!<trigger>:0 > <system>/<event>/trigger\n"
3827 "\t Filters can be ignored when removing a trigger.\n"
3830 static ssize_t
3831 tracing_readme_read(struct file *filp, char __user *ubuf,
3832 size_t cnt, loff_t *ppos)
3834 return simple_read_from_buffer(ubuf, cnt, ppos,
3835 readme_msg, strlen(readme_msg));
3838 static const struct file_operations tracing_readme_fops = {
3839 .open = tracing_open_generic,
3840 .read = tracing_readme_read,
3841 .llseek = generic_file_llseek,
3844 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos)
3846 unsigned int *ptr = v;
3848 if (*pos || m->count)
3849 ptr++;
3851 (*pos)++;
3853 for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num];
3854 ptr++) {
3855 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP)
3856 continue;
3858 return ptr;
3861 return NULL;
3864 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos)
3866 void *v;
3867 loff_t l = 0;
3869 preempt_disable();
3870 arch_spin_lock(&trace_cmdline_lock);
3872 v = &savedcmd->map_cmdline_to_pid[0];
3873 while (l <= *pos) {
3874 v = saved_cmdlines_next(m, v, &l);
3875 if (!v)
3876 return NULL;
3879 return v;
3882 static void saved_cmdlines_stop(struct seq_file *m, void *v)
3884 arch_spin_unlock(&trace_cmdline_lock);
3885 preempt_enable();
3888 static int saved_cmdlines_show(struct seq_file *m, void *v)
3890 char buf[TASK_COMM_LEN];
3891 unsigned int *pid = v;
3893 __trace_find_cmdline(*pid, buf);
3894 seq_printf(m, "%d %s\n", *pid, buf);
3895 return 0;
3898 static const struct seq_operations tracing_saved_cmdlines_seq_ops = {
3899 .start = saved_cmdlines_start,
3900 .next = saved_cmdlines_next,
3901 .stop = saved_cmdlines_stop,
3902 .show = saved_cmdlines_show,
3905 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
3907 if (tracing_disabled)
3908 return -ENODEV;
3910 return seq_open(filp, &tracing_saved_cmdlines_seq_ops);
3913 static const struct file_operations tracing_saved_cmdlines_fops = {
3914 .open = tracing_saved_cmdlines_open,
3915 .read = seq_read,
3916 .llseek = seq_lseek,
3917 .release = seq_release,
3920 static ssize_t
3921 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
3922 size_t cnt, loff_t *ppos)
3924 char buf[64];
3925 int r;
3927 arch_spin_lock(&trace_cmdline_lock);
3928 r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num);
3929 arch_spin_unlock(&trace_cmdline_lock);
3931 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
3934 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s)
3936 kfree(s->saved_cmdlines);
3937 kfree(s->map_cmdline_to_pid);
3938 kfree(s);
3941 static int tracing_resize_saved_cmdlines(unsigned int val)
3943 struct saved_cmdlines_buffer *s, *savedcmd_temp;
3945 s = kmalloc(sizeof(*s), GFP_KERNEL);
3946 if (!s)
3947 return -ENOMEM;
3949 if (allocate_cmdlines_buffer(val, s) < 0) {
3950 kfree(s);
3951 return -ENOMEM;
3954 arch_spin_lock(&trace_cmdline_lock);
3955 savedcmd_temp = savedcmd;
3956 savedcmd = s;
3957 arch_spin_unlock(&trace_cmdline_lock);
3958 free_saved_cmdlines_buffer(savedcmd_temp);
3960 return 0;
3963 static ssize_t
3964 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
3965 size_t cnt, loff_t *ppos)
3967 unsigned long val;
3968 int ret;
3970 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
3971 if (ret)
3972 return ret;
3974 /* must have at least 1 entry or less than PID_MAX_DEFAULT */
3975 if (!val || val > PID_MAX_DEFAULT)
3976 return -EINVAL;
3978 ret = tracing_resize_saved_cmdlines((unsigned int)val);
3979 if (ret < 0)
3980 return ret;
3982 *ppos += cnt;
3984 return cnt;
3987 static const struct file_operations tracing_saved_cmdlines_size_fops = {
3988 .open = tracing_open_generic,
3989 .read = tracing_saved_cmdlines_size_read,
3990 .write = tracing_saved_cmdlines_size_write,
3993 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
3994 static union trace_enum_map_item *
3995 update_enum_map(union trace_enum_map_item *ptr)
3997 if (!ptr->map.enum_string) {
3998 if (ptr->tail.next) {
3999 ptr = ptr->tail.next;
4000 /* Set ptr to the next real item (skip head) */
4001 ptr++;
4002 } else
4003 return NULL;
4005 return ptr;
4008 static void *enum_map_next(struct seq_file *m, void *v, loff_t *pos)
4010 union trace_enum_map_item *ptr = v;
4013 * Paranoid! If ptr points to end, we don't want to increment past it.
4014 * This really should never happen.
4016 ptr = update_enum_map(ptr);
4017 if (WARN_ON_ONCE(!ptr))
4018 return NULL;
4020 ptr++;
4022 (*pos)++;
4024 ptr = update_enum_map(ptr);
4026 return ptr;
4029 static void *enum_map_start(struct seq_file *m, loff_t *pos)
4031 union trace_enum_map_item *v;
4032 loff_t l = 0;
4034 mutex_lock(&trace_enum_mutex);
4036 v = trace_enum_maps;
4037 if (v)
4038 v++;
4040 while (v && l < *pos) {
4041 v = enum_map_next(m, v, &l);
4044 return v;
4047 static void enum_map_stop(struct seq_file *m, void *v)
4049 mutex_unlock(&trace_enum_mutex);
4052 static int enum_map_show(struct seq_file *m, void *v)
4054 union trace_enum_map_item *ptr = v;
4056 seq_printf(m, "%s %ld (%s)\n",
4057 ptr->map.enum_string, ptr->map.enum_value,
4058 ptr->map.system);
4060 return 0;
4063 static const struct seq_operations tracing_enum_map_seq_ops = {
4064 .start = enum_map_start,
4065 .next = enum_map_next,
4066 .stop = enum_map_stop,
4067 .show = enum_map_show,
4070 static int tracing_enum_map_open(struct inode *inode, struct file *filp)
4072 if (tracing_disabled)
4073 return -ENODEV;
4075 return seq_open(filp, &tracing_enum_map_seq_ops);
4078 static const struct file_operations tracing_enum_map_fops = {
4079 .open = tracing_enum_map_open,
4080 .read = seq_read,
4081 .llseek = seq_lseek,
4082 .release = seq_release,
4085 static inline union trace_enum_map_item *
4086 trace_enum_jmp_to_tail(union trace_enum_map_item *ptr)
4088 /* Return tail of array given the head */
4089 return ptr + ptr->head.length + 1;
4092 static void
4093 trace_insert_enum_map_file(struct module *mod, struct trace_enum_map **start,
4094 int len)
4096 struct trace_enum_map **stop;
4097 struct trace_enum_map **map;
4098 union trace_enum_map_item *map_array;
4099 union trace_enum_map_item *ptr;
4101 stop = start + len;
4104 * The trace_enum_maps contains the map plus a head and tail item,
4105 * where the head holds the module and length of array, and the
4106 * tail holds a pointer to the next list.
4108 map_array = kmalloc(sizeof(*map_array) * (len + 2), GFP_KERNEL);
4109 if (!map_array) {
4110 pr_warning("Unable to allocate trace enum mapping\n");
4111 return;
4114 mutex_lock(&trace_enum_mutex);
4116 if (!trace_enum_maps)
4117 trace_enum_maps = map_array;
4118 else {
4119 ptr = trace_enum_maps;
4120 for (;;) {
4121 ptr = trace_enum_jmp_to_tail(ptr);
4122 if (!ptr->tail.next)
4123 break;
4124 ptr = ptr->tail.next;
4127 ptr->tail.next = map_array;
4129 map_array->head.mod = mod;
4130 map_array->head.length = len;
4131 map_array++;
4133 for (map = start; (unsigned long)map < (unsigned long)stop; map++) {
4134 map_array->map = **map;
4135 map_array++;
4137 memset(map_array, 0, sizeof(*map_array));
4139 mutex_unlock(&trace_enum_mutex);
4142 static void trace_create_enum_file(struct dentry *d_tracer)
4144 trace_create_file("enum_map", 0444, d_tracer,
4145 NULL, &tracing_enum_map_fops);
4148 #else /* CONFIG_TRACE_ENUM_MAP_FILE */
4149 static inline void trace_create_enum_file(struct dentry *d_tracer) { }
4150 static inline void trace_insert_enum_map_file(struct module *mod,
4151 struct trace_enum_map **start, int len) { }
4152 #endif /* !CONFIG_TRACE_ENUM_MAP_FILE */
4154 static void trace_insert_enum_map(struct module *mod,
4155 struct trace_enum_map **start, int len)
4157 struct trace_enum_map **map;
4159 if (len <= 0)
4160 return;
4162 map = start;
4164 trace_event_enum_update(map, len);
4166 trace_insert_enum_map_file(mod, start, len);
4169 static ssize_t
4170 tracing_set_trace_read(struct file *filp, char __user *ubuf,
4171 size_t cnt, loff_t *ppos)
4173 struct trace_array *tr = filp->private_data;
4174 char buf[MAX_TRACER_SIZE+2];
4175 int r;
4177 mutex_lock(&trace_types_lock);
4178 r = sprintf(buf, "%s\n", tr->current_trace->name);
4179 mutex_unlock(&trace_types_lock);
4181 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4184 int tracer_init(struct tracer *t, struct trace_array *tr)
4186 tracing_reset_online_cpus(&tr->trace_buffer);
4187 return t->init(tr);
4190 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val)
4192 int cpu;
4194 for_each_tracing_cpu(cpu)
4195 per_cpu_ptr(buf->data, cpu)->entries = val;
4198 #ifdef CONFIG_TRACER_MAX_TRACE
4199 /* resize @tr's buffer to the size of @size_tr's entries */
4200 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
4201 struct trace_buffer *size_buf, int cpu_id)
4203 int cpu, ret = 0;
4205 if (cpu_id == RING_BUFFER_ALL_CPUS) {
4206 for_each_tracing_cpu(cpu) {
4207 ret = ring_buffer_resize(trace_buf->buffer,
4208 per_cpu_ptr(size_buf->data, cpu)->entries, cpu);
4209 if (ret < 0)
4210 break;
4211 per_cpu_ptr(trace_buf->data, cpu)->entries =
4212 per_cpu_ptr(size_buf->data, cpu)->entries;
4214 } else {
4215 ret = ring_buffer_resize(trace_buf->buffer,
4216 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id);
4217 if (ret == 0)
4218 per_cpu_ptr(trace_buf->data, cpu_id)->entries =
4219 per_cpu_ptr(size_buf->data, cpu_id)->entries;
4222 return ret;
4224 #endif /* CONFIG_TRACER_MAX_TRACE */
4226 static int __tracing_resize_ring_buffer(struct trace_array *tr,
4227 unsigned long size, int cpu)
4229 int ret;
4232 * If kernel or user changes the size of the ring buffer
4233 * we use the size that was given, and we can forget about
4234 * expanding it later.
4236 ring_buffer_expanded = true;
4238 /* May be called before buffers are initialized */
4239 if (!tr->trace_buffer.buffer)
4240 return 0;
4242 ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu);
4243 if (ret < 0)
4244 return ret;
4246 #ifdef CONFIG_TRACER_MAX_TRACE
4247 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) ||
4248 !tr->current_trace->use_max_tr)
4249 goto out;
4251 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu);
4252 if (ret < 0) {
4253 int r = resize_buffer_duplicate_size(&tr->trace_buffer,
4254 &tr->trace_buffer, cpu);
4255 if (r < 0) {
4257 * AARGH! We are left with different
4258 * size max buffer!!!!
4259 * The max buffer is our "snapshot" buffer.
4260 * When a tracer needs a snapshot (one of the
4261 * latency tracers), it swaps the max buffer
4262 * with the saved snap shot. We succeeded to
4263 * update the size of the main buffer, but failed to
4264 * update the size of the max buffer. But when we tried
4265 * to reset the main buffer to the original size, we
4266 * failed there too. This is very unlikely to
4267 * happen, but if it does, warn and kill all
4268 * tracing.
4270 WARN_ON(1);
4271 tracing_disabled = 1;
4273 return ret;
4276 if (cpu == RING_BUFFER_ALL_CPUS)
4277 set_buffer_entries(&tr->max_buffer, size);
4278 else
4279 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size;
4281 out:
4282 #endif /* CONFIG_TRACER_MAX_TRACE */
4284 if (cpu == RING_BUFFER_ALL_CPUS)
4285 set_buffer_entries(&tr->trace_buffer, size);
4286 else
4287 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size;
4289 return ret;
4292 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
4293 unsigned long size, int cpu_id)
4295 int ret = size;
4297 mutex_lock(&trace_types_lock);
4299 if (cpu_id != RING_BUFFER_ALL_CPUS) {
4300 /* make sure, this cpu is enabled in the mask */
4301 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) {
4302 ret = -EINVAL;
4303 goto out;
4307 ret = __tracing_resize_ring_buffer(tr, size, cpu_id);
4308 if (ret < 0)
4309 ret = -ENOMEM;
4311 out:
4312 mutex_unlock(&trace_types_lock);
4314 return ret;
4319 * tracing_update_buffers - used by tracing facility to expand ring buffers
4321 * To save on memory when the tracing is never used on a system with it
4322 * configured in. The ring buffers are set to a minimum size. But once
4323 * a user starts to use the tracing facility, then they need to grow
4324 * to their default size.
4326 * This function is to be called when a tracer is about to be used.
4328 int tracing_update_buffers(void)
4330 int ret = 0;
4332 mutex_lock(&trace_types_lock);
4333 if (!ring_buffer_expanded)
4334 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size,
4335 RING_BUFFER_ALL_CPUS);
4336 mutex_unlock(&trace_types_lock);
4338 return ret;
4341 struct trace_option_dentry;
4343 static void
4344 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
4347 * Used to clear out the tracer before deletion of an instance.
4348 * Must have trace_types_lock held.
4350 static void tracing_set_nop(struct trace_array *tr)
4352 if (tr->current_trace == &nop_trace)
4353 return;
4355 tr->current_trace->enabled--;
4357 if (tr->current_trace->reset)
4358 tr->current_trace->reset(tr);
4360 tr->current_trace = &nop_trace;
4363 static void add_tracer_options(struct trace_array *tr, struct tracer *t)
4365 /* Only enable if the directory has been created already. */
4366 if (!tr->dir)
4367 return;
4369 create_trace_option_files(tr, t);
4372 static int tracing_set_tracer(struct trace_array *tr, const char *buf)
4374 struct tracer *t;
4375 #ifdef CONFIG_TRACER_MAX_TRACE
4376 bool had_max_tr;
4377 #endif
4378 int ret = 0;
4380 mutex_lock(&trace_types_lock);
4382 if (!ring_buffer_expanded) {
4383 ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
4384 RING_BUFFER_ALL_CPUS);
4385 if (ret < 0)
4386 goto out;
4387 ret = 0;
4390 for (t = trace_types; t; t = t->next) {
4391 if (strcmp(t->name, buf) == 0)
4392 break;
4394 if (!t) {
4395 ret = -EINVAL;
4396 goto out;
4398 if (t == tr->current_trace)
4399 goto out;
4401 /* Some tracers are only allowed for the top level buffer */
4402 if (!trace_ok_for_array(t, tr)) {
4403 ret = -EINVAL;
4404 goto out;
4407 /* If trace pipe files are being read, we can't change the tracer */
4408 if (tr->current_trace->ref) {
4409 ret = -EBUSY;
4410 goto out;
4413 trace_branch_disable();
4415 tr->current_trace->enabled--;
4417 if (tr->current_trace->reset)
4418 tr->current_trace->reset(tr);
4420 /* Current trace needs to be nop_trace before synchronize_sched */
4421 tr->current_trace = &nop_trace;
4423 #ifdef CONFIG_TRACER_MAX_TRACE
4424 had_max_tr = tr->allocated_snapshot;
4426 if (had_max_tr && !t->use_max_tr) {
4428 * We need to make sure that the update_max_tr sees that
4429 * current_trace changed to nop_trace to keep it from
4430 * swapping the buffers after we resize it.
4431 * The update_max_tr is called from interrupts disabled
4432 * so a synchronized_sched() is sufficient.
4434 synchronize_sched();
4435 free_snapshot(tr);
4437 #endif
4439 #ifdef CONFIG_TRACER_MAX_TRACE
4440 if (t->use_max_tr && !had_max_tr) {
4441 ret = alloc_snapshot(tr);
4442 if (ret < 0)
4443 goto out;
4445 #endif
4447 if (t->init) {
4448 ret = tracer_init(t, tr);
4449 if (ret)
4450 goto out;
4453 tr->current_trace = t;
4454 tr->current_trace->enabled++;
4455 trace_branch_enable(tr);
4456 out:
4457 mutex_unlock(&trace_types_lock);
4459 return ret;
4462 static ssize_t
4463 tracing_set_trace_write(struct file *filp, const char __user *ubuf,
4464 size_t cnt, loff_t *ppos)
4466 struct trace_array *tr = filp->private_data;
4467 char buf[MAX_TRACER_SIZE+1];
4468 int i;
4469 size_t ret;
4470 int err;
4472 ret = cnt;
4474 if (cnt > MAX_TRACER_SIZE)
4475 cnt = MAX_TRACER_SIZE;
4477 if (copy_from_user(&buf, ubuf, cnt))
4478 return -EFAULT;
4480 buf[cnt] = 0;
4482 /* strip ending whitespace. */
4483 for (i = cnt - 1; i > 0 && isspace(buf[i]); i--)
4484 buf[i] = 0;
4486 err = tracing_set_tracer(tr, buf);
4487 if (err)
4488 return err;
4490 *ppos += ret;
4492 return ret;
4495 static ssize_t
4496 tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
4497 size_t cnt, loff_t *ppos)
4499 char buf[64];
4500 int r;
4502 r = snprintf(buf, sizeof(buf), "%ld\n",
4503 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
4504 if (r > sizeof(buf))
4505 r = sizeof(buf);
4506 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4509 static ssize_t
4510 tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
4511 size_t cnt, loff_t *ppos)
4513 unsigned long val;
4514 int ret;
4516 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4517 if (ret)
4518 return ret;
4520 *ptr = val * 1000;
4522 return cnt;
4525 static ssize_t
4526 tracing_thresh_read(struct file *filp, char __user *ubuf,
4527 size_t cnt, loff_t *ppos)
4529 return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos);
4532 static ssize_t
4533 tracing_thresh_write(struct file *filp, const char __user *ubuf,
4534 size_t cnt, loff_t *ppos)
4536 struct trace_array *tr = filp->private_data;
4537 int ret;
4539 mutex_lock(&trace_types_lock);
4540 ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos);
4541 if (ret < 0)
4542 goto out;
4544 if (tr->current_trace->update_thresh) {
4545 ret = tr->current_trace->update_thresh(tr);
4546 if (ret < 0)
4547 goto out;
4550 ret = cnt;
4551 out:
4552 mutex_unlock(&trace_types_lock);
4554 return ret;
4557 #ifdef CONFIG_TRACER_MAX_TRACE
4559 static ssize_t
4560 tracing_max_lat_read(struct file *filp, char __user *ubuf,
4561 size_t cnt, loff_t *ppos)
4563 return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos);
4566 static ssize_t
4567 tracing_max_lat_write(struct file *filp, const char __user *ubuf,
4568 size_t cnt, loff_t *ppos)
4570 return tracing_nsecs_write(filp->private_data, ubuf, cnt, ppos);
4573 #endif
4575 static int tracing_open_pipe(struct inode *inode, struct file *filp)
4577 struct trace_array *tr = inode->i_private;
4578 struct trace_iterator *iter;
4579 int ret = 0;
4581 if (tracing_disabled)
4582 return -ENODEV;
4584 if (trace_array_get(tr) < 0)
4585 return -ENODEV;
4587 mutex_lock(&trace_types_lock);
4589 /* create a buffer to store the information to pass to userspace */
4590 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
4591 if (!iter) {
4592 ret = -ENOMEM;
4593 __trace_array_put(tr);
4594 goto out;
4597 trace_seq_init(&iter->seq);
4598 iter->trace = tr->current_trace;
4600 if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) {
4601 ret = -ENOMEM;
4602 goto fail;
4605 /* trace pipe does not show start of buffer */
4606 cpumask_setall(iter->started);
4608 if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
4609 iter->iter_flags |= TRACE_FILE_LAT_FMT;
4611 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
4612 if (trace_clocks[tr->clock_id].in_ns)
4613 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
4615 iter->tr = tr;
4616 iter->trace_buffer = &tr->trace_buffer;
4617 iter->cpu_file = tracing_get_cpu(inode);
4618 mutex_init(&iter->mutex);
4619 filp->private_data = iter;
4621 if (iter->trace->pipe_open)
4622 iter->trace->pipe_open(iter);
4624 nonseekable_open(inode, filp);
4626 tr->current_trace->ref++;
4627 out:
4628 mutex_unlock(&trace_types_lock);
4629 return ret;
4631 fail:
4632 kfree(iter->trace);
4633 kfree(iter);
4634 __trace_array_put(tr);
4635 mutex_unlock(&trace_types_lock);
4636 return ret;
4639 static int tracing_release_pipe(struct inode *inode, struct file *file)
4641 struct trace_iterator *iter = file->private_data;
4642 struct trace_array *tr = inode->i_private;
4644 mutex_lock(&trace_types_lock);
4646 tr->current_trace->ref--;
4648 if (iter->trace->pipe_close)
4649 iter->trace->pipe_close(iter);
4651 mutex_unlock(&trace_types_lock);
4653 free_cpumask_var(iter->started);
4654 mutex_destroy(&iter->mutex);
4655 kfree(iter);
4657 trace_array_put(tr);
4659 return 0;
4662 static unsigned int
4663 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table)
4665 struct trace_array *tr = iter->tr;
4667 /* Iterators are static, they should be filled or empty */
4668 if (trace_buffer_iter(iter, iter->cpu_file))
4669 return POLLIN | POLLRDNORM;
4671 if (tr->trace_flags & TRACE_ITER_BLOCK)
4673 * Always select as readable when in blocking mode
4675 return POLLIN | POLLRDNORM;
4676 else
4677 return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file,
4678 filp, poll_table);
4681 static unsigned int
4682 tracing_poll_pipe(struct file *filp, poll_table *poll_table)
4684 struct trace_iterator *iter = filp->private_data;
4686 return trace_poll(iter, filp, poll_table);
4689 /* Must be called with iter->mutex held. */
4690 static int tracing_wait_pipe(struct file *filp)
4692 struct trace_iterator *iter = filp->private_data;
4693 int ret;
4695 while (trace_empty(iter)) {
4697 if ((filp->f_flags & O_NONBLOCK)) {
4698 return -EAGAIN;
4702 * We block until we read something and tracing is disabled.
4703 * We still block if tracing is disabled, but we have never
4704 * read anything. This allows a user to cat this file, and
4705 * then enable tracing. But after we have read something,
4706 * we give an EOF when tracing is again disabled.
4708 * iter->pos will be 0 if we haven't read anything.
4710 if (!tracer_tracing_is_on(iter->tr) && iter->pos)
4711 break;
4713 mutex_unlock(&iter->mutex);
4715 ret = wait_on_pipe(iter, false);
4717 mutex_lock(&iter->mutex);
4719 if (ret)
4720 return ret;
4723 return 1;
4727 * Consumer reader.
4729 static ssize_t
4730 tracing_read_pipe(struct file *filp, char __user *ubuf,
4731 size_t cnt, loff_t *ppos)
4733 struct trace_iterator *iter = filp->private_data;
4734 ssize_t sret;
4737 * Avoid more than one consumer on a single file descriptor
4738 * This is just a matter of traces coherency, the ring buffer itself
4739 * is protected.
4741 mutex_lock(&iter->mutex);
4743 /* return any leftover data */
4744 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4745 if (sret != -EBUSY)
4746 goto out;
4748 trace_seq_init(&iter->seq);
4750 if (iter->trace->read) {
4751 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
4752 if (sret)
4753 goto out;
4756 waitagain:
4757 sret = tracing_wait_pipe(filp);
4758 if (sret <= 0)
4759 goto out;
4761 /* stop when tracing is finished */
4762 if (trace_empty(iter)) {
4763 sret = 0;
4764 goto out;
4767 if (cnt >= PAGE_SIZE)
4768 cnt = PAGE_SIZE - 1;
4770 /* reset all but tr, trace, and overruns */
4771 memset(&iter->seq, 0,
4772 sizeof(struct trace_iterator) -
4773 offsetof(struct trace_iterator, seq));
4774 cpumask_clear(iter->started);
4775 iter->pos = -1;
4777 trace_event_read_lock();
4778 trace_access_lock(iter->cpu_file);
4779 while (trace_find_next_entry_inc(iter) != NULL) {
4780 enum print_line_t ret;
4781 int save_len = iter->seq.seq.len;
4783 ret = print_trace_line(iter);
4784 if (ret == TRACE_TYPE_PARTIAL_LINE) {
4785 /* don't print partial lines */
4786 iter->seq.seq.len = save_len;
4787 break;
4789 if (ret != TRACE_TYPE_NO_CONSUME)
4790 trace_consume(iter);
4792 if (trace_seq_used(&iter->seq) >= cnt)
4793 break;
4796 * Setting the full flag means we reached the trace_seq buffer
4797 * size and we should leave by partial output condition above.
4798 * One of the trace_seq_* functions is not used properly.
4800 WARN_ONCE(iter->seq.full, "full flag set for trace type %d",
4801 iter->ent->type);
4803 trace_access_unlock(iter->cpu_file);
4804 trace_event_read_unlock();
4806 /* Now copy what we have to the user */
4807 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4808 if (iter->seq.seq.readpos >= trace_seq_used(&iter->seq))
4809 trace_seq_init(&iter->seq);
4812 * If there was nothing to send to user, in spite of consuming trace
4813 * entries, go back to wait for more entries.
4815 if (sret == -EBUSY)
4816 goto waitagain;
4818 out:
4819 mutex_unlock(&iter->mutex);
4821 return sret;
4824 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
4825 unsigned int idx)
4827 __free_page(spd->pages[idx]);
4830 static const struct pipe_buf_operations tracing_pipe_buf_ops = {
4831 .can_merge = 0,
4832 .confirm = generic_pipe_buf_confirm,
4833 .release = generic_pipe_buf_release,
4834 .steal = generic_pipe_buf_steal,
4835 .get = generic_pipe_buf_get,
4838 static size_t
4839 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
4841 size_t count;
4842 int save_len;
4843 int ret;
4845 /* Seq buffer is page-sized, exactly what we need. */
4846 for (;;) {
4847 save_len = iter->seq.seq.len;
4848 ret = print_trace_line(iter);
4850 if (trace_seq_has_overflowed(&iter->seq)) {
4851 iter->seq.seq.len = save_len;
4852 break;
4856 * This should not be hit, because it should only
4857 * be set if the iter->seq overflowed. But check it
4858 * anyway to be safe.
4860 if (ret == TRACE_TYPE_PARTIAL_LINE) {
4861 iter->seq.seq.len = save_len;
4862 break;
4865 count = trace_seq_used(&iter->seq) - save_len;
4866 if (rem < count) {
4867 rem = 0;
4868 iter->seq.seq.len = save_len;
4869 break;
4872 if (ret != TRACE_TYPE_NO_CONSUME)
4873 trace_consume(iter);
4874 rem -= count;
4875 if (!trace_find_next_entry_inc(iter)) {
4876 rem = 0;
4877 iter->ent = NULL;
4878 break;
4882 return rem;
4885 static ssize_t tracing_splice_read_pipe(struct file *filp,
4886 loff_t *ppos,
4887 struct pipe_inode_info *pipe,
4888 size_t len,
4889 unsigned int flags)
4891 struct page *pages_def[PIPE_DEF_BUFFERS];
4892 struct partial_page partial_def[PIPE_DEF_BUFFERS];
4893 struct trace_iterator *iter = filp->private_data;
4894 struct splice_pipe_desc spd = {
4895 .pages = pages_def,
4896 .partial = partial_def,
4897 .nr_pages = 0, /* This gets updated below. */
4898 .nr_pages_max = PIPE_DEF_BUFFERS,
4899 .flags = flags,
4900 .ops = &tracing_pipe_buf_ops,
4901 .spd_release = tracing_spd_release_pipe,
4903 ssize_t ret;
4904 size_t rem;
4905 unsigned int i;
4907 if (splice_grow_spd(pipe, &spd))
4908 return -ENOMEM;
4910 mutex_lock(&iter->mutex);
4912 if (iter->trace->splice_read) {
4913 ret = iter->trace->splice_read(iter, filp,
4914 ppos, pipe, len, flags);
4915 if (ret)
4916 goto out_err;
4919 ret = tracing_wait_pipe(filp);
4920 if (ret <= 0)
4921 goto out_err;
4923 if (!iter->ent && !trace_find_next_entry_inc(iter)) {
4924 ret = -EFAULT;
4925 goto out_err;
4928 trace_event_read_lock();
4929 trace_access_lock(iter->cpu_file);
4931 /* Fill as many pages as possible. */
4932 for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) {
4933 spd.pages[i] = alloc_page(GFP_KERNEL);
4934 if (!spd.pages[i])
4935 break;
4937 rem = tracing_fill_pipe_page(rem, iter);
4939 /* Copy the data into the page, so we can start over. */
4940 ret = trace_seq_to_buffer(&iter->seq,
4941 page_address(spd.pages[i]),
4942 trace_seq_used(&iter->seq));
4943 if (ret < 0) {
4944 __free_page(spd.pages[i]);
4945 break;
4947 spd.partial[i].offset = 0;
4948 spd.partial[i].len = trace_seq_used(&iter->seq);
4950 trace_seq_init(&iter->seq);
4953 trace_access_unlock(iter->cpu_file);
4954 trace_event_read_unlock();
4955 mutex_unlock(&iter->mutex);
4957 spd.nr_pages = i;
4959 if (i)
4960 ret = splice_to_pipe(pipe, &spd);
4961 else
4962 ret = 0;
4963 out:
4964 splice_shrink_spd(&spd);
4965 return ret;
4967 out_err:
4968 mutex_unlock(&iter->mutex);
4969 goto out;
4972 static ssize_t
4973 tracing_entries_read(struct file *filp, char __user *ubuf,
4974 size_t cnt, loff_t *ppos)
4976 struct inode *inode = file_inode(filp);
4977 struct trace_array *tr = inode->i_private;
4978 int cpu = tracing_get_cpu(inode);
4979 char buf[64];
4980 int r = 0;
4981 ssize_t ret;
4983 mutex_lock(&trace_types_lock);
4985 if (cpu == RING_BUFFER_ALL_CPUS) {
4986 int cpu, buf_size_same;
4987 unsigned long size;
4989 size = 0;
4990 buf_size_same = 1;
4991 /* check if all cpu sizes are same */
4992 for_each_tracing_cpu(cpu) {
4993 /* fill in the size from first enabled cpu */
4994 if (size == 0)
4995 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries;
4996 if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) {
4997 buf_size_same = 0;
4998 break;
5002 if (buf_size_same) {
5003 if (!ring_buffer_expanded)
5004 r = sprintf(buf, "%lu (expanded: %lu)\n",
5005 size >> 10,
5006 trace_buf_size >> 10);
5007 else
5008 r = sprintf(buf, "%lu\n", size >> 10);
5009 } else
5010 r = sprintf(buf, "X\n");
5011 } else
5012 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10);
5014 mutex_unlock(&trace_types_lock);
5016 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5017 return ret;
5020 static ssize_t
5021 tracing_entries_write(struct file *filp, const char __user *ubuf,
5022 size_t cnt, loff_t *ppos)
5024 struct inode *inode = file_inode(filp);
5025 struct trace_array *tr = inode->i_private;
5026 unsigned long val;
5027 int ret;
5029 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5030 if (ret)
5031 return ret;
5033 /* must have at least 1 entry */
5034 if (!val)
5035 return -EINVAL;
5037 /* value is in KB */
5038 val <<= 10;
5039 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
5040 if (ret < 0)
5041 return ret;
5043 *ppos += cnt;
5045 return cnt;
5048 static ssize_t
5049 tracing_total_entries_read(struct file *filp, char __user *ubuf,
5050 size_t cnt, loff_t *ppos)
5052 struct trace_array *tr = filp->private_data;
5053 char buf[64];
5054 int r, cpu;
5055 unsigned long size = 0, expanded_size = 0;
5057 mutex_lock(&trace_types_lock);
5058 for_each_tracing_cpu(cpu) {
5059 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10;
5060 if (!ring_buffer_expanded)
5061 expanded_size += trace_buf_size >> 10;
5063 if (ring_buffer_expanded)
5064 r = sprintf(buf, "%lu\n", size);
5065 else
5066 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
5067 mutex_unlock(&trace_types_lock);
5069 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5072 static ssize_t
5073 tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
5074 size_t cnt, loff_t *ppos)
5077 * There is no need to read what the user has written, this function
5078 * is just to make sure that there is no error when "echo" is used
5081 *ppos += cnt;
5083 return cnt;
5086 static int
5087 tracing_free_buffer_release(struct inode *inode, struct file *filp)
5089 struct trace_array *tr = inode->i_private;
5091 /* disable tracing ? */
5092 if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE)
5093 tracer_tracing_off(tr);
5094 /* resize the ring buffer to 0 */
5095 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
5097 trace_array_put(tr);
5099 return 0;
5102 static ssize_t
5103 tracing_mark_write(struct file *filp, const char __user *ubuf,
5104 size_t cnt, loff_t *fpos)
5106 unsigned long addr = (unsigned long)ubuf;
5107 struct trace_array *tr = filp->private_data;
5108 struct ring_buffer_event *event;
5109 struct ring_buffer *buffer;
5110 struct print_entry *entry;
5111 unsigned long irq_flags;
5112 struct page *pages[2];
5113 void *map_page[2];
5114 int nr_pages = 1;
5115 ssize_t written;
5116 int offset;
5117 int size;
5118 int len;
5119 int ret;
5120 int i;
5122 if (tracing_disabled)
5123 return -EINVAL;
5125 if (!(tr->trace_flags & TRACE_ITER_MARKERS))
5126 return -EINVAL;
5128 if (cnt > TRACE_BUF_SIZE)
5129 cnt = TRACE_BUF_SIZE;
5132 * Userspace is injecting traces into the kernel trace buffer.
5133 * We want to be as non intrusive as possible.
5134 * To do so, we do not want to allocate any special buffers
5135 * or take any locks, but instead write the userspace data
5136 * straight into the ring buffer.
5138 * First we need to pin the userspace buffer into memory,
5139 * which, most likely it is, because it just referenced it.
5140 * But there's no guarantee that it is. By using get_user_pages_fast()
5141 * and kmap_atomic/kunmap_atomic() we can get access to the
5142 * pages directly. We then write the data directly into the
5143 * ring buffer.
5145 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
5147 /* check if we cross pages */
5148 if ((addr & PAGE_MASK) != ((addr + cnt) & PAGE_MASK))
5149 nr_pages = 2;
5151 offset = addr & (PAGE_SIZE - 1);
5152 addr &= PAGE_MASK;
5154 ret = get_user_pages_fast(addr, nr_pages, 0, pages);
5155 if (ret < nr_pages) {
5156 while (--ret >= 0)
5157 put_page(pages[ret]);
5158 written = -EFAULT;
5159 goto out;
5162 for (i = 0; i < nr_pages; i++)
5163 map_page[i] = kmap_atomic(pages[i]);
5165 local_save_flags(irq_flags);
5166 size = sizeof(*entry) + cnt + 2; /* possible \n added */
5167 buffer = tr->trace_buffer.buffer;
5168 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
5169 irq_flags, preempt_count());
5170 if (!event) {
5171 /* Ring buffer disabled, return as if not open for write */
5172 written = -EBADF;
5173 goto out_unlock;
5176 entry = ring_buffer_event_data(event);
5177 entry->ip = _THIS_IP_;
5179 if (nr_pages == 2) {
5180 len = PAGE_SIZE - offset;
5181 memcpy(&entry->buf, map_page[0] + offset, len);
5182 memcpy(&entry->buf[len], map_page[1], cnt - len);
5183 } else
5184 memcpy(&entry->buf, map_page[0] + offset, cnt);
5186 if (entry->buf[cnt - 1] != '\n') {
5187 entry->buf[cnt] = '\n';
5188 entry->buf[cnt + 1] = '\0';
5189 } else
5190 entry->buf[cnt] = '\0';
5192 __buffer_unlock_commit(buffer, event);
5194 written = cnt;
5196 *fpos += written;
5198 out_unlock:
5199 for (i = nr_pages - 1; i >= 0; i--) {
5200 kunmap_atomic(map_page[i]);
5201 put_page(pages[i]);
5203 out:
5204 return written;
5207 static int tracing_clock_show(struct seq_file *m, void *v)
5209 struct trace_array *tr = m->private;
5210 int i;
5212 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++)
5213 seq_printf(m,
5214 "%s%s%s%s", i ? " " : "",
5215 i == tr->clock_id ? "[" : "", trace_clocks[i].name,
5216 i == tr->clock_id ? "]" : "");
5217 seq_putc(m, '\n');
5219 return 0;
5222 static int tracing_set_clock(struct trace_array *tr, const char *clockstr)
5224 int i;
5226 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) {
5227 if (strcmp(trace_clocks[i].name, clockstr) == 0)
5228 break;
5230 if (i == ARRAY_SIZE(trace_clocks))
5231 return -EINVAL;
5233 mutex_lock(&trace_types_lock);
5235 tr->clock_id = i;
5237 ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func);
5240 * New clock may not be consistent with the previous clock.
5241 * Reset the buffer so that it doesn't have incomparable timestamps.
5243 tracing_reset_online_cpus(&tr->trace_buffer);
5245 #ifdef CONFIG_TRACER_MAX_TRACE
5246 if (tr->max_buffer.buffer)
5247 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
5248 tracing_reset_online_cpus(&tr->max_buffer);
5249 #endif
5251 mutex_unlock(&trace_types_lock);
5253 return 0;
5256 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
5257 size_t cnt, loff_t *fpos)
5259 struct seq_file *m = filp->private_data;
5260 struct trace_array *tr = m->private;
5261 char buf[64];
5262 const char *clockstr;
5263 int ret;
5265 if (cnt >= sizeof(buf))
5266 return -EINVAL;
5268 if (copy_from_user(&buf, ubuf, cnt))
5269 return -EFAULT;
5271 buf[cnt] = 0;
5273 clockstr = strstrip(buf);
5275 ret = tracing_set_clock(tr, clockstr);
5276 if (ret)
5277 return ret;
5279 *fpos += cnt;
5281 return cnt;
5284 static int tracing_clock_open(struct inode *inode, struct file *file)
5286 struct trace_array *tr = inode->i_private;
5287 int ret;
5289 if (tracing_disabled)
5290 return -ENODEV;
5292 if (trace_array_get(tr))
5293 return -ENODEV;
5295 ret = single_open(file, tracing_clock_show, inode->i_private);
5296 if (ret < 0)
5297 trace_array_put(tr);
5299 return ret;
5302 struct ftrace_buffer_info {
5303 struct trace_iterator iter;
5304 void *spare;
5305 unsigned int read;
5308 #ifdef CONFIG_TRACER_SNAPSHOT
5309 static int tracing_snapshot_open(struct inode *inode, struct file *file)
5311 struct trace_array *tr = inode->i_private;
5312 struct trace_iterator *iter;
5313 struct seq_file *m;
5314 int ret = 0;
5316 if (trace_array_get(tr) < 0)
5317 return -ENODEV;
5319 if (file->f_mode & FMODE_READ) {
5320 iter = __tracing_open(inode, file, true);
5321 if (IS_ERR(iter))
5322 ret = PTR_ERR(iter);
5323 } else {
5324 /* Writes still need the seq_file to hold the private data */
5325 ret = -ENOMEM;
5326 m = kzalloc(sizeof(*m), GFP_KERNEL);
5327 if (!m)
5328 goto out;
5329 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
5330 if (!iter) {
5331 kfree(m);
5332 goto out;
5334 ret = 0;
5336 iter->tr = tr;
5337 iter->trace_buffer = &tr->max_buffer;
5338 iter->cpu_file = tracing_get_cpu(inode);
5339 m->private = iter;
5340 file->private_data = m;
5342 out:
5343 if (ret < 0)
5344 trace_array_put(tr);
5346 return ret;
5349 static ssize_t
5350 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
5351 loff_t *ppos)
5353 struct seq_file *m = filp->private_data;
5354 struct trace_iterator *iter = m->private;
5355 struct trace_array *tr = iter->tr;
5356 unsigned long val;
5357 int ret;
5359 ret = tracing_update_buffers();
5360 if (ret < 0)
5361 return ret;
5363 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5364 if (ret)
5365 return ret;
5367 mutex_lock(&trace_types_lock);
5369 if (tr->current_trace->use_max_tr) {
5370 ret = -EBUSY;
5371 goto out;
5374 switch (val) {
5375 case 0:
5376 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5377 ret = -EINVAL;
5378 break;
5380 if (tr->allocated_snapshot)
5381 free_snapshot(tr);
5382 break;
5383 case 1:
5384 /* Only allow per-cpu swap if the ring buffer supports it */
5385 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP
5386 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5387 ret = -EINVAL;
5388 break;
5390 #endif
5391 if (!tr->allocated_snapshot) {
5392 ret = alloc_snapshot(tr);
5393 if (ret < 0)
5394 break;
5396 local_irq_disable();
5397 /* Now, we're going to swap */
5398 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5399 update_max_tr(tr, current, smp_processor_id());
5400 else
5401 update_max_tr_single(tr, current, iter->cpu_file);
5402 local_irq_enable();
5403 break;
5404 default:
5405 if (tr->allocated_snapshot) {
5406 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5407 tracing_reset_online_cpus(&tr->max_buffer);
5408 else
5409 tracing_reset(&tr->max_buffer, iter->cpu_file);
5411 break;
5414 if (ret >= 0) {
5415 *ppos += cnt;
5416 ret = cnt;
5418 out:
5419 mutex_unlock(&trace_types_lock);
5420 return ret;
5423 static int tracing_snapshot_release(struct inode *inode, struct file *file)
5425 struct seq_file *m = file->private_data;
5426 int ret;
5428 ret = tracing_release(inode, file);
5430 if (file->f_mode & FMODE_READ)
5431 return ret;
5433 /* If write only, the seq_file is just a stub */
5434 if (m)
5435 kfree(m->private);
5436 kfree(m);
5438 return 0;
5441 static int tracing_buffers_open(struct inode *inode, struct file *filp);
5442 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
5443 size_t count, loff_t *ppos);
5444 static int tracing_buffers_release(struct inode *inode, struct file *file);
5445 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5446 struct pipe_inode_info *pipe, size_t len, unsigned int flags);
5448 static int snapshot_raw_open(struct inode *inode, struct file *filp)
5450 struct ftrace_buffer_info *info;
5451 int ret;
5453 ret = tracing_buffers_open(inode, filp);
5454 if (ret < 0)
5455 return ret;
5457 info = filp->private_data;
5459 if (info->iter.trace->use_max_tr) {
5460 tracing_buffers_release(inode, filp);
5461 return -EBUSY;
5464 info->iter.snapshot = true;
5465 info->iter.trace_buffer = &info->iter.tr->max_buffer;
5467 return ret;
5470 #endif /* CONFIG_TRACER_SNAPSHOT */
5473 static const struct file_operations tracing_thresh_fops = {
5474 .open = tracing_open_generic,
5475 .read = tracing_thresh_read,
5476 .write = tracing_thresh_write,
5477 .llseek = generic_file_llseek,
5480 #ifdef CONFIG_TRACER_MAX_TRACE
5481 static const struct file_operations tracing_max_lat_fops = {
5482 .open = tracing_open_generic,
5483 .read = tracing_max_lat_read,
5484 .write = tracing_max_lat_write,
5485 .llseek = generic_file_llseek,
5487 #endif
5489 static const struct file_operations set_tracer_fops = {
5490 .open = tracing_open_generic,
5491 .read = tracing_set_trace_read,
5492 .write = tracing_set_trace_write,
5493 .llseek = generic_file_llseek,
5496 static const struct file_operations tracing_pipe_fops = {
5497 .open = tracing_open_pipe,
5498 .poll = tracing_poll_pipe,
5499 .read = tracing_read_pipe,
5500 .splice_read = tracing_splice_read_pipe,
5501 .release = tracing_release_pipe,
5502 .llseek = no_llseek,
5505 static const struct file_operations tracing_entries_fops = {
5506 .open = tracing_open_generic_tr,
5507 .read = tracing_entries_read,
5508 .write = tracing_entries_write,
5509 .llseek = generic_file_llseek,
5510 .release = tracing_release_generic_tr,
5513 static const struct file_operations tracing_total_entries_fops = {
5514 .open = tracing_open_generic_tr,
5515 .read = tracing_total_entries_read,
5516 .llseek = generic_file_llseek,
5517 .release = tracing_release_generic_tr,
5520 static const struct file_operations tracing_free_buffer_fops = {
5521 .open = tracing_open_generic_tr,
5522 .write = tracing_free_buffer_write,
5523 .release = tracing_free_buffer_release,
5526 static const struct file_operations tracing_mark_fops = {
5527 .open = tracing_open_generic_tr,
5528 .write = tracing_mark_write,
5529 .llseek = generic_file_llseek,
5530 .release = tracing_release_generic_tr,
5533 static const struct file_operations trace_clock_fops = {
5534 .open = tracing_clock_open,
5535 .read = seq_read,
5536 .llseek = seq_lseek,
5537 .release = tracing_single_release_tr,
5538 .write = tracing_clock_write,
5541 #ifdef CONFIG_TRACER_SNAPSHOT
5542 static const struct file_operations snapshot_fops = {
5543 .open = tracing_snapshot_open,
5544 .read = seq_read,
5545 .write = tracing_snapshot_write,
5546 .llseek = tracing_lseek,
5547 .release = tracing_snapshot_release,
5550 static const struct file_operations snapshot_raw_fops = {
5551 .open = snapshot_raw_open,
5552 .read = tracing_buffers_read,
5553 .release = tracing_buffers_release,
5554 .splice_read = tracing_buffers_splice_read,
5555 .llseek = no_llseek,
5558 #endif /* CONFIG_TRACER_SNAPSHOT */
5560 static int tracing_buffers_open(struct inode *inode, struct file *filp)
5562 struct trace_array *tr = inode->i_private;
5563 struct ftrace_buffer_info *info;
5564 int ret;
5566 if (tracing_disabled)
5567 return -ENODEV;
5569 if (trace_array_get(tr) < 0)
5570 return -ENODEV;
5572 info = kzalloc(sizeof(*info), GFP_KERNEL);
5573 if (!info) {
5574 trace_array_put(tr);
5575 return -ENOMEM;
5578 mutex_lock(&trace_types_lock);
5580 info->iter.tr = tr;
5581 info->iter.cpu_file = tracing_get_cpu(inode);
5582 info->iter.trace = tr->current_trace;
5583 info->iter.trace_buffer = &tr->trace_buffer;
5584 info->spare = NULL;
5585 /* Force reading ring buffer for first read */
5586 info->read = (unsigned int)-1;
5588 filp->private_data = info;
5590 tr->current_trace->ref++;
5592 mutex_unlock(&trace_types_lock);
5594 ret = nonseekable_open(inode, filp);
5595 if (ret < 0)
5596 trace_array_put(tr);
5598 return ret;
5601 static unsigned int
5602 tracing_buffers_poll(struct file *filp, poll_table *poll_table)
5604 struct ftrace_buffer_info *info = filp->private_data;
5605 struct trace_iterator *iter = &info->iter;
5607 return trace_poll(iter, filp, poll_table);
5610 static ssize_t
5611 tracing_buffers_read(struct file *filp, char __user *ubuf,
5612 size_t count, loff_t *ppos)
5614 struct ftrace_buffer_info *info = filp->private_data;
5615 struct trace_iterator *iter = &info->iter;
5616 ssize_t ret;
5617 ssize_t size;
5619 if (!count)
5620 return 0;
5622 #ifdef CONFIG_TRACER_MAX_TRACE
5623 if (iter->snapshot && iter->tr->current_trace->use_max_tr)
5624 return -EBUSY;
5625 #endif
5627 if (!info->spare)
5628 info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer,
5629 iter->cpu_file);
5630 if (!info->spare)
5631 return -ENOMEM;
5633 /* Do we have previous read data to read? */
5634 if (info->read < PAGE_SIZE)
5635 goto read;
5637 again:
5638 trace_access_lock(iter->cpu_file);
5639 ret = ring_buffer_read_page(iter->trace_buffer->buffer,
5640 &info->spare,
5641 count,
5642 iter->cpu_file, 0);
5643 trace_access_unlock(iter->cpu_file);
5645 if (ret < 0) {
5646 if (trace_empty(iter)) {
5647 if ((filp->f_flags & O_NONBLOCK))
5648 return -EAGAIN;
5650 ret = wait_on_pipe(iter, false);
5651 if (ret)
5652 return ret;
5654 goto again;
5656 return 0;
5659 info->read = 0;
5660 read:
5661 size = PAGE_SIZE - info->read;
5662 if (size > count)
5663 size = count;
5665 ret = copy_to_user(ubuf, info->spare + info->read, size);
5666 if (ret == size)
5667 return -EFAULT;
5669 size -= ret;
5671 *ppos += size;
5672 info->read += size;
5674 return size;
5677 static int tracing_buffers_release(struct inode *inode, struct file *file)
5679 struct ftrace_buffer_info *info = file->private_data;
5680 struct trace_iterator *iter = &info->iter;
5682 mutex_lock(&trace_types_lock);
5684 iter->tr->current_trace->ref--;
5686 __trace_array_put(iter->tr);
5688 if (info->spare)
5689 ring_buffer_free_read_page(iter->trace_buffer->buffer, info->spare);
5690 kfree(info);
5692 mutex_unlock(&trace_types_lock);
5694 return 0;
5697 struct buffer_ref {
5698 struct ring_buffer *buffer;
5699 void *page;
5700 int ref;
5703 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
5704 struct pipe_buffer *buf)
5706 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5708 if (--ref->ref)
5709 return;
5711 ring_buffer_free_read_page(ref->buffer, ref->page);
5712 kfree(ref);
5713 buf->private = 0;
5716 static void buffer_pipe_buf_get(struct pipe_inode_info *pipe,
5717 struct pipe_buffer *buf)
5719 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5721 ref->ref++;
5724 /* Pipe buffer operations for a buffer. */
5725 static const struct pipe_buf_operations buffer_pipe_buf_ops = {
5726 .can_merge = 0,
5727 .confirm = generic_pipe_buf_confirm,
5728 .release = buffer_pipe_buf_release,
5729 .steal = generic_pipe_buf_steal,
5730 .get = buffer_pipe_buf_get,
5734 * Callback from splice_to_pipe(), if we need to release some pages
5735 * at the end of the spd in case we error'ed out in filling the pipe.
5737 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i)
5739 struct buffer_ref *ref =
5740 (struct buffer_ref *)spd->partial[i].private;
5742 if (--ref->ref)
5743 return;
5745 ring_buffer_free_read_page(ref->buffer, ref->page);
5746 kfree(ref);
5747 spd->partial[i].private = 0;
5750 static ssize_t
5751 tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5752 struct pipe_inode_info *pipe, size_t len,
5753 unsigned int flags)
5755 struct ftrace_buffer_info *info = file->private_data;
5756 struct trace_iterator *iter = &info->iter;
5757 struct partial_page partial_def[PIPE_DEF_BUFFERS];
5758 struct page *pages_def[PIPE_DEF_BUFFERS];
5759 struct splice_pipe_desc spd = {
5760 .pages = pages_def,
5761 .partial = partial_def,
5762 .nr_pages_max = PIPE_DEF_BUFFERS,
5763 .flags = flags,
5764 .ops = &buffer_pipe_buf_ops,
5765 .spd_release = buffer_spd_release,
5767 struct buffer_ref *ref;
5768 int entries, i;
5769 ssize_t ret = 0;
5771 #ifdef CONFIG_TRACER_MAX_TRACE
5772 if (iter->snapshot && iter->tr->current_trace->use_max_tr)
5773 return -EBUSY;
5774 #endif
5776 if (*ppos & (PAGE_SIZE - 1))
5777 return -EINVAL;
5779 if (len & (PAGE_SIZE - 1)) {
5780 if (len < PAGE_SIZE)
5781 return -EINVAL;
5782 len &= PAGE_MASK;
5785 if (splice_grow_spd(pipe, &spd))
5786 return -ENOMEM;
5788 again:
5789 trace_access_lock(iter->cpu_file);
5790 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5792 for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) {
5793 struct page *page;
5794 int r;
5796 ref = kzalloc(sizeof(*ref), GFP_KERNEL);
5797 if (!ref) {
5798 ret = -ENOMEM;
5799 break;
5802 ref->ref = 1;
5803 ref->buffer = iter->trace_buffer->buffer;
5804 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
5805 if (!ref->page) {
5806 ret = -ENOMEM;
5807 kfree(ref);
5808 break;
5811 r = ring_buffer_read_page(ref->buffer, &ref->page,
5812 len, iter->cpu_file, 1);
5813 if (r < 0) {
5814 ring_buffer_free_read_page(ref->buffer, ref->page);
5815 kfree(ref);
5816 break;
5819 page = virt_to_page(ref->page);
5821 spd.pages[i] = page;
5822 spd.partial[i].len = PAGE_SIZE;
5823 spd.partial[i].offset = 0;
5824 spd.partial[i].private = (unsigned long)ref;
5825 spd.nr_pages++;
5826 *ppos += PAGE_SIZE;
5828 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5831 trace_access_unlock(iter->cpu_file);
5832 spd.nr_pages = i;
5834 /* did we read anything? */
5835 if (!spd.nr_pages) {
5836 if (ret)
5837 goto out;
5839 ret = -EAGAIN;
5840 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
5841 goto out;
5843 ret = wait_on_pipe(iter, true);
5844 if (ret)
5845 goto out;
5847 goto again;
5850 ret = splice_to_pipe(pipe, &spd);
5851 out:
5852 splice_shrink_spd(&spd);
5854 return ret;
5857 static const struct file_operations tracing_buffers_fops = {
5858 .open = tracing_buffers_open,
5859 .read = tracing_buffers_read,
5860 .poll = tracing_buffers_poll,
5861 .release = tracing_buffers_release,
5862 .splice_read = tracing_buffers_splice_read,
5863 .llseek = no_llseek,
5866 static ssize_t
5867 tracing_stats_read(struct file *filp, char __user *ubuf,
5868 size_t count, loff_t *ppos)
5870 struct inode *inode = file_inode(filp);
5871 struct trace_array *tr = inode->i_private;
5872 struct trace_buffer *trace_buf = &tr->trace_buffer;
5873 int cpu = tracing_get_cpu(inode);
5874 struct trace_seq *s;
5875 unsigned long cnt;
5876 unsigned long long t;
5877 unsigned long usec_rem;
5879 s = kmalloc(sizeof(*s), GFP_KERNEL);
5880 if (!s)
5881 return -ENOMEM;
5883 trace_seq_init(s);
5885 cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu);
5886 trace_seq_printf(s, "entries: %ld\n", cnt);
5888 cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu);
5889 trace_seq_printf(s, "overrun: %ld\n", cnt);
5891 cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu);
5892 trace_seq_printf(s, "commit overrun: %ld\n", cnt);
5894 cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu);
5895 trace_seq_printf(s, "bytes: %ld\n", cnt);
5897 if (trace_clocks[tr->clock_id].in_ns) {
5898 /* local or global for trace_clock */
5899 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5900 usec_rem = do_div(t, USEC_PER_SEC);
5901 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n",
5902 t, usec_rem);
5904 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu));
5905 usec_rem = do_div(t, USEC_PER_SEC);
5906 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem);
5907 } else {
5908 /* counter or tsc mode for trace_clock */
5909 trace_seq_printf(s, "oldest event ts: %llu\n",
5910 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5912 trace_seq_printf(s, "now ts: %llu\n",
5913 ring_buffer_time_stamp(trace_buf->buffer, cpu));
5916 cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu);
5917 trace_seq_printf(s, "dropped events: %ld\n", cnt);
5919 cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
5920 trace_seq_printf(s, "read events: %ld\n", cnt);
5922 count = simple_read_from_buffer(ubuf, count, ppos,
5923 s->buffer, trace_seq_used(s));
5925 kfree(s);
5927 return count;
5930 static const struct file_operations tracing_stats_fops = {
5931 .open = tracing_open_generic_tr,
5932 .read = tracing_stats_read,
5933 .llseek = generic_file_llseek,
5934 .release = tracing_release_generic_tr,
5937 #ifdef CONFIG_DYNAMIC_FTRACE
5939 int __weak ftrace_arch_read_dyn_info(char *buf, int size)
5941 return 0;
5944 static ssize_t
5945 tracing_read_dyn_info(struct file *filp, char __user *ubuf,
5946 size_t cnt, loff_t *ppos)
5948 static char ftrace_dyn_info_buffer[1024];
5949 static DEFINE_MUTEX(dyn_info_mutex);
5950 unsigned long *p = filp->private_data;
5951 char *buf = ftrace_dyn_info_buffer;
5952 int size = ARRAY_SIZE(ftrace_dyn_info_buffer);
5953 int r;
5955 mutex_lock(&dyn_info_mutex);
5956 r = sprintf(buf, "%ld ", *p);
5958 r += ftrace_arch_read_dyn_info(buf+r, (size-1)-r);
5959 buf[r++] = '\n';
5961 r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5963 mutex_unlock(&dyn_info_mutex);
5965 return r;
5968 static const struct file_operations tracing_dyn_info_fops = {
5969 .open = tracing_open_generic,
5970 .read = tracing_read_dyn_info,
5971 .llseek = generic_file_llseek,
5973 #endif /* CONFIG_DYNAMIC_FTRACE */
5975 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE)
5976 static void
5977 ftrace_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
5979 tracing_snapshot();
5982 static void
5983 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
5985 unsigned long *count = (long *)data;
5987 if (!*count)
5988 return;
5990 if (*count != -1)
5991 (*count)--;
5993 tracing_snapshot();
5996 static int
5997 ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
5998 struct ftrace_probe_ops *ops, void *data)
6000 long count = (long)data;
6002 seq_printf(m, "%ps:", (void *)ip);
6004 seq_puts(m, "snapshot");
6006 if (count == -1)
6007 seq_puts(m, ":unlimited\n");
6008 else
6009 seq_printf(m, ":count=%ld\n", count);
6011 return 0;
6014 static struct ftrace_probe_ops snapshot_probe_ops = {
6015 .func = ftrace_snapshot,
6016 .print = ftrace_snapshot_print,
6019 static struct ftrace_probe_ops snapshot_count_probe_ops = {
6020 .func = ftrace_count_snapshot,
6021 .print = ftrace_snapshot_print,
6024 static int
6025 ftrace_trace_snapshot_callback(struct ftrace_hash *hash,
6026 char *glob, char *cmd, char *param, int enable)
6028 struct ftrace_probe_ops *ops;
6029 void *count = (void *)-1;
6030 char *number;
6031 int ret;
6033 /* hash funcs only work with set_ftrace_filter */
6034 if (!enable)
6035 return -EINVAL;
6037 ops = param ? &snapshot_count_probe_ops : &snapshot_probe_ops;
6039 if (glob[0] == '!') {
6040 unregister_ftrace_function_probe_func(glob+1, ops);
6041 return 0;
6044 if (!param)
6045 goto out_reg;
6047 number = strsep(&param, ":");
6049 if (!strlen(number))
6050 goto out_reg;
6053 * We use the callback data field (which is a pointer)
6054 * as our counter.
6056 ret = kstrtoul(number, 0, (unsigned long *)&count);
6057 if (ret)
6058 return ret;
6060 out_reg:
6061 ret = alloc_snapshot(&global_trace);
6062 if (ret < 0)
6063 goto out;
6065 ret = register_ftrace_function_probe(glob, ops, count);
6067 out:
6068 return ret < 0 ? ret : 0;
6071 static struct ftrace_func_command ftrace_snapshot_cmd = {
6072 .name = "snapshot",
6073 .func = ftrace_trace_snapshot_callback,
6076 static __init int register_snapshot_cmd(void)
6078 return register_ftrace_command(&ftrace_snapshot_cmd);
6080 #else
6081 static inline __init int register_snapshot_cmd(void) { return 0; }
6082 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */
6084 static struct dentry *tracing_get_dentry(struct trace_array *tr)
6086 if (WARN_ON(!tr->dir))
6087 return ERR_PTR(-ENODEV);
6089 /* Top directory uses NULL as the parent */
6090 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
6091 return NULL;
6093 /* All sub buffers have a descriptor */
6094 return tr->dir;
6097 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
6099 struct dentry *d_tracer;
6101 if (tr->percpu_dir)
6102 return tr->percpu_dir;
6104 d_tracer = tracing_get_dentry(tr);
6105 if (IS_ERR(d_tracer))
6106 return NULL;
6108 tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer);
6110 WARN_ONCE(!tr->percpu_dir,
6111 "Could not create tracefs directory 'per_cpu/%d'\n", cpu);
6113 return tr->percpu_dir;
6116 static struct dentry *
6117 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
6118 void *data, long cpu, const struct file_operations *fops)
6120 struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
6122 if (ret) /* See tracing_get_cpu() */
6123 d_inode(ret)->i_cdev = (void *)(cpu + 1);
6124 return ret;
6127 static void
6128 tracing_init_tracefs_percpu(struct trace_array *tr, long cpu)
6130 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
6131 struct dentry *d_cpu;
6132 char cpu_dir[30]; /* 30 characters should be more than enough */
6134 if (!d_percpu)
6135 return;
6137 snprintf(cpu_dir, 30, "cpu%ld", cpu);
6138 d_cpu = tracefs_create_dir(cpu_dir, d_percpu);
6139 if (!d_cpu) {
6140 pr_warning("Could not create tracefs '%s' entry\n", cpu_dir);
6141 return;
6144 /* per cpu trace_pipe */
6145 trace_create_cpu_file("trace_pipe", 0444, d_cpu,
6146 tr, cpu, &tracing_pipe_fops);
6148 /* per cpu trace */
6149 trace_create_cpu_file("trace", 0644, d_cpu,
6150 tr, cpu, &tracing_fops);
6152 trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
6153 tr, cpu, &tracing_buffers_fops);
6155 trace_create_cpu_file("stats", 0444, d_cpu,
6156 tr, cpu, &tracing_stats_fops);
6158 trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
6159 tr, cpu, &tracing_entries_fops);
6161 #ifdef CONFIG_TRACER_SNAPSHOT
6162 trace_create_cpu_file("snapshot", 0644, d_cpu,
6163 tr, cpu, &snapshot_fops);
6165 trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
6166 tr, cpu, &snapshot_raw_fops);
6167 #endif
6170 #ifdef CONFIG_FTRACE_SELFTEST
6171 /* Let selftest have access to static functions in this file */
6172 #include "trace_selftest.c"
6173 #endif
6175 static ssize_t
6176 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
6177 loff_t *ppos)
6179 struct trace_option_dentry *topt = filp->private_data;
6180 char *buf;
6182 if (topt->flags->val & topt->opt->bit)
6183 buf = "1\n";
6184 else
6185 buf = "0\n";
6187 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
6190 static ssize_t
6191 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
6192 loff_t *ppos)
6194 struct trace_option_dentry *topt = filp->private_data;
6195 unsigned long val;
6196 int ret;
6198 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6199 if (ret)
6200 return ret;
6202 if (val != 0 && val != 1)
6203 return -EINVAL;
6205 if (!!(topt->flags->val & topt->opt->bit) != val) {
6206 mutex_lock(&trace_types_lock);
6207 ret = __set_tracer_option(topt->tr, topt->flags,
6208 topt->opt, !val);
6209 mutex_unlock(&trace_types_lock);
6210 if (ret)
6211 return ret;
6214 *ppos += cnt;
6216 return cnt;
6220 static const struct file_operations trace_options_fops = {
6221 .open = tracing_open_generic,
6222 .read = trace_options_read,
6223 .write = trace_options_write,
6224 .llseek = generic_file_llseek,
6228 * In order to pass in both the trace_array descriptor as well as the index
6229 * to the flag that the trace option file represents, the trace_array
6230 * has a character array of trace_flags_index[], which holds the index
6231 * of the bit for the flag it represents. index[0] == 0, index[1] == 1, etc.
6232 * The address of this character array is passed to the flag option file
6233 * read/write callbacks.
6235 * In order to extract both the index and the trace_array descriptor,
6236 * get_tr_index() uses the following algorithm.
6238 * idx = *ptr;
6240 * As the pointer itself contains the address of the index (remember
6241 * index[1] == 1).
6243 * Then to get the trace_array descriptor, by subtracting that index
6244 * from the ptr, we get to the start of the index itself.
6246 * ptr - idx == &index[0]
6248 * Then a simple container_of() from that pointer gets us to the
6249 * trace_array descriptor.
6251 static void get_tr_index(void *data, struct trace_array **ptr,
6252 unsigned int *pindex)
6254 *pindex = *(unsigned char *)data;
6256 *ptr = container_of(data - *pindex, struct trace_array,
6257 trace_flags_index);
6260 static ssize_t
6261 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
6262 loff_t *ppos)
6264 void *tr_index = filp->private_data;
6265 struct trace_array *tr;
6266 unsigned int index;
6267 char *buf;
6269 get_tr_index(tr_index, &tr, &index);
6271 if (tr->trace_flags & (1 << index))
6272 buf = "1\n";
6273 else
6274 buf = "0\n";
6276 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
6279 static ssize_t
6280 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
6281 loff_t *ppos)
6283 void *tr_index = filp->private_data;
6284 struct trace_array *tr;
6285 unsigned int index;
6286 unsigned long val;
6287 int ret;
6289 get_tr_index(tr_index, &tr, &index);
6291 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6292 if (ret)
6293 return ret;
6295 if (val != 0 && val != 1)
6296 return -EINVAL;
6298 mutex_lock(&trace_types_lock);
6299 ret = set_tracer_flag(tr, 1 << index, val);
6300 mutex_unlock(&trace_types_lock);
6302 if (ret < 0)
6303 return ret;
6305 *ppos += cnt;
6307 return cnt;
6310 static const struct file_operations trace_options_core_fops = {
6311 .open = tracing_open_generic,
6312 .read = trace_options_core_read,
6313 .write = trace_options_core_write,
6314 .llseek = generic_file_llseek,
6317 struct dentry *trace_create_file(const char *name,
6318 umode_t mode,
6319 struct dentry *parent,
6320 void *data,
6321 const struct file_operations *fops)
6323 struct dentry *ret;
6325 ret = tracefs_create_file(name, mode, parent, data, fops);
6326 if (!ret)
6327 pr_warning("Could not create tracefs '%s' entry\n", name);
6329 return ret;
6333 static struct dentry *trace_options_init_dentry(struct trace_array *tr)
6335 struct dentry *d_tracer;
6337 if (tr->options)
6338 return tr->options;
6340 d_tracer = tracing_get_dentry(tr);
6341 if (IS_ERR(d_tracer))
6342 return NULL;
6344 tr->options = tracefs_create_dir("options", d_tracer);
6345 if (!tr->options) {
6346 pr_warning("Could not create tracefs directory 'options'\n");
6347 return NULL;
6350 return tr->options;
6353 static void
6354 create_trace_option_file(struct trace_array *tr,
6355 struct trace_option_dentry *topt,
6356 struct tracer_flags *flags,
6357 struct tracer_opt *opt)
6359 struct dentry *t_options;
6361 t_options = trace_options_init_dentry(tr);
6362 if (!t_options)
6363 return;
6365 topt->flags = flags;
6366 topt->opt = opt;
6367 topt->tr = tr;
6369 topt->entry = trace_create_file(opt->name, 0644, t_options, topt,
6370 &trace_options_fops);
6374 static void
6375 create_trace_option_files(struct trace_array *tr, struct tracer *tracer)
6377 struct trace_option_dentry *topts;
6378 struct trace_options *tr_topts;
6379 struct tracer_flags *flags;
6380 struct tracer_opt *opts;
6381 int cnt;
6382 int i;
6384 if (!tracer)
6385 return;
6387 flags = tracer->flags;
6389 if (!flags || !flags->opts)
6390 return;
6393 * If this is an instance, only create flags for tracers
6394 * the instance may have.
6396 if (!trace_ok_for_array(tracer, tr))
6397 return;
6399 for (i = 0; i < tr->nr_topts; i++) {
6401 * Check if these flags have already been added.
6402 * Some tracers share flags.
6404 if (tr->topts[i].tracer->flags == tracer->flags)
6405 return;
6408 opts = flags->opts;
6410 for (cnt = 0; opts[cnt].name; cnt++)
6413 topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
6414 if (!topts)
6415 return;
6417 tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1),
6418 GFP_KERNEL);
6419 if (!tr_topts) {
6420 kfree(topts);
6421 return;
6424 tr->topts = tr_topts;
6425 tr->topts[tr->nr_topts].tracer = tracer;
6426 tr->topts[tr->nr_topts].topts = topts;
6427 tr->nr_topts++;
6429 for (cnt = 0; opts[cnt].name; cnt++) {
6430 create_trace_option_file(tr, &topts[cnt], flags,
6431 &opts[cnt]);
6432 WARN_ONCE(topts[cnt].entry == NULL,
6433 "Failed to create trace option: %s",
6434 opts[cnt].name);
6438 static struct dentry *
6439 create_trace_option_core_file(struct trace_array *tr,
6440 const char *option, long index)
6442 struct dentry *t_options;
6444 t_options = trace_options_init_dentry(tr);
6445 if (!t_options)
6446 return NULL;
6448 return trace_create_file(option, 0644, t_options,
6449 (void *)&tr->trace_flags_index[index],
6450 &trace_options_core_fops);
6453 static void create_trace_options_dir(struct trace_array *tr)
6455 struct dentry *t_options;
6456 bool top_level = tr == &global_trace;
6457 int i;
6459 t_options = trace_options_init_dentry(tr);
6460 if (!t_options)
6461 return;
6463 for (i = 0; trace_options[i]; i++) {
6464 if (top_level ||
6465 !((1 << i) & TOP_LEVEL_TRACE_FLAGS))
6466 create_trace_option_core_file(tr, trace_options[i], i);
6470 static ssize_t
6471 rb_simple_read(struct file *filp, char __user *ubuf,
6472 size_t cnt, loff_t *ppos)
6474 struct trace_array *tr = filp->private_data;
6475 char buf[64];
6476 int r;
6478 r = tracer_tracing_is_on(tr);
6479 r = sprintf(buf, "%d\n", r);
6481 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6484 static ssize_t
6485 rb_simple_write(struct file *filp, const char __user *ubuf,
6486 size_t cnt, loff_t *ppos)
6488 struct trace_array *tr = filp->private_data;
6489 struct ring_buffer *buffer = tr->trace_buffer.buffer;
6490 unsigned long val;
6491 int ret;
6493 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6494 if (ret)
6495 return ret;
6497 if (buffer) {
6498 mutex_lock(&trace_types_lock);
6499 if (!!val == tracer_tracing_is_on(tr)) {
6500 val = 0; /* do nothing */
6501 } else if (val) {
6502 tracer_tracing_on(tr);
6503 if (tr->current_trace->start)
6504 tr->current_trace->start(tr);
6505 } else {
6506 tracer_tracing_off(tr);
6507 if (tr->current_trace->stop)
6508 tr->current_trace->stop(tr);
6510 mutex_unlock(&trace_types_lock);
6513 (*ppos)++;
6515 return cnt;
6518 static const struct file_operations rb_simple_fops = {
6519 .open = tracing_open_generic_tr,
6520 .read = rb_simple_read,
6521 .write = rb_simple_write,
6522 .release = tracing_release_generic_tr,
6523 .llseek = default_llseek,
6526 struct dentry *trace_instance_dir;
6528 static void
6529 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
6531 static int
6532 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
6534 enum ring_buffer_flags rb_flags;
6536 rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0;
6538 buf->tr = tr;
6540 buf->buffer = ring_buffer_alloc(size, rb_flags);
6541 if (!buf->buffer)
6542 return -ENOMEM;
6544 buf->data = alloc_percpu(struct trace_array_cpu);
6545 if (!buf->data) {
6546 ring_buffer_free(buf->buffer);
6547 buf->buffer = NULL;
6548 return -ENOMEM;
6551 /* Allocate the first page for all buffers */
6552 set_buffer_entries(&tr->trace_buffer,
6553 ring_buffer_size(tr->trace_buffer.buffer, 0));
6555 return 0;
6558 static int allocate_trace_buffers(struct trace_array *tr, int size)
6560 int ret;
6562 ret = allocate_trace_buffer(tr, &tr->trace_buffer, size);
6563 if (ret)
6564 return ret;
6566 #ifdef CONFIG_TRACER_MAX_TRACE
6567 ret = allocate_trace_buffer(tr, &tr->max_buffer,
6568 allocate_snapshot ? size : 1);
6569 if (WARN_ON(ret)) {
6570 ring_buffer_free(tr->trace_buffer.buffer);
6571 tr->trace_buffer.buffer = NULL;
6572 free_percpu(tr->trace_buffer.data);
6573 tr->trace_buffer.data = NULL;
6574 return -ENOMEM;
6576 tr->allocated_snapshot = allocate_snapshot;
6579 * Only the top level trace array gets its snapshot allocated
6580 * from the kernel command line.
6582 allocate_snapshot = false;
6583 #endif
6584 return 0;
6587 static void free_trace_buffer(struct trace_buffer *buf)
6589 if (buf->buffer) {
6590 ring_buffer_free(buf->buffer);
6591 buf->buffer = NULL;
6592 free_percpu(buf->data);
6593 buf->data = NULL;
6597 static void free_trace_buffers(struct trace_array *tr)
6599 if (!tr)
6600 return;
6602 free_trace_buffer(&tr->trace_buffer);
6604 #ifdef CONFIG_TRACER_MAX_TRACE
6605 free_trace_buffer(&tr->max_buffer);
6606 #endif
6609 static void init_trace_flags_index(struct trace_array *tr)
6611 int i;
6613 /* Used by the trace options files */
6614 for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++)
6615 tr->trace_flags_index[i] = i;
6618 static void __update_tracer_options(struct trace_array *tr)
6620 struct tracer *t;
6622 for (t = trace_types; t; t = t->next)
6623 add_tracer_options(tr, t);
6626 static void update_tracer_options(struct trace_array *tr)
6628 mutex_lock(&trace_types_lock);
6629 __update_tracer_options(tr);
6630 mutex_unlock(&trace_types_lock);
6633 static int instance_mkdir(const char *name)
6635 struct trace_array *tr;
6636 int ret;
6638 mutex_lock(&trace_types_lock);
6640 ret = -EEXIST;
6641 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6642 if (tr->name && strcmp(tr->name, name) == 0)
6643 goto out_unlock;
6646 ret = -ENOMEM;
6647 tr = kzalloc(sizeof(*tr), GFP_KERNEL);
6648 if (!tr)
6649 goto out_unlock;
6651 tr->name = kstrdup(name, GFP_KERNEL);
6652 if (!tr->name)
6653 goto out_free_tr;
6655 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
6656 goto out_free_tr;
6658 tr->trace_flags = global_trace.trace_flags;
6660 cpumask_copy(tr->tracing_cpumask, cpu_all_mask);
6662 raw_spin_lock_init(&tr->start_lock);
6664 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
6666 tr->current_trace = &nop_trace;
6668 INIT_LIST_HEAD(&tr->systems);
6669 INIT_LIST_HEAD(&tr->events);
6671 if (allocate_trace_buffers(tr, trace_buf_size) < 0)
6672 goto out_free_tr;
6674 tr->dir = tracefs_create_dir(name, trace_instance_dir);
6675 if (!tr->dir)
6676 goto out_free_tr;
6678 ret = event_trace_add_tracer(tr->dir, tr);
6679 if (ret) {
6680 tracefs_remove_recursive(tr->dir);
6681 goto out_free_tr;
6684 init_tracer_tracefs(tr, tr->dir);
6685 init_trace_flags_index(tr);
6686 __update_tracer_options(tr);
6688 list_add(&tr->list, &ftrace_trace_arrays);
6690 mutex_unlock(&trace_types_lock);
6692 return 0;
6694 out_free_tr:
6695 free_trace_buffers(tr);
6696 free_cpumask_var(tr->tracing_cpumask);
6697 kfree(tr->name);
6698 kfree(tr);
6700 out_unlock:
6701 mutex_unlock(&trace_types_lock);
6703 return ret;
6707 static int instance_rmdir(const char *name)
6709 struct trace_array *tr;
6710 int found = 0;
6711 int ret;
6712 int i;
6714 mutex_lock(&trace_types_lock);
6716 ret = -ENODEV;
6717 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6718 if (tr->name && strcmp(tr->name, name) == 0) {
6719 found = 1;
6720 break;
6723 if (!found)
6724 goto out_unlock;
6726 ret = -EBUSY;
6727 if (tr->ref || (tr->current_trace && tr->current_trace->ref))
6728 goto out_unlock;
6730 list_del(&tr->list);
6732 tracing_set_nop(tr);
6733 event_trace_del_tracer(tr);
6734 ftrace_destroy_function_files(tr);
6735 tracefs_remove_recursive(tr->dir);
6736 free_trace_buffers(tr);
6738 for (i = 0; i < tr->nr_topts; i++) {
6739 kfree(tr->topts[i].topts);
6741 kfree(tr->topts);
6743 free_cpumask_var(tr->tracing_cpumask);
6744 kfree(tr->name);
6745 kfree(tr);
6747 ret = 0;
6749 out_unlock:
6750 mutex_unlock(&trace_types_lock);
6752 return ret;
6755 static __init void create_trace_instances(struct dentry *d_tracer)
6757 trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
6758 instance_mkdir,
6759 instance_rmdir);
6760 if (WARN_ON(!trace_instance_dir))
6761 return;
6764 static void
6765 init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer)
6767 int cpu;
6769 trace_create_file("available_tracers", 0444, d_tracer,
6770 tr, &show_traces_fops);
6772 trace_create_file("current_tracer", 0644, d_tracer,
6773 tr, &set_tracer_fops);
6775 trace_create_file("tracing_cpumask", 0644, d_tracer,
6776 tr, &tracing_cpumask_fops);
6778 trace_create_file("trace_options", 0644, d_tracer,
6779 tr, &tracing_iter_fops);
6781 trace_create_file("trace", 0644, d_tracer,
6782 tr, &tracing_fops);
6784 trace_create_file("trace_pipe", 0444, d_tracer,
6785 tr, &tracing_pipe_fops);
6787 trace_create_file("buffer_size_kb", 0644, d_tracer,
6788 tr, &tracing_entries_fops);
6790 trace_create_file("buffer_total_size_kb", 0444, d_tracer,
6791 tr, &tracing_total_entries_fops);
6793 trace_create_file("free_buffer", 0200, d_tracer,
6794 tr, &tracing_free_buffer_fops);
6796 trace_create_file("trace_marker", 0220, d_tracer,
6797 tr, &tracing_mark_fops);
6799 trace_create_file("trace_clock", 0644, d_tracer, tr,
6800 &trace_clock_fops);
6802 trace_create_file("tracing_on", 0644, d_tracer,
6803 tr, &rb_simple_fops);
6805 create_trace_options_dir(tr);
6807 #ifdef CONFIG_TRACER_MAX_TRACE
6808 trace_create_file("tracing_max_latency", 0644, d_tracer,
6809 &tr->max_latency, &tracing_max_lat_fops);
6810 #endif
6812 if (ftrace_create_function_files(tr, d_tracer))
6813 WARN(1, "Could not allocate function filter files");
6815 #ifdef CONFIG_TRACER_SNAPSHOT
6816 trace_create_file("snapshot", 0644, d_tracer,
6817 tr, &snapshot_fops);
6818 #endif
6820 for_each_tracing_cpu(cpu)
6821 tracing_init_tracefs_percpu(tr, cpu);
6825 static struct vfsmount *trace_automount(void *ingore)
6827 struct vfsmount *mnt;
6828 struct file_system_type *type;
6831 * To maintain backward compatibility for tools that mount
6832 * debugfs to get to the tracing facility, tracefs is automatically
6833 * mounted to the debugfs/tracing directory.
6835 type = get_fs_type("tracefs");
6836 if (!type)
6837 return NULL;
6838 mnt = vfs_kern_mount(type, 0, "tracefs", NULL);
6839 put_filesystem(type);
6840 if (IS_ERR(mnt))
6841 return NULL;
6842 mntget(mnt);
6844 return mnt;
6848 * tracing_init_dentry - initialize top level trace array
6850 * This is called when creating files or directories in the tracing
6851 * directory. It is called via fs_initcall() by any of the boot up code
6852 * and expects to return the dentry of the top level tracing directory.
6854 struct dentry *tracing_init_dentry(void)
6856 struct trace_array *tr = &global_trace;
6858 /* The top level trace array uses NULL as parent */
6859 if (tr->dir)
6860 return NULL;
6862 if (WARN_ON(!tracefs_initialized()) ||
6863 (IS_ENABLED(CONFIG_DEBUG_FS) &&
6864 WARN_ON(!debugfs_initialized())))
6865 return ERR_PTR(-ENODEV);
6868 * As there may still be users that expect the tracing
6869 * files to exist in debugfs/tracing, we must automount
6870 * the tracefs file system there, so older tools still
6871 * work with the newer kerenl.
6873 tr->dir = debugfs_create_automount("tracing", NULL,
6874 trace_automount, NULL);
6875 if (!tr->dir) {
6876 pr_warn_once("Could not create debugfs directory 'tracing'\n");
6877 return ERR_PTR(-ENOMEM);
6880 return NULL;
6883 extern struct trace_enum_map *__start_ftrace_enum_maps[];
6884 extern struct trace_enum_map *__stop_ftrace_enum_maps[];
6886 static void __init trace_enum_init(void)
6888 int len;
6890 len = __stop_ftrace_enum_maps - __start_ftrace_enum_maps;
6891 trace_insert_enum_map(NULL, __start_ftrace_enum_maps, len);
6894 #ifdef CONFIG_MODULES
6895 static void trace_module_add_enums(struct module *mod)
6897 if (!mod->num_trace_enums)
6898 return;
6901 * Modules with bad taint do not have events created, do
6902 * not bother with enums either.
6904 if (trace_module_has_bad_taint(mod))
6905 return;
6907 trace_insert_enum_map(mod, mod->trace_enums, mod->num_trace_enums);
6910 #ifdef CONFIG_TRACE_ENUM_MAP_FILE
6911 static void trace_module_remove_enums(struct module *mod)
6913 union trace_enum_map_item *map;
6914 union trace_enum_map_item **last = &trace_enum_maps;
6916 if (!mod->num_trace_enums)
6917 return;
6919 mutex_lock(&trace_enum_mutex);
6921 map = trace_enum_maps;
6923 while (map) {
6924 if (map->head.mod == mod)
6925 break;
6926 map = trace_enum_jmp_to_tail(map);
6927 last = &map->tail.next;
6928 map = map->tail.next;
6930 if (!map)
6931 goto out;
6933 *last = trace_enum_jmp_to_tail(map)->tail.next;
6934 kfree(map);
6935 out:
6936 mutex_unlock(&trace_enum_mutex);
6938 #else
6939 static inline void trace_module_remove_enums(struct module *mod) { }
6940 #endif /* CONFIG_TRACE_ENUM_MAP_FILE */
6942 static int trace_module_notify(struct notifier_block *self,
6943 unsigned long val, void *data)
6945 struct module *mod = data;
6947 switch (val) {
6948 case MODULE_STATE_COMING:
6949 trace_module_add_enums(mod);
6950 break;
6951 case MODULE_STATE_GOING:
6952 trace_module_remove_enums(mod);
6953 break;
6956 return 0;
6959 static struct notifier_block trace_module_nb = {
6960 .notifier_call = trace_module_notify,
6961 .priority = 0,
6963 #endif /* CONFIG_MODULES */
6965 static __init int tracer_init_tracefs(void)
6967 struct dentry *d_tracer;
6969 trace_access_lock_init();
6971 d_tracer = tracing_init_dentry();
6972 if (IS_ERR(d_tracer))
6973 return 0;
6975 init_tracer_tracefs(&global_trace, d_tracer);
6977 trace_create_file("tracing_thresh", 0644, d_tracer,
6978 &global_trace, &tracing_thresh_fops);
6980 trace_create_file("README", 0444, d_tracer,
6981 NULL, &tracing_readme_fops);
6983 trace_create_file("saved_cmdlines", 0444, d_tracer,
6984 NULL, &tracing_saved_cmdlines_fops);
6986 trace_create_file("saved_cmdlines_size", 0644, d_tracer,
6987 NULL, &tracing_saved_cmdlines_size_fops);
6989 trace_enum_init();
6991 trace_create_enum_file(d_tracer);
6993 #ifdef CONFIG_MODULES
6994 register_module_notifier(&trace_module_nb);
6995 #endif
6997 #ifdef CONFIG_DYNAMIC_FTRACE
6998 trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
6999 &ftrace_update_tot_cnt, &tracing_dyn_info_fops);
7000 #endif
7002 create_trace_instances(d_tracer);
7004 update_tracer_options(&global_trace);
7006 return 0;
7009 static int trace_panic_handler(struct notifier_block *this,
7010 unsigned long event, void *unused)
7012 if (ftrace_dump_on_oops)
7013 ftrace_dump(ftrace_dump_on_oops);
7014 return NOTIFY_OK;
7017 static struct notifier_block trace_panic_notifier = {
7018 .notifier_call = trace_panic_handler,
7019 .next = NULL,
7020 .priority = 150 /* priority: INT_MAX >= x >= 0 */
7023 static int trace_die_handler(struct notifier_block *self,
7024 unsigned long val,
7025 void *data)
7027 switch (val) {
7028 case DIE_OOPS:
7029 if (ftrace_dump_on_oops)
7030 ftrace_dump(ftrace_dump_on_oops);
7031 break;
7032 default:
7033 break;
7035 return NOTIFY_OK;
7038 static struct notifier_block trace_die_notifier = {
7039 .notifier_call = trace_die_handler,
7040 .priority = 200
7044 * printk is set to max of 1024, we really don't need it that big.
7045 * Nothing should be printing 1000 characters anyway.
7047 #define TRACE_MAX_PRINT 1000
7050 * Define here KERN_TRACE so that we have one place to modify
7051 * it if we decide to change what log level the ftrace dump
7052 * should be at.
7054 #define KERN_TRACE KERN_EMERG
7056 void
7057 trace_printk_seq(struct trace_seq *s)
7059 /* Probably should print a warning here. */
7060 if (s->seq.len >= TRACE_MAX_PRINT)
7061 s->seq.len = TRACE_MAX_PRINT;
7064 * More paranoid code. Although the buffer size is set to
7065 * PAGE_SIZE, and TRACE_MAX_PRINT is 1000, this is just
7066 * an extra layer of protection.
7068 if (WARN_ON_ONCE(s->seq.len >= s->seq.size))
7069 s->seq.len = s->seq.size - 1;
7071 /* should be zero ended, but we are paranoid. */
7072 s->buffer[s->seq.len] = 0;
7074 printk(KERN_TRACE "%s", s->buffer);
7076 trace_seq_init(s);
7079 void trace_init_global_iter(struct trace_iterator *iter)
7081 iter->tr = &global_trace;
7082 iter->trace = iter->tr->current_trace;
7083 iter->cpu_file = RING_BUFFER_ALL_CPUS;
7084 iter->trace_buffer = &global_trace.trace_buffer;
7086 if (iter->trace && iter->trace->open)
7087 iter->trace->open(iter);
7089 /* Annotate start of buffers if we had overruns */
7090 if (ring_buffer_overruns(iter->trace_buffer->buffer))
7091 iter->iter_flags |= TRACE_FILE_ANNOTATE;
7093 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
7094 if (trace_clocks[iter->tr->clock_id].in_ns)
7095 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
7098 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
7100 /* use static because iter can be a bit big for the stack */
7101 static struct trace_iterator iter;
7102 static atomic_t dump_running;
7103 struct trace_array *tr = &global_trace;
7104 unsigned int old_userobj;
7105 unsigned long flags;
7106 int cnt = 0, cpu;
7108 /* Only allow one dump user at a time. */
7109 if (atomic_inc_return(&dump_running) != 1) {
7110 atomic_dec(&dump_running);
7111 return;
7115 * Always turn off tracing when we dump.
7116 * We don't need to show trace output of what happens
7117 * between multiple crashes.
7119 * If the user does a sysrq-z, then they can re-enable
7120 * tracing with echo 1 > tracing_on.
7122 tracing_off();
7124 local_irq_save(flags);
7126 /* Simulate the iterator */
7127 trace_init_global_iter(&iter);
7129 for_each_tracing_cpu(cpu) {
7130 atomic_inc(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
7133 old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ;
7135 /* don't look at user memory in panic mode */
7136 tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ;
7138 switch (oops_dump_mode) {
7139 case DUMP_ALL:
7140 iter.cpu_file = RING_BUFFER_ALL_CPUS;
7141 break;
7142 case DUMP_ORIG:
7143 iter.cpu_file = raw_smp_processor_id();
7144 break;
7145 case DUMP_NONE:
7146 goto out_enable;
7147 default:
7148 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n");
7149 iter.cpu_file = RING_BUFFER_ALL_CPUS;
7152 printk(KERN_TRACE "Dumping ftrace buffer:\n");
7154 /* Did function tracer already get disabled? */
7155 if (ftrace_is_dead()) {
7156 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
7157 printk("# MAY BE MISSING FUNCTION EVENTS\n");
7161 * We need to stop all tracing on all CPUS to read the
7162 * the next buffer. This is a bit expensive, but is
7163 * not done often. We fill all what we can read,
7164 * and then release the locks again.
7167 while (!trace_empty(&iter)) {
7169 if (!cnt)
7170 printk(KERN_TRACE "---------------------------------\n");
7172 cnt++;
7174 /* reset all but tr, trace, and overruns */
7175 memset(&iter.seq, 0,
7176 sizeof(struct trace_iterator) -
7177 offsetof(struct trace_iterator, seq));
7178 iter.iter_flags |= TRACE_FILE_LAT_FMT;
7179 iter.pos = -1;
7181 if (trace_find_next_entry_inc(&iter) != NULL) {
7182 int ret;
7184 ret = print_trace_line(&iter);
7185 if (ret != TRACE_TYPE_NO_CONSUME)
7186 trace_consume(&iter);
7188 touch_nmi_watchdog();
7190 trace_printk_seq(&iter.seq);
7193 if (!cnt)
7194 printk(KERN_TRACE " (ftrace buffer empty)\n");
7195 else
7196 printk(KERN_TRACE "---------------------------------\n");
7198 out_enable:
7199 tr->trace_flags |= old_userobj;
7201 for_each_tracing_cpu(cpu) {
7202 atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
7204 atomic_dec(&dump_running);
7205 local_irq_restore(flags);
7207 EXPORT_SYMBOL_GPL(ftrace_dump);
7209 __init static int tracer_alloc_buffers(void)
7211 int ring_buf_size;
7212 int ret = -ENOMEM;
7215 * Make sure we don't accidently add more trace options
7216 * than we have bits for.
7218 BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE);
7220 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL))
7221 goto out;
7223 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL))
7224 goto out_free_buffer_mask;
7226 /* Only allocate trace_printk buffers if a trace_printk exists */
7227 if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt)
7228 /* Must be called before global_trace.buffer is allocated */
7229 trace_printk_init_buffers();
7231 /* To save memory, keep the ring buffer size to its minimum */
7232 if (ring_buffer_expanded)
7233 ring_buf_size = trace_buf_size;
7234 else
7235 ring_buf_size = 1;
7237 cpumask_copy(tracing_buffer_mask, cpu_possible_mask);
7238 cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask);
7240 raw_spin_lock_init(&global_trace.start_lock);
7242 /* Used for event triggers */
7243 temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE);
7244 if (!temp_buffer)
7245 goto out_free_cpumask;
7247 if (trace_create_savedcmd() < 0)
7248 goto out_free_temp_buffer;
7250 /* TODO: make the number of buffers hot pluggable with CPUS */
7251 if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) {
7252 printk(KERN_ERR "tracer: failed to allocate ring buffer!\n");
7253 WARN_ON(1);
7254 goto out_free_savedcmd;
7257 if (global_trace.buffer_disabled)
7258 tracing_off();
7260 if (trace_boot_clock) {
7261 ret = tracing_set_clock(&global_trace, trace_boot_clock);
7262 if (ret < 0)
7263 pr_warning("Trace clock %s not defined, going back to default\n",
7264 trace_boot_clock);
7268 * register_tracer() might reference current_trace, so it
7269 * needs to be set before we register anything. This is
7270 * just a bootstrap of current_trace anyway.
7272 global_trace.current_trace = &nop_trace;
7274 global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
7276 ftrace_init_global_array_ops(&global_trace);
7278 init_trace_flags_index(&global_trace);
7280 register_tracer(&nop_trace);
7282 /* All seems OK, enable tracing */
7283 tracing_disabled = 0;
7285 atomic_notifier_chain_register(&panic_notifier_list,
7286 &trace_panic_notifier);
7288 register_die_notifier(&trace_die_notifier);
7290 global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
7292 INIT_LIST_HEAD(&global_trace.systems);
7293 INIT_LIST_HEAD(&global_trace.events);
7294 list_add(&global_trace.list, &ftrace_trace_arrays);
7296 apply_trace_boot_options();
7298 register_snapshot_cmd();
7300 return 0;
7302 out_free_savedcmd:
7303 free_saved_cmdlines_buffer(savedcmd);
7304 out_free_temp_buffer:
7305 ring_buffer_free(temp_buffer);
7306 out_free_cpumask:
7307 free_cpumask_var(global_trace.tracing_cpumask);
7308 out_free_buffer_mask:
7309 free_cpumask_var(tracing_buffer_mask);
7310 out:
7311 return ret;
7314 void __init trace_init(void)
7316 if (tracepoint_printk) {
7317 tracepoint_print_iter =
7318 kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
7319 if (WARN_ON(!tracepoint_print_iter))
7320 tracepoint_printk = 0;
7322 tracer_alloc_buffers();
7323 trace_event_init();
7326 __init static int clear_boot_tracer(void)
7329 * The default tracer at boot buffer is an init section.
7330 * This function is called in lateinit. If we did not
7331 * find the boot tracer, then clear it out, to prevent
7332 * later registration from accessing the buffer that is
7333 * about to be freed.
7335 if (!default_bootup_tracer)
7336 return 0;
7338 printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n",
7339 default_bootup_tracer);
7340 default_bootup_tracer = NULL;
7342 return 0;
7345 fs_initcall(tracer_init_tracefs);
7346 late_initcall(clear_boot_tracer);