2 * ring buffer based function tracer
7 * Originally taken from the RT patch by:
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/pagemap.h>
24 #include <linux/hardirq.h>
25 #include <linux/linkage.h>
26 #include <linux/uaccess.h>
27 #include <linux/kprobes.h>
28 #include <linux/ftrace.h>
29 #include <linux/module.h>
30 #include <linux/percpu.h>
31 #include <linux/splice.h>
32 #include <linux/kdebug.h>
33 #include <linux/string.h>
34 #include <linux/rwsem.h>
35 #include <linux/slab.h>
36 #include <linux/ctype.h>
37 #include <linux/init.h>
38 #include <linux/poll.h>
39 #include <linux/nmi.h>
41 #include <linux/sched/rt.h>
44 #include "trace_output.h"
47 * On boot up, the ring buffer is set to the minimum size, so that
48 * we do not waste memory on systems that are not using tracing.
50 bool ring_buffer_expanded;
53 * We need to change this state when a selftest is running.
54 * A selftest will lurk into the ring-buffer to count the
55 * entries inserted during the selftest although some concurrent
56 * insertions into the ring-buffer such as trace_printk could occurred
57 * at the same time, giving false positive or negative results.
59 static bool __read_mostly tracing_selftest_running;
62 * If a tracer is running, we do not want to run SELFTEST.
64 bool __read_mostly tracing_selftest_disabled;
66 /* For tracers that don't implement custom flags */
67 static struct tracer_opt dummy_tracer_opt[] = {
71 static struct tracer_flags dummy_tracer_flags = {
73 .opts = dummy_tracer_opt
77 dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set)
83 * To prevent the comm cache from being overwritten when no
84 * tracing is active, only save the comm when a trace event
87 static DEFINE_PER_CPU(bool, trace_cmdline_save);
90 * Kill all tracing for good (never come back).
91 * It is initialized to 1 but will turn to zero if the initialization
92 * of the tracer is successful. But that is the only place that sets
95 static int tracing_disabled = 1;
97 DEFINE_PER_CPU(int, ftrace_cpu_disabled);
99 cpumask_var_t __read_mostly tracing_buffer_mask;
102 * ftrace_dump_on_oops - variable to dump ftrace buffer on oops
104 * If there is an oops (or kernel panic) and the ftrace_dump_on_oops
105 * is set, then ftrace_dump is called. This will output the contents
106 * of the ftrace buffers to the console. This is very useful for
107 * capturing traces that lead to crashes and outputing it to a
110 * It is default off, but you can enable it with either specifying
111 * "ftrace_dump_on_oops" in the kernel command line, or setting
112 * /proc/sys/kernel/ftrace_dump_on_oops
113 * Set 1 if you want to dump buffers of all CPUs
114 * Set 2 if you want to dump the buffer of the CPU that triggered oops
117 enum ftrace_dump_mode ftrace_dump_on_oops;
119 /* When set, tracing will stop when a WARN*() is hit */
120 int __disable_trace_on_warning;
122 static int tracing_set_tracer(struct trace_array *tr, const char *buf);
124 #define MAX_TRACER_SIZE 100
125 static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata;
126 static char *default_bootup_tracer;
128 static bool allocate_snapshot;
130 static int __init set_cmdline_ftrace(char *str)
132 strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE);
133 default_bootup_tracer = bootup_tracer_buf;
134 /* We are using ftrace early, expand it */
135 ring_buffer_expanded = true;
138 __setup("ftrace=", set_cmdline_ftrace);
140 static int __init set_ftrace_dump_on_oops(char *str)
142 if (*str++ != '=' || !*str) {
143 ftrace_dump_on_oops = DUMP_ALL;
147 if (!strcmp("orig_cpu", str)) {
148 ftrace_dump_on_oops = DUMP_ORIG;
154 __setup("ftrace_dump_on_oops", set_ftrace_dump_on_oops);
156 static int __init stop_trace_on_warning(char *str)
158 if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
159 __disable_trace_on_warning = 1;
162 __setup("traceoff_on_warning", stop_trace_on_warning);
164 static int __init boot_alloc_snapshot(char *str)
166 allocate_snapshot = true;
167 /* We also need the main ring buffer expanded */
168 ring_buffer_expanded = true;
171 __setup("alloc_snapshot", boot_alloc_snapshot);
174 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;
175 static char *trace_boot_options __initdata;
177 static int __init set_trace_boot_options(char *str)
179 strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE);
180 trace_boot_options = trace_boot_options_buf;
183 __setup("trace_options=", set_trace_boot_options);
185 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata;
186 static char *trace_boot_clock __initdata;
188 static int __init set_trace_boot_clock(char *str)
190 strlcpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE);
191 trace_boot_clock = trace_boot_clock_buf;
194 __setup("trace_clock=", set_trace_boot_clock);
197 unsigned long long ns2usecs(cycle_t nsec)
205 * The global_trace is the descriptor that holds the tracing
206 * buffers for the live tracing. For each CPU, it contains
207 * a link list of pages that will store trace entries. The
208 * page descriptor of the pages in the memory is used to hold
209 * the link list by linking the lru item in the page descriptor
210 * to each of the pages in the buffer per CPU.
212 * For each active CPU there is a data field that holds the
213 * pages for the buffer for that CPU. Each CPU has the same number
214 * of pages allocated for its buffer.
216 static struct trace_array global_trace;
218 LIST_HEAD(ftrace_trace_arrays);
220 int trace_array_get(struct trace_array *this_tr)
222 struct trace_array *tr;
225 mutex_lock(&trace_types_lock);
226 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
233 mutex_unlock(&trace_types_lock);
238 static void __trace_array_put(struct trace_array *this_tr)
240 WARN_ON(!this_tr->ref);
244 void trace_array_put(struct trace_array *this_tr)
246 mutex_lock(&trace_types_lock);
247 __trace_array_put(this_tr);
248 mutex_unlock(&trace_types_lock);
251 int filter_check_discard(struct ftrace_event_file *file, void *rec,
252 struct ring_buffer *buffer,
253 struct ring_buffer_event *event)
255 if (unlikely(file->flags & FTRACE_EVENT_FL_FILTERED) &&
256 !filter_match_preds(file->filter, rec)) {
257 ring_buffer_discard_commit(buffer, event);
263 EXPORT_SYMBOL_GPL(filter_check_discard);
265 int call_filter_check_discard(struct ftrace_event_call *call, void *rec,
266 struct ring_buffer *buffer,
267 struct ring_buffer_event *event)
269 if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) &&
270 !filter_match_preds(call->filter, rec)) {
271 ring_buffer_discard_commit(buffer, event);
277 EXPORT_SYMBOL_GPL(call_filter_check_discard);
279 static cycle_t buffer_ftrace_now(struct trace_buffer *buf, int cpu)
283 /* Early boot up does not have a buffer yet */
285 return trace_clock_local();
287 ts = ring_buffer_time_stamp(buf->buffer, cpu);
288 ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts);
293 cycle_t ftrace_now(int cpu)
295 return buffer_ftrace_now(&global_trace.trace_buffer, cpu);
299 * tracing_is_enabled - Show if global_trace has been disabled
301 * Shows if the global trace has been enabled or not. It uses the
302 * mirror flag "buffer_disabled" to be used in fast paths such as for
303 * the irqsoff tracer. But it may be inaccurate due to races. If you
304 * need to know the accurate state, use tracing_is_on() which is a little
305 * slower, but accurate.
307 int tracing_is_enabled(void)
310 * For quick access (irqsoff uses this in fast path), just
311 * return the mirror variable of the state of the ring buffer.
312 * It's a little racy, but we don't really care.
315 return !global_trace.buffer_disabled;
319 * trace_buf_size is the size in bytes that is allocated
320 * for a buffer. Note, the number of bytes is always rounded
323 * This number is purposely set to a low number of 16384.
324 * If the dump on oops happens, it will be much appreciated
325 * to not have to wait for all that output. Anyway this can be
326 * boot time and run time configurable.
328 #define TRACE_BUF_SIZE_DEFAULT 1441792UL /* 16384 * 88 (sizeof(entry)) */
330 static unsigned long trace_buf_size = TRACE_BUF_SIZE_DEFAULT;
332 /* trace_types holds a link list of available tracers. */
333 static struct tracer *trace_types __read_mostly;
336 * trace_types_lock is used to protect the trace_types list.
338 DEFINE_MUTEX(trace_types_lock);
341 * serialize the access of the ring buffer
343 * ring buffer serializes readers, but it is low level protection.
344 * The validity of the events (which returns by ring_buffer_peek() ..etc)
345 * are not protected by ring buffer.
347 * The content of events may become garbage if we allow other process consumes
348 * these events concurrently:
349 * A) the page of the consumed events may become a normal page
350 * (not reader page) in ring buffer, and this page will be rewrited
351 * by events producer.
352 * B) The page of the consumed events may become a page for splice_read,
353 * and this page will be returned to system.
355 * These primitives allow multi process access to different cpu ring buffer
358 * These primitives don't distinguish read-only and read-consume access.
359 * Multi read-only access are also serialized.
363 static DECLARE_RWSEM(all_cpu_access_lock);
364 static DEFINE_PER_CPU(struct mutex, cpu_access_lock);
366 static inline void trace_access_lock(int cpu)
368 if (cpu == RING_BUFFER_ALL_CPUS) {
369 /* gain it for accessing the whole ring buffer. */
370 down_write(&all_cpu_access_lock);
372 /* gain it for accessing a cpu ring buffer. */
374 /* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */
375 down_read(&all_cpu_access_lock);
377 /* Secondly block other access to this @cpu ring buffer. */
378 mutex_lock(&per_cpu(cpu_access_lock, cpu));
382 static inline void trace_access_unlock(int cpu)
384 if (cpu == RING_BUFFER_ALL_CPUS) {
385 up_write(&all_cpu_access_lock);
387 mutex_unlock(&per_cpu(cpu_access_lock, cpu));
388 up_read(&all_cpu_access_lock);
392 static inline void trace_access_lock_init(void)
396 for_each_possible_cpu(cpu)
397 mutex_init(&per_cpu(cpu_access_lock, cpu));
402 static DEFINE_MUTEX(access_lock);
404 static inline void trace_access_lock(int cpu)
407 mutex_lock(&access_lock);
410 static inline void trace_access_unlock(int cpu)
413 mutex_unlock(&access_lock);
416 static inline void trace_access_lock_init(void)
422 /* trace_flags holds trace_options default values */
423 unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
424 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME |
425 TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |
426 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS | TRACE_ITER_FUNCTION;
428 static void tracer_tracing_on(struct trace_array *tr)
430 if (tr->trace_buffer.buffer)
431 ring_buffer_record_on(tr->trace_buffer.buffer);
433 * This flag is looked at when buffers haven't been allocated
434 * yet, or by some tracers (like irqsoff), that just want to
435 * know if the ring buffer has been disabled, but it can handle
436 * races of where it gets disabled but we still do a record.
437 * As the check is in the fast path of the tracers, it is more
438 * important to be fast than accurate.
440 tr->buffer_disabled = 0;
441 /* Make the flag seen by readers */
446 * tracing_on - enable tracing buffers
448 * This function enables tracing buffers that may have been
449 * disabled with tracing_off.
451 void tracing_on(void)
453 tracer_tracing_on(&global_trace);
455 EXPORT_SYMBOL_GPL(tracing_on);
458 * __trace_puts - write a constant string into the trace buffer.
459 * @ip: The address of the caller
460 * @str: The constant string to write
461 * @size: The size of the string.
463 int __trace_puts(unsigned long ip, const char *str, int size)
465 struct ring_buffer_event *event;
466 struct ring_buffer *buffer;
467 struct print_entry *entry;
468 unsigned long irq_flags;
472 if (!(trace_flags & TRACE_ITER_PRINTK))
475 pc = preempt_count();
477 if (unlikely(tracing_selftest_running || tracing_disabled))
480 alloc = sizeof(*entry) + size + 2; /* possible \n added */
482 local_save_flags(irq_flags);
483 buffer = global_trace.trace_buffer.buffer;
484 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc,
489 entry = ring_buffer_event_data(event);
492 memcpy(&entry->buf, str, size);
494 /* Add a newline if necessary */
495 if (entry->buf[size - 1] != '\n') {
496 entry->buf[size] = '\n';
497 entry->buf[size + 1] = '\0';
499 entry->buf[size] = '\0';
501 __buffer_unlock_commit(buffer, event);
502 ftrace_trace_stack(buffer, irq_flags, 4, pc);
506 EXPORT_SYMBOL_GPL(__trace_puts);
509 * __trace_bputs - write the pointer to a constant string into trace buffer
510 * @ip: The address of the caller
511 * @str: The constant string to write to the buffer to
513 int __trace_bputs(unsigned long ip, const char *str)
515 struct ring_buffer_event *event;
516 struct ring_buffer *buffer;
517 struct bputs_entry *entry;
518 unsigned long irq_flags;
519 int size = sizeof(struct bputs_entry);
522 if (!(trace_flags & TRACE_ITER_PRINTK))
525 pc = preempt_count();
527 if (unlikely(tracing_selftest_running || tracing_disabled))
530 local_save_flags(irq_flags);
531 buffer = global_trace.trace_buffer.buffer;
532 event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
537 entry = ring_buffer_event_data(event);
541 __buffer_unlock_commit(buffer, event);
542 ftrace_trace_stack(buffer, irq_flags, 4, pc);
546 EXPORT_SYMBOL_GPL(__trace_bputs);
548 #ifdef CONFIG_TRACER_SNAPSHOT
550 * trace_snapshot - take a snapshot of the current buffer.
552 * This causes a swap between the snapshot buffer and the current live
553 * tracing buffer. You can use this to take snapshots of the live
554 * trace when some condition is triggered, but continue to trace.
556 * Note, make sure to allocate the snapshot with either
557 * a tracing_snapshot_alloc(), or by doing it manually
558 * with: echo 1 > /sys/kernel/debug/tracing/snapshot
560 * If the snapshot buffer is not allocated, it will stop tracing.
561 * Basically making a permanent snapshot.
563 void tracing_snapshot(void)
565 struct trace_array *tr = &global_trace;
566 struct tracer *tracer = tr->current_trace;
570 internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n");
571 internal_trace_puts("*** snapshot is being ignored ***\n");
575 if (!tr->allocated_snapshot) {
576 internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n");
577 internal_trace_puts("*** stopping trace here! ***\n");
582 /* Note, snapshot can not be used when the tracer uses it */
583 if (tracer->use_max_tr) {
584 internal_trace_puts("*** LATENCY TRACER ACTIVE ***\n");
585 internal_trace_puts("*** Can not use snapshot (sorry) ***\n");
589 local_irq_save(flags);
590 update_max_tr(tr, current, smp_processor_id());
591 local_irq_restore(flags);
593 EXPORT_SYMBOL_GPL(tracing_snapshot);
595 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
596 struct trace_buffer *size_buf, int cpu_id);
597 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val);
599 static int alloc_snapshot(struct trace_array *tr)
603 if (!tr->allocated_snapshot) {
605 /* allocate spare buffer */
606 ret = resize_buffer_duplicate_size(&tr->max_buffer,
607 &tr->trace_buffer, RING_BUFFER_ALL_CPUS);
611 tr->allocated_snapshot = true;
617 static void free_snapshot(struct trace_array *tr)
620 * We don't free the ring buffer. instead, resize it because
621 * The max_tr ring buffer has some state (e.g. ring->clock) and
622 * we want preserve it.
624 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS);
625 set_buffer_entries(&tr->max_buffer, 1);
626 tracing_reset_online_cpus(&tr->max_buffer);
627 tr->allocated_snapshot = false;
631 * tracing_alloc_snapshot - allocate snapshot buffer.
633 * This only allocates the snapshot buffer if it isn't already
634 * allocated - it doesn't also take a snapshot.
636 * This is meant to be used in cases where the snapshot buffer needs
637 * to be set up for events that can't sleep but need to be able to
638 * trigger a snapshot.
640 int tracing_alloc_snapshot(void)
642 struct trace_array *tr = &global_trace;
645 ret = alloc_snapshot(tr);
650 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
653 * trace_snapshot_alloc - allocate and take a snapshot of the current buffer.
655 * This is similar to trace_snapshot(), but it will allocate the
656 * snapshot buffer if it isn't already allocated. Use this only
657 * where it is safe to sleep, as the allocation may sleep.
659 * This causes a swap between the snapshot buffer and the current live
660 * tracing buffer. You can use this to take snapshots of the live
661 * trace when some condition is triggered, but continue to trace.
663 void tracing_snapshot_alloc(void)
667 ret = tracing_alloc_snapshot();
673 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
675 void tracing_snapshot(void)
677 WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used");
679 EXPORT_SYMBOL_GPL(tracing_snapshot);
680 int tracing_alloc_snapshot(void)
682 WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used");
685 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
686 void tracing_snapshot_alloc(void)
691 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
692 #endif /* CONFIG_TRACER_SNAPSHOT */
694 static void tracer_tracing_off(struct trace_array *tr)
696 if (tr->trace_buffer.buffer)
697 ring_buffer_record_off(tr->trace_buffer.buffer);
699 * This flag is looked at when buffers haven't been allocated
700 * yet, or by some tracers (like irqsoff), that just want to
701 * know if the ring buffer has been disabled, but it can handle
702 * races of where it gets disabled but we still do a record.
703 * As the check is in the fast path of the tracers, it is more
704 * important to be fast than accurate.
706 tr->buffer_disabled = 1;
707 /* Make the flag seen by readers */
712 * tracing_off - turn off tracing buffers
714 * This function stops the tracing buffers from recording data.
715 * It does not disable any overhead the tracers themselves may
716 * be causing. This function simply causes all recording to
717 * the ring buffers to fail.
719 void tracing_off(void)
721 tracer_tracing_off(&global_trace);
723 EXPORT_SYMBOL_GPL(tracing_off);
725 void disable_trace_on_warning(void)
727 if (__disable_trace_on_warning)
732 * tracer_tracing_is_on - show real state of ring buffer enabled
733 * @tr : the trace array to know if ring buffer is enabled
735 * Shows real state of the ring buffer if it is enabled or not.
737 static int tracer_tracing_is_on(struct trace_array *tr)
739 if (tr->trace_buffer.buffer)
740 return ring_buffer_record_is_on(tr->trace_buffer.buffer);
741 return !tr->buffer_disabled;
745 * tracing_is_on - show state of ring buffers enabled
747 int tracing_is_on(void)
749 return tracer_tracing_is_on(&global_trace);
751 EXPORT_SYMBOL_GPL(tracing_is_on);
753 static int __init set_buf_size(char *str)
755 unsigned long buf_size;
759 buf_size = memparse(str, &str);
760 /* nr_entries can not be zero */
763 trace_buf_size = buf_size;
766 __setup("trace_buf_size=", set_buf_size);
768 static int __init set_tracing_thresh(char *str)
770 unsigned long threshold;
775 ret = kstrtoul(str, 0, &threshold);
778 tracing_thresh = threshold * 1000;
781 __setup("tracing_thresh=", set_tracing_thresh);
783 unsigned long nsecs_to_usecs(unsigned long nsecs)
788 /* These must match the bit postions in trace_iterator_flags */
789 static const char *trace_options[] = {
822 int in_ns; /* is this clock in nanoseconds? */
824 { trace_clock_local, "local", 1 },
825 { trace_clock_global, "global", 1 },
826 { trace_clock_counter, "counter", 0 },
827 { trace_clock_jiffies, "uptime", 0 },
828 { trace_clock, "perf", 1 },
829 { ktime_get_mono_fast_ns, "mono", 1 },
834 * trace_parser_get_init - gets the buffer for trace parser
836 int trace_parser_get_init(struct trace_parser *parser, int size)
838 memset(parser, 0, sizeof(*parser));
840 parser->buffer = kmalloc(size, GFP_KERNEL);
849 * trace_parser_put - frees the buffer for trace parser
851 void trace_parser_put(struct trace_parser *parser)
853 kfree(parser->buffer);
857 * trace_get_user - reads the user input string separated by space
858 * (matched by isspace(ch))
860 * For each string found the 'struct trace_parser' is updated,
861 * and the function returns.
863 * Returns number of bytes read.
865 * See kernel/trace/trace.h for 'struct trace_parser' details.
867 int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
868 size_t cnt, loff_t *ppos)
875 trace_parser_clear(parser);
877 ret = get_user(ch, ubuf++);
885 * The parser is not finished with the last write,
886 * continue reading the user input without skipping spaces.
889 /* skip white space */
890 while (cnt && isspace(ch)) {
891 ret = get_user(ch, ubuf++);
898 /* only spaces were written */
908 /* read the non-space input */
909 while (cnt && !isspace(ch)) {
910 if (parser->idx < parser->size - 1)
911 parser->buffer[parser->idx++] = ch;
916 ret = get_user(ch, ubuf++);
923 /* We either got finished input or we have to wait for another call. */
925 parser->buffer[parser->idx] = 0;
926 parser->cont = false;
927 } else if (parser->idx < parser->size - 1) {
929 parser->buffer[parser->idx++] = ch;
942 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt)
946 if (s->len <= s->readpos)
949 len = s->len - s->readpos;
952 memcpy(buf, s->buffer + s->readpos, cnt);
958 unsigned long __read_mostly tracing_thresh;
960 #ifdef CONFIG_TRACER_MAX_TRACE
962 * Copy the new maximum trace into the separate maximum-trace
963 * structure. (this way the maximum trace is permanently saved,
964 * for later retrieval via /sys/kernel/debug/tracing/latency_trace)
967 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
969 struct trace_buffer *trace_buf = &tr->trace_buffer;
970 struct trace_buffer *max_buf = &tr->max_buffer;
971 struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu);
972 struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu);
975 max_buf->time_start = data->preempt_timestamp;
977 max_data->saved_latency = tr->max_latency;
978 max_data->critical_start = data->critical_start;
979 max_data->critical_end = data->critical_end;
981 memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
982 max_data->pid = tsk->pid;
984 * If tsk == current, then use current_uid(), as that does not use
985 * RCU. The irq tracer can be called out of RCU scope.
988 max_data->uid = current_uid();
990 max_data->uid = task_uid(tsk);
992 max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
993 max_data->policy = tsk->policy;
994 max_data->rt_priority = tsk->rt_priority;
996 /* record this tasks comm */
997 tracing_record_cmdline(tsk);
1001 * update_max_tr - snapshot all trace buffers from global_trace to max_tr
1003 * @tsk: the task with the latency
1004 * @cpu: The cpu that initiated the trace.
1006 * Flip the buffers between the @tr and the max_tr and record information
1007 * about which task was the cause of this latency.
1010 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1012 struct ring_buffer *buf;
1017 WARN_ON_ONCE(!irqs_disabled());
1019 if (!tr->allocated_snapshot) {
1020 /* Only the nop tracer should hit this when disabling */
1021 WARN_ON_ONCE(tr->current_trace != &nop_trace);
1025 arch_spin_lock(&tr->max_lock);
1027 buf = tr->trace_buffer.buffer;
1028 tr->trace_buffer.buffer = tr->max_buffer.buffer;
1029 tr->max_buffer.buffer = buf;
1031 __update_max_tr(tr, tsk, cpu);
1032 arch_spin_unlock(&tr->max_lock);
1036 * update_max_tr_single - only copy one trace over, and reset the rest
1038 * @tsk - task with the latency
1039 * @cpu - the cpu of the buffer to copy.
1041 * Flip the trace of a single CPU buffer between the @tr and the max_tr.
1044 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
1051 WARN_ON_ONCE(!irqs_disabled());
1052 if (!tr->allocated_snapshot) {
1053 /* Only the nop tracer should hit this when disabling */
1054 WARN_ON_ONCE(tr->current_trace != &nop_trace);
1058 arch_spin_lock(&tr->max_lock);
1060 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu);
1062 if (ret == -EBUSY) {
1064 * We failed to swap the buffer due to a commit taking
1065 * place on this CPU. We fail to record, but we reset
1066 * the max trace buffer (no one writes directly to it)
1067 * and flag that it failed.
1069 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_,
1070 "Failed to swap buffers due to commit in progress\n");
1073 WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY);
1075 __update_max_tr(tr, tsk, cpu);
1076 arch_spin_unlock(&tr->max_lock);
1078 #endif /* CONFIG_TRACER_MAX_TRACE */
1080 static int wait_on_pipe(struct trace_iterator *iter, bool full)
1082 /* Iterators are static, they should be filled or empty */
1083 if (trace_buffer_iter(iter, iter->cpu_file))
1086 return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file,
1090 #ifdef CONFIG_FTRACE_STARTUP_TEST
1091 static int run_tracer_selftest(struct tracer *type)
1093 struct trace_array *tr = &global_trace;
1094 struct tracer *saved_tracer = tr->current_trace;
1097 if (!type->selftest || tracing_selftest_disabled)
1101 * Run a selftest on this tracer.
1102 * Here we reset the trace buffer, and set the current
1103 * tracer to be this tracer. The tracer can then run some
1104 * internal tracing to verify that everything is in order.
1105 * If we fail, we do not register this tracer.
1107 tracing_reset_online_cpus(&tr->trace_buffer);
1109 tr->current_trace = type;
1111 #ifdef CONFIG_TRACER_MAX_TRACE
1112 if (type->use_max_tr) {
1113 /* If we expanded the buffers, make sure the max is expanded too */
1114 if (ring_buffer_expanded)
1115 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size,
1116 RING_BUFFER_ALL_CPUS);
1117 tr->allocated_snapshot = true;
1121 /* the test is responsible for initializing and enabling */
1122 pr_info("Testing tracer %s: ", type->name);
1123 ret = type->selftest(type, tr);
1124 /* the test is responsible for resetting too */
1125 tr->current_trace = saved_tracer;
1127 printk(KERN_CONT "FAILED!\n");
1128 /* Add the warning after printing 'FAILED' */
1132 /* Only reset on passing, to avoid touching corrupted buffers */
1133 tracing_reset_online_cpus(&tr->trace_buffer);
1135 #ifdef CONFIG_TRACER_MAX_TRACE
1136 if (type->use_max_tr) {
1137 tr->allocated_snapshot = false;
1139 /* Shrink the max buffer again */
1140 if (ring_buffer_expanded)
1141 ring_buffer_resize(tr->max_buffer.buffer, 1,
1142 RING_BUFFER_ALL_CPUS);
1146 printk(KERN_CONT "PASSED\n");
1150 static inline int run_tracer_selftest(struct tracer *type)
1154 #endif /* CONFIG_FTRACE_STARTUP_TEST */
1157 * register_tracer - register a tracer with the ftrace system.
1158 * @type - the plugin for the tracer
1160 * Register a new plugin tracer.
1162 int register_tracer(struct tracer *type)
1168 pr_info("Tracer must have a name\n");
1172 if (strlen(type->name) >= MAX_TRACER_SIZE) {
1173 pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE);
1177 mutex_lock(&trace_types_lock);
1179 tracing_selftest_running = true;
1181 for (t = trace_types; t; t = t->next) {
1182 if (strcmp(type->name, t->name) == 0) {
1184 pr_info("Tracer %s already registered\n",
1191 if (!type->set_flag)
1192 type->set_flag = &dummy_set_flag;
1194 type->flags = &dummy_tracer_flags;
1196 if (!type->flags->opts)
1197 type->flags->opts = dummy_tracer_opt;
1199 ret = run_tracer_selftest(type);
1203 type->next = trace_types;
1207 tracing_selftest_running = false;
1208 mutex_unlock(&trace_types_lock);
1210 if (ret || !default_bootup_tracer)
1213 if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE))
1216 printk(KERN_INFO "Starting tracer '%s'\n", type->name);
1217 /* Do we want this tracer to start on bootup? */
1218 tracing_set_tracer(&global_trace, type->name);
1219 default_bootup_tracer = NULL;
1220 /* disable other selftests, since this will break it. */
1221 tracing_selftest_disabled = true;
1222 #ifdef CONFIG_FTRACE_STARTUP_TEST
1223 printk(KERN_INFO "Disabling FTRACE selftests due to running tracer '%s'\n",
1231 void tracing_reset(struct trace_buffer *buf, int cpu)
1233 struct ring_buffer *buffer = buf->buffer;
1238 ring_buffer_record_disable(buffer);
1240 /* Make sure all commits have finished */
1241 synchronize_sched();
1242 ring_buffer_reset_cpu(buffer, cpu);
1244 ring_buffer_record_enable(buffer);
1247 void tracing_reset_online_cpus(struct trace_buffer *buf)
1249 struct ring_buffer *buffer = buf->buffer;
1255 ring_buffer_record_disable(buffer);
1257 /* Make sure all commits have finished */
1258 synchronize_sched();
1260 buf->time_start = buffer_ftrace_now(buf, buf->cpu);
1262 for_each_online_cpu(cpu)
1263 ring_buffer_reset_cpu(buffer, cpu);
1265 ring_buffer_record_enable(buffer);
1268 /* Must have trace_types_lock held */
1269 void tracing_reset_all_online_cpus(void)
1271 struct trace_array *tr;
1273 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
1274 tracing_reset_online_cpus(&tr->trace_buffer);
1275 #ifdef CONFIG_TRACER_MAX_TRACE
1276 tracing_reset_online_cpus(&tr->max_buffer);
1281 #define SAVED_CMDLINES_DEFAULT 128
1282 #define NO_CMDLINE_MAP UINT_MAX
1283 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED;
1284 struct saved_cmdlines_buffer {
1285 unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1];
1286 unsigned *map_cmdline_to_pid;
1287 unsigned cmdline_num;
1289 char *saved_cmdlines;
1291 static struct saved_cmdlines_buffer *savedcmd;
1293 /* temporary disable recording */
1294 static atomic_t trace_record_cmdline_disabled __read_mostly;
1296 static inline char *get_saved_cmdlines(int idx)
1298 return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN];
1301 static inline void set_cmdline(int idx, const char *cmdline)
1303 memcpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN);
1306 static int allocate_cmdlines_buffer(unsigned int val,
1307 struct saved_cmdlines_buffer *s)
1309 s->map_cmdline_to_pid = kmalloc(val * sizeof(*s->map_cmdline_to_pid),
1311 if (!s->map_cmdline_to_pid)
1314 s->saved_cmdlines = kmalloc(val * TASK_COMM_LEN, GFP_KERNEL);
1315 if (!s->saved_cmdlines) {
1316 kfree(s->map_cmdline_to_pid);
1321 s->cmdline_num = val;
1322 memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP,
1323 sizeof(s->map_pid_to_cmdline));
1324 memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP,
1325 val * sizeof(*s->map_cmdline_to_pid));
1330 static int trace_create_savedcmd(void)
1334 savedcmd = kmalloc(sizeof(*savedcmd), GFP_KERNEL);
1338 ret = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT, savedcmd);
1348 int is_tracing_stopped(void)
1350 return global_trace.stop_count;
1354 * tracing_start - quick start of the tracer
1356 * If tracing is enabled but was stopped by tracing_stop,
1357 * this will start the tracer back up.
1359 void tracing_start(void)
1361 struct ring_buffer *buffer;
1362 unsigned long flags;
1364 if (tracing_disabled)
1367 raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1368 if (--global_trace.stop_count) {
1369 if (global_trace.stop_count < 0) {
1370 /* Someone screwed up their debugging */
1372 global_trace.stop_count = 0;
1377 /* Prevent the buffers from switching */
1378 arch_spin_lock(&global_trace.max_lock);
1380 buffer = global_trace.trace_buffer.buffer;
1382 ring_buffer_record_enable(buffer);
1384 #ifdef CONFIG_TRACER_MAX_TRACE
1385 buffer = global_trace.max_buffer.buffer;
1387 ring_buffer_record_enable(buffer);
1390 arch_spin_unlock(&global_trace.max_lock);
1393 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1396 static void tracing_start_tr(struct trace_array *tr)
1398 struct ring_buffer *buffer;
1399 unsigned long flags;
1401 if (tracing_disabled)
1404 /* If global, we need to also start the max tracer */
1405 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1406 return tracing_start();
1408 raw_spin_lock_irqsave(&tr->start_lock, flags);
1410 if (--tr->stop_count) {
1411 if (tr->stop_count < 0) {
1412 /* Someone screwed up their debugging */
1419 buffer = tr->trace_buffer.buffer;
1421 ring_buffer_record_enable(buffer);
1424 raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1428 * tracing_stop - quick stop of the tracer
1430 * Light weight way to stop tracing. Use in conjunction with
1433 void tracing_stop(void)
1435 struct ring_buffer *buffer;
1436 unsigned long flags;
1438 raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1439 if (global_trace.stop_count++)
1442 /* Prevent the buffers from switching */
1443 arch_spin_lock(&global_trace.max_lock);
1445 buffer = global_trace.trace_buffer.buffer;
1447 ring_buffer_record_disable(buffer);
1449 #ifdef CONFIG_TRACER_MAX_TRACE
1450 buffer = global_trace.max_buffer.buffer;
1452 ring_buffer_record_disable(buffer);
1455 arch_spin_unlock(&global_trace.max_lock);
1458 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1461 static void tracing_stop_tr(struct trace_array *tr)
1463 struct ring_buffer *buffer;
1464 unsigned long flags;
1466 /* If global, we need to also stop the max tracer */
1467 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1468 return tracing_stop();
1470 raw_spin_lock_irqsave(&tr->start_lock, flags);
1471 if (tr->stop_count++)
1474 buffer = tr->trace_buffer.buffer;
1476 ring_buffer_record_disable(buffer);
1479 raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1482 void trace_stop_cmdline_recording(void);
1484 static int trace_save_cmdline(struct task_struct *tsk)
1488 if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT))
1492 * It's not the end of the world if we don't get
1493 * the lock, but we also don't want to spin
1494 * nor do we want to disable interrupts,
1495 * so if we miss here, then better luck next time.
1497 if (!arch_spin_trylock(&trace_cmdline_lock))
1500 idx = savedcmd->map_pid_to_cmdline[tsk->pid];
1501 if (idx == NO_CMDLINE_MAP) {
1502 idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num;
1505 * Check whether the cmdline buffer at idx has a pid
1506 * mapped. We are going to overwrite that entry so we
1507 * need to clear the map_pid_to_cmdline. Otherwise we
1508 * would read the new comm for the old pid.
1510 pid = savedcmd->map_cmdline_to_pid[idx];
1511 if (pid != NO_CMDLINE_MAP)
1512 savedcmd->map_pid_to_cmdline[pid] = NO_CMDLINE_MAP;
1514 savedcmd->map_cmdline_to_pid[idx] = tsk->pid;
1515 savedcmd->map_pid_to_cmdline[tsk->pid] = idx;
1517 savedcmd->cmdline_idx = idx;
1520 set_cmdline(idx, tsk->comm);
1522 arch_spin_unlock(&trace_cmdline_lock);
1527 static void __trace_find_cmdline(int pid, char comm[])
1532 strcpy(comm, "<idle>");
1536 if (WARN_ON_ONCE(pid < 0)) {
1537 strcpy(comm, "<XXX>");
1541 if (pid > PID_MAX_DEFAULT) {
1542 strcpy(comm, "<...>");
1546 map = savedcmd->map_pid_to_cmdline[pid];
1547 if (map != NO_CMDLINE_MAP)
1548 strcpy(comm, get_saved_cmdlines(map));
1550 strcpy(comm, "<...>");
1553 void trace_find_cmdline(int pid, char comm[])
1556 arch_spin_lock(&trace_cmdline_lock);
1558 __trace_find_cmdline(pid, comm);
1560 arch_spin_unlock(&trace_cmdline_lock);
1564 void tracing_record_cmdline(struct task_struct *tsk)
1566 if (atomic_read(&trace_record_cmdline_disabled) || !tracing_is_on())
1569 if (!__this_cpu_read(trace_cmdline_save))
1572 if (trace_save_cmdline(tsk))
1573 __this_cpu_write(trace_cmdline_save, false);
1577 tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
1580 struct task_struct *tsk = current;
1582 entry->preempt_count = pc & 0xff;
1583 entry->pid = (tsk) ? tsk->pid : 0;
1585 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
1586 (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) |
1588 TRACE_FLAG_IRQS_NOSUPPORT |
1590 ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
1591 ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) |
1592 (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
1593 (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
1595 EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
1597 struct ring_buffer_event *
1598 trace_buffer_lock_reserve(struct ring_buffer *buffer,
1601 unsigned long flags, int pc)
1603 struct ring_buffer_event *event;
1605 event = ring_buffer_lock_reserve(buffer, len);
1606 if (event != NULL) {
1607 struct trace_entry *ent = ring_buffer_event_data(event);
1609 tracing_generic_entry_update(ent, flags, pc);
1617 __buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event)
1619 __this_cpu_write(trace_cmdline_save, true);
1620 ring_buffer_unlock_commit(buffer, event);
1624 __trace_buffer_unlock_commit(struct ring_buffer *buffer,
1625 struct ring_buffer_event *event,
1626 unsigned long flags, int pc)
1628 __buffer_unlock_commit(buffer, event);
1630 ftrace_trace_stack(buffer, flags, 6, pc);
1631 ftrace_trace_userstack(buffer, flags, pc);
1634 void trace_buffer_unlock_commit(struct ring_buffer *buffer,
1635 struct ring_buffer_event *event,
1636 unsigned long flags, int pc)
1638 __trace_buffer_unlock_commit(buffer, event, flags, pc);
1640 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit);
1642 static struct ring_buffer *temp_buffer;
1644 struct ring_buffer_event *
1645 trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
1646 struct ftrace_event_file *ftrace_file,
1647 int type, unsigned long len,
1648 unsigned long flags, int pc)
1650 struct ring_buffer_event *entry;
1652 *current_rb = ftrace_file->tr->trace_buffer.buffer;
1653 entry = trace_buffer_lock_reserve(*current_rb,
1654 type, len, flags, pc);
1656 * If tracing is off, but we have triggers enabled
1657 * we still need to look at the event data. Use the temp_buffer
1658 * to store the trace event for the tigger to use. It's recusive
1659 * safe and will not be recorded anywhere.
1661 if (!entry && ftrace_file->flags & FTRACE_EVENT_FL_TRIGGER_COND) {
1662 *current_rb = temp_buffer;
1663 entry = trace_buffer_lock_reserve(*current_rb,
1664 type, len, flags, pc);
1668 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve);
1670 struct ring_buffer_event *
1671 trace_current_buffer_lock_reserve(struct ring_buffer **current_rb,
1672 int type, unsigned long len,
1673 unsigned long flags, int pc)
1675 *current_rb = global_trace.trace_buffer.buffer;
1676 return trace_buffer_lock_reserve(*current_rb,
1677 type, len, flags, pc);
1679 EXPORT_SYMBOL_GPL(trace_current_buffer_lock_reserve);
1681 void trace_current_buffer_unlock_commit(struct ring_buffer *buffer,
1682 struct ring_buffer_event *event,
1683 unsigned long flags, int pc)
1685 __trace_buffer_unlock_commit(buffer, event, flags, pc);
1687 EXPORT_SYMBOL_GPL(trace_current_buffer_unlock_commit);
1689 void trace_buffer_unlock_commit_regs(struct ring_buffer *buffer,
1690 struct ring_buffer_event *event,
1691 unsigned long flags, int pc,
1692 struct pt_regs *regs)
1694 __buffer_unlock_commit(buffer, event);
1696 ftrace_trace_stack_regs(buffer, flags, 0, pc, regs);
1697 ftrace_trace_userstack(buffer, flags, pc);
1699 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit_regs);
1701 void trace_current_buffer_discard_commit(struct ring_buffer *buffer,
1702 struct ring_buffer_event *event)
1704 ring_buffer_discard_commit(buffer, event);
1706 EXPORT_SYMBOL_GPL(trace_current_buffer_discard_commit);
1709 trace_function(struct trace_array *tr,
1710 unsigned long ip, unsigned long parent_ip, unsigned long flags,
1713 struct ftrace_event_call *call = &event_function;
1714 struct ring_buffer *buffer = tr->trace_buffer.buffer;
1715 struct ring_buffer_event *event;
1716 struct ftrace_entry *entry;
1718 /* If we are reading the ring buffer, don't trace */
1719 if (unlikely(__this_cpu_read(ftrace_cpu_disabled)))
1722 event = trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry),
1726 entry = ring_buffer_event_data(event);
1728 entry->parent_ip = parent_ip;
1730 if (!call_filter_check_discard(call, entry, buffer, event))
1731 __buffer_unlock_commit(buffer, event);
1734 #ifdef CONFIG_STACKTRACE
1736 #define FTRACE_STACK_MAX_ENTRIES (PAGE_SIZE / sizeof(unsigned long))
1737 struct ftrace_stack {
1738 unsigned long calls[FTRACE_STACK_MAX_ENTRIES];
1741 static DEFINE_PER_CPU(struct ftrace_stack, ftrace_stack);
1742 static DEFINE_PER_CPU(int, ftrace_stack_reserve);
1744 static void __ftrace_trace_stack(struct ring_buffer *buffer,
1745 unsigned long flags,
1746 int skip, int pc, struct pt_regs *regs)
1748 struct ftrace_event_call *call = &event_kernel_stack;
1749 struct ring_buffer_event *event;
1750 struct stack_entry *entry;
1751 struct stack_trace trace;
1753 int size = FTRACE_STACK_ENTRIES;
1755 trace.nr_entries = 0;
1759 * Since events can happen in NMIs there's no safe way to
1760 * use the per cpu ftrace_stacks. We reserve it and if an interrupt
1761 * or NMI comes in, it will just have to use the default
1762 * FTRACE_STACK_SIZE.
1764 preempt_disable_notrace();
1766 use_stack = __this_cpu_inc_return(ftrace_stack_reserve);
1768 * We don't need any atomic variables, just a barrier.
1769 * If an interrupt comes in, we don't care, because it would
1770 * have exited and put the counter back to what we want.
1771 * We just need a barrier to keep gcc from moving things
1775 if (use_stack == 1) {
1776 trace.entries = this_cpu_ptr(ftrace_stack.calls);
1777 trace.max_entries = FTRACE_STACK_MAX_ENTRIES;
1780 save_stack_trace_regs(regs, &trace);
1782 save_stack_trace(&trace);
1784 if (trace.nr_entries > size)
1785 size = trace.nr_entries;
1787 /* From now on, use_stack is a boolean */
1790 size *= sizeof(unsigned long);
1792 event = trace_buffer_lock_reserve(buffer, TRACE_STACK,
1793 sizeof(*entry) + size, flags, pc);
1796 entry = ring_buffer_event_data(event);
1798 memset(&entry->caller, 0, size);
1801 memcpy(&entry->caller, trace.entries,
1802 trace.nr_entries * sizeof(unsigned long));
1804 trace.max_entries = FTRACE_STACK_ENTRIES;
1805 trace.entries = entry->caller;
1807 save_stack_trace_regs(regs, &trace);
1809 save_stack_trace(&trace);
1812 entry->size = trace.nr_entries;
1814 if (!call_filter_check_discard(call, entry, buffer, event))
1815 __buffer_unlock_commit(buffer, event);
1818 /* Again, don't let gcc optimize things here */
1820 __this_cpu_dec(ftrace_stack_reserve);
1821 preempt_enable_notrace();
1825 void ftrace_trace_stack_regs(struct ring_buffer *buffer, unsigned long flags,
1826 int skip, int pc, struct pt_regs *regs)
1828 if (!(trace_flags & TRACE_ITER_STACKTRACE))
1831 __ftrace_trace_stack(buffer, flags, skip, pc, regs);
1834 void ftrace_trace_stack(struct ring_buffer *buffer, unsigned long flags,
1837 if (!(trace_flags & TRACE_ITER_STACKTRACE))
1840 __ftrace_trace_stack(buffer, flags, skip, pc, NULL);
1843 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
1846 __ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL);
1850 * trace_dump_stack - record a stack back trace in the trace buffer
1851 * @skip: Number of functions to skip (helper handlers)
1853 void trace_dump_stack(int skip)
1855 unsigned long flags;
1857 if (tracing_disabled || tracing_selftest_running)
1860 local_save_flags(flags);
1863 * Skip 3 more, seems to get us at the caller of
1867 __ftrace_trace_stack(global_trace.trace_buffer.buffer,
1868 flags, skip, preempt_count(), NULL);
1871 static DEFINE_PER_CPU(int, user_stack_count);
1874 ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
1876 struct ftrace_event_call *call = &event_user_stack;
1877 struct ring_buffer_event *event;
1878 struct userstack_entry *entry;
1879 struct stack_trace trace;
1881 if (!(trace_flags & TRACE_ITER_USERSTACKTRACE))
1885 * NMIs can not handle page faults, even with fix ups.
1886 * The save user stack can (and often does) fault.
1888 if (unlikely(in_nmi()))
1892 * prevent recursion, since the user stack tracing may
1893 * trigger other kernel events.
1896 if (__this_cpu_read(user_stack_count))
1899 __this_cpu_inc(user_stack_count);
1901 event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK,
1902 sizeof(*entry), flags, pc);
1904 goto out_drop_count;
1905 entry = ring_buffer_event_data(event);
1907 entry->tgid = current->tgid;
1908 memset(&entry->caller, 0, sizeof(entry->caller));
1910 trace.nr_entries = 0;
1911 trace.max_entries = FTRACE_STACK_ENTRIES;
1913 trace.entries = entry->caller;
1915 save_stack_trace_user(&trace);
1916 if (!call_filter_check_discard(call, entry, buffer, event))
1917 __buffer_unlock_commit(buffer, event);
1920 __this_cpu_dec(user_stack_count);
1926 static void __trace_userstack(struct trace_array *tr, unsigned long flags)
1928 ftrace_trace_userstack(tr, flags, preempt_count());
1932 #endif /* CONFIG_STACKTRACE */
1934 /* created for use with alloc_percpu */
1935 struct trace_buffer_struct {
1936 char buffer[TRACE_BUF_SIZE];
1939 static struct trace_buffer_struct *trace_percpu_buffer;
1940 static struct trace_buffer_struct *trace_percpu_sirq_buffer;
1941 static struct trace_buffer_struct *trace_percpu_irq_buffer;
1942 static struct trace_buffer_struct *trace_percpu_nmi_buffer;
1945 * The buffer used is dependent on the context. There is a per cpu
1946 * buffer for normal context, softirq contex, hard irq context and
1947 * for NMI context. Thise allows for lockless recording.
1949 * Note, if the buffers failed to be allocated, then this returns NULL
1951 static char *get_trace_buf(void)
1953 struct trace_buffer_struct *percpu_buffer;
1956 * If we have allocated per cpu buffers, then we do not
1957 * need to do any locking.
1960 percpu_buffer = trace_percpu_nmi_buffer;
1962 percpu_buffer = trace_percpu_irq_buffer;
1963 else if (in_softirq())
1964 percpu_buffer = trace_percpu_sirq_buffer;
1966 percpu_buffer = trace_percpu_buffer;
1971 return this_cpu_ptr(&percpu_buffer->buffer[0]);
1974 static int alloc_percpu_trace_buffer(void)
1976 struct trace_buffer_struct *buffers;
1977 struct trace_buffer_struct *sirq_buffers;
1978 struct trace_buffer_struct *irq_buffers;
1979 struct trace_buffer_struct *nmi_buffers;
1981 buffers = alloc_percpu(struct trace_buffer_struct);
1985 sirq_buffers = alloc_percpu(struct trace_buffer_struct);
1989 irq_buffers = alloc_percpu(struct trace_buffer_struct);
1993 nmi_buffers = alloc_percpu(struct trace_buffer_struct);
1997 trace_percpu_buffer = buffers;
1998 trace_percpu_sirq_buffer = sirq_buffers;
1999 trace_percpu_irq_buffer = irq_buffers;
2000 trace_percpu_nmi_buffer = nmi_buffers;
2005 free_percpu(irq_buffers);
2007 free_percpu(sirq_buffers);
2009 free_percpu(buffers);
2011 WARN(1, "Could not allocate percpu trace_printk buffer");
2015 static int buffers_allocated;
2017 void trace_printk_init_buffers(void)
2019 if (buffers_allocated)
2022 if (alloc_percpu_trace_buffer())
2025 /* trace_printk() is for debug use only. Don't use it in production. */
2027 pr_warning("\n**********************************************************\n");
2028 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
2029 pr_warning("** **\n");
2030 pr_warning("** trace_printk() being used. Allocating extra memory. **\n");
2031 pr_warning("** **\n");
2032 pr_warning("** This means that this is a DEBUG kernel and it is **\n");
2033 pr_warning("** unsafe for produciton use. **\n");
2034 pr_warning("** **\n");
2035 pr_warning("** If you see this message and you are not debugging **\n");
2036 pr_warning("** the kernel, report this immediately to your vendor! **\n");
2037 pr_warning("** **\n");
2038 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
2039 pr_warning("**********************************************************\n");
2041 /* Expand the buffers to set size */
2042 tracing_update_buffers();
2044 buffers_allocated = 1;
2047 * trace_printk_init_buffers() can be called by modules.
2048 * If that happens, then we need to start cmdline recording
2049 * directly here. If the global_trace.buffer is already
2050 * allocated here, then this was called by module code.
2052 if (global_trace.trace_buffer.buffer)
2053 tracing_start_cmdline_record();
2056 void trace_printk_start_comm(void)
2058 /* Start tracing comms if trace printk is set */
2059 if (!buffers_allocated)
2061 tracing_start_cmdline_record();
2064 static void trace_printk_start_stop_comm(int enabled)
2066 if (!buffers_allocated)
2070 tracing_start_cmdline_record();
2072 tracing_stop_cmdline_record();
2076 * trace_vbprintk - write binary msg to tracing buffer
2079 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args)
2081 struct ftrace_event_call *call = &event_bprint;
2082 struct ring_buffer_event *event;
2083 struct ring_buffer *buffer;
2084 struct trace_array *tr = &global_trace;
2085 struct bprint_entry *entry;
2086 unsigned long flags;
2088 int len = 0, size, pc;
2090 if (unlikely(tracing_selftest_running || tracing_disabled))
2093 /* Don't pollute graph traces with trace_vprintk internals */
2094 pause_graph_tracing();
2096 pc = preempt_count();
2097 preempt_disable_notrace();
2099 tbuffer = get_trace_buf();
2105 len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args);
2107 if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0)
2110 local_save_flags(flags);
2111 size = sizeof(*entry) + sizeof(u32) * len;
2112 buffer = tr->trace_buffer.buffer;
2113 event = trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size,
2117 entry = ring_buffer_event_data(event);
2121 memcpy(entry->buf, tbuffer, sizeof(u32) * len);
2122 if (!call_filter_check_discard(call, entry, buffer, event)) {
2123 __buffer_unlock_commit(buffer, event);
2124 ftrace_trace_stack(buffer, flags, 6, pc);
2128 preempt_enable_notrace();
2129 unpause_graph_tracing();
2133 EXPORT_SYMBOL_GPL(trace_vbprintk);
2136 __trace_array_vprintk(struct ring_buffer *buffer,
2137 unsigned long ip, const char *fmt, va_list args)
2139 struct ftrace_event_call *call = &event_print;
2140 struct ring_buffer_event *event;
2141 int len = 0, size, pc;
2142 struct print_entry *entry;
2143 unsigned long flags;
2146 if (tracing_disabled || tracing_selftest_running)
2149 /* Don't pollute graph traces with trace_vprintk internals */
2150 pause_graph_tracing();
2152 pc = preempt_count();
2153 preempt_disable_notrace();
2156 tbuffer = get_trace_buf();
2162 len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args);
2164 local_save_flags(flags);
2165 size = sizeof(*entry) + len + 1;
2166 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
2170 entry = ring_buffer_event_data(event);
2173 memcpy(&entry->buf, tbuffer, len + 1);
2174 if (!call_filter_check_discard(call, entry, buffer, event)) {
2175 __buffer_unlock_commit(buffer, event);
2176 ftrace_trace_stack(buffer, flags, 6, pc);
2179 preempt_enable_notrace();
2180 unpause_graph_tracing();
2185 int trace_array_vprintk(struct trace_array *tr,
2186 unsigned long ip, const char *fmt, va_list args)
2188 return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
2191 int trace_array_printk(struct trace_array *tr,
2192 unsigned long ip, const char *fmt, ...)
2197 if (!(trace_flags & TRACE_ITER_PRINTK))
2201 ret = trace_array_vprintk(tr, ip, fmt, ap);
2206 int trace_array_printk_buf(struct ring_buffer *buffer,
2207 unsigned long ip, const char *fmt, ...)
2212 if (!(trace_flags & TRACE_ITER_PRINTK))
2216 ret = __trace_array_vprintk(buffer, ip, fmt, ap);
2221 int trace_vprintk(unsigned long ip, const char *fmt, va_list args)
2223 return trace_array_vprintk(&global_trace, ip, fmt, args);
2225 EXPORT_SYMBOL_GPL(trace_vprintk);
2227 static void trace_iterator_increment(struct trace_iterator *iter)
2229 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu);
2233 ring_buffer_read(buf_iter, NULL);
2236 static struct trace_entry *
2237 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts,
2238 unsigned long *lost_events)
2240 struct ring_buffer_event *event;
2241 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu);
2244 event = ring_buffer_iter_peek(buf_iter, ts);
2246 event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts,
2250 iter->ent_size = ring_buffer_event_length(event);
2251 return ring_buffer_event_data(event);
2257 static struct trace_entry *
2258 __find_next_entry(struct trace_iterator *iter, int *ent_cpu,
2259 unsigned long *missing_events, u64 *ent_ts)
2261 struct ring_buffer *buffer = iter->trace_buffer->buffer;
2262 struct trace_entry *ent, *next = NULL;
2263 unsigned long lost_events = 0, next_lost = 0;
2264 int cpu_file = iter->cpu_file;
2265 u64 next_ts = 0, ts;
2271 * If we are in a per_cpu trace file, don't bother by iterating over
2272 * all cpu and peek directly.
2274 if (cpu_file > RING_BUFFER_ALL_CPUS) {
2275 if (ring_buffer_empty_cpu(buffer, cpu_file))
2277 ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events);
2279 *ent_cpu = cpu_file;
2284 for_each_tracing_cpu(cpu) {
2286 if (ring_buffer_empty_cpu(buffer, cpu))
2289 ent = peek_next_entry(iter, cpu, &ts, &lost_events);
2292 * Pick the entry with the smallest timestamp:
2294 if (ent && (!next || ts < next_ts)) {
2298 next_lost = lost_events;
2299 next_size = iter->ent_size;
2303 iter->ent_size = next_size;
2306 *ent_cpu = next_cpu;
2312 *missing_events = next_lost;
2317 /* Find the next real entry, without updating the iterator itself */
2318 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
2319 int *ent_cpu, u64 *ent_ts)
2321 return __find_next_entry(iter, ent_cpu, NULL, ent_ts);
2324 /* Find the next real entry, and increment the iterator to the next entry */
2325 void *trace_find_next_entry_inc(struct trace_iterator *iter)
2327 iter->ent = __find_next_entry(iter, &iter->cpu,
2328 &iter->lost_events, &iter->ts);
2331 trace_iterator_increment(iter);
2333 return iter->ent ? iter : NULL;
2336 static void trace_consume(struct trace_iterator *iter)
2338 ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts,
2339 &iter->lost_events);
2342 static void *s_next(struct seq_file *m, void *v, loff_t *pos)
2344 struct trace_iterator *iter = m->private;
2348 WARN_ON_ONCE(iter->leftover);
2352 /* can't go backwards */
2357 ent = trace_find_next_entry_inc(iter);
2361 while (ent && iter->idx < i)
2362 ent = trace_find_next_entry_inc(iter);
2369 void tracing_iter_reset(struct trace_iterator *iter, int cpu)
2371 struct ring_buffer_event *event;
2372 struct ring_buffer_iter *buf_iter;
2373 unsigned long entries = 0;
2376 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0;
2378 buf_iter = trace_buffer_iter(iter, cpu);
2382 ring_buffer_iter_reset(buf_iter);
2385 * We could have the case with the max latency tracers
2386 * that a reset never took place on a cpu. This is evident
2387 * by the timestamp being before the start of the buffer.
2389 while ((event = ring_buffer_iter_peek(buf_iter, &ts))) {
2390 if (ts >= iter->trace_buffer->time_start)
2393 ring_buffer_read(buf_iter, NULL);
2396 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries;
2400 * The current tracer is copied to avoid a global locking
2403 static void *s_start(struct seq_file *m, loff_t *pos)
2405 struct trace_iterator *iter = m->private;
2406 struct trace_array *tr = iter->tr;
2407 int cpu_file = iter->cpu_file;
2413 * copy the tracer to avoid using a global lock all around.
2414 * iter->trace is a copy of current_trace, the pointer to the
2415 * name may be used instead of a strcmp(), as iter->trace->name
2416 * will point to the same string as current_trace->name.
2418 mutex_lock(&trace_types_lock);
2419 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name))
2420 *iter->trace = *tr->current_trace;
2421 mutex_unlock(&trace_types_lock);
2423 #ifdef CONFIG_TRACER_MAX_TRACE
2424 if (iter->snapshot && iter->trace->use_max_tr)
2425 return ERR_PTR(-EBUSY);
2428 if (!iter->snapshot)
2429 atomic_inc(&trace_record_cmdline_disabled);
2431 if (*pos != iter->pos) {
2436 if (cpu_file == RING_BUFFER_ALL_CPUS) {
2437 for_each_tracing_cpu(cpu)
2438 tracing_iter_reset(iter, cpu);
2440 tracing_iter_reset(iter, cpu_file);
2443 for (p = iter; p && l < *pos; p = s_next(m, p, &l))
2448 * If we overflowed the seq_file before, then we want
2449 * to just reuse the trace_seq buffer again.
2455 p = s_next(m, p, &l);
2459 trace_event_read_lock();
2460 trace_access_lock(cpu_file);
2464 static void s_stop(struct seq_file *m, void *p)
2466 struct trace_iterator *iter = m->private;
2468 #ifdef CONFIG_TRACER_MAX_TRACE
2469 if (iter->snapshot && iter->trace->use_max_tr)
2473 if (!iter->snapshot)
2474 atomic_dec(&trace_record_cmdline_disabled);
2476 trace_access_unlock(iter->cpu_file);
2477 trace_event_read_unlock();
2481 get_total_entries(struct trace_buffer *buf,
2482 unsigned long *total, unsigned long *entries)
2484 unsigned long count;
2490 for_each_tracing_cpu(cpu) {
2491 count = ring_buffer_entries_cpu(buf->buffer, cpu);
2493 * If this buffer has skipped entries, then we hold all
2494 * entries for the trace and we need to ignore the
2495 * ones before the time stamp.
2497 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) {
2498 count -= per_cpu_ptr(buf->data, cpu)->skipped_entries;
2499 /* total is the same as the entries */
2503 ring_buffer_overrun_cpu(buf->buffer, cpu);
2508 static void print_lat_help_header(struct seq_file *m)
2510 seq_puts(m, "# _------=> CPU# \n"
2511 "# / _-----=> irqs-off \n"
2512 "# | / _----=> need-resched \n"
2513 "# || / _---=> hardirq/softirq \n"
2514 "# ||| / _--=> preempt-depth \n"
2516 "# cmd pid ||||| time | caller \n"
2517 "# \\ / ||||| \\ | / \n");
2520 static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
2522 unsigned long total;
2523 unsigned long entries;
2525 get_total_entries(buf, &total, &entries);
2526 seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu #P:%d\n",
2527 entries, total, num_online_cpus());
2531 static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m)
2533 print_event_info(buf, m);
2534 seq_puts(m, "# TASK-PID CPU# TIMESTAMP FUNCTION\n"
2538 static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m)
2540 print_event_info(buf, m);
2541 seq_puts(m, "# _-----=> irqs-off\n"
2542 "# / _----=> need-resched\n"
2543 "# | / _---=> hardirq/softirq\n"
2544 "# || / _--=> preempt-depth\n"
2546 "# TASK-PID CPU# |||| TIMESTAMP FUNCTION\n"
2547 "# | | | |||| | |\n");
2551 print_trace_header(struct seq_file *m, struct trace_iterator *iter)
2553 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK);
2554 struct trace_buffer *buf = iter->trace_buffer;
2555 struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu);
2556 struct tracer *type = iter->trace;
2557 unsigned long entries;
2558 unsigned long total;
2559 const char *name = "preemption";
2563 get_total_entries(buf, &total, &entries);
2565 seq_printf(m, "# %s latency trace v1.1.5 on %s\n",
2567 seq_puts(m, "# -----------------------------------"
2568 "---------------------------------\n");
2569 seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |"
2570 " (M:%s VP:%d, KP:%d, SP:%d HP:%d",
2571 nsecs_to_usecs(data->saved_latency),
2575 #if defined(CONFIG_PREEMPT_NONE)
2577 #elif defined(CONFIG_PREEMPT_VOLUNTARY)
2579 #elif defined(CONFIG_PREEMPT)
2584 /* These are reserved for later use */
2587 seq_printf(m, " #P:%d)\n", num_online_cpus());
2591 seq_puts(m, "# -----------------\n");
2592 seq_printf(m, "# | task: %.16s-%d "
2593 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n",
2594 data->comm, data->pid,
2595 from_kuid_munged(seq_user_ns(m), data->uid), data->nice,
2596 data->policy, data->rt_priority);
2597 seq_puts(m, "# -----------------\n");
2599 if (data->critical_start) {
2600 seq_puts(m, "# => started at: ");
2601 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags);
2602 trace_print_seq(m, &iter->seq);
2603 seq_puts(m, "\n# => ended at: ");
2604 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags);
2605 trace_print_seq(m, &iter->seq);
2606 seq_puts(m, "\n#\n");
2612 static void test_cpu_buff_start(struct trace_iterator *iter)
2614 struct trace_seq *s = &iter->seq;
2616 if (!(trace_flags & TRACE_ITER_ANNOTATE))
2619 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
2622 if (cpumask_test_cpu(iter->cpu, iter->started))
2625 if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries)
2628 cpumask_set_cpu(iter->cpu, iter->started);
2630 /* Don't print started cpu buffer for the first entry of the trace */
2632 trace_seq_printf(s, "##### CPU %u buffer started ####\n",
2636 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
2638 struct trace_seq *s = &iter->seq;
2639 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK);
2640 struct trace_entry *entry;
2641 struct trace_event *event;
2645 test_cpu_buff_start(iter);
2647 event = ftrace_find_event(entry->type);
2649 if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
2650 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2651 trace_print_lat_context(iter);
2653 trace_print_context(iter);
2656 if (trace_seq_has_overflowed(s))
2657 return TRACE_TYPE_PARTIAL_LINE;
2660 return event->funcs->trace(iter, sym_flags, event);
2662 trace_seq_printf(s, "Unknown type %d\n", entry->type);
2664 return trace_handle_return(s);
2667 static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
2669 struct trace_seq *s = &iter->seq;
2670 struct trace_entry *entry;
2671 struct trace_event *event;
2675 if (trace_flags & TRACE_ITER_CONTEXT_INFO)
2676 trace_seq_printf(s, "%d %d %llu ",
2677 entry->pid, iter->cpu, iter->ts);
2679 if (trace_seq_has_overflowed(s))
2680 return TRACE_TYPE_PARTIAL_LINE;
2682 event = ftrace_find_event(entry->type);
2684 return event->funcs->raw(iter, 0, event);
2686 trace_seq_printf(s, "%d ?\n", entry->type);
2688 return trace_handle_return(s);
2691 static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
2693 struct trace_seq *s = &iter->seq;
2694 unsigned char newline = '\n';
2695 struct trace_entry *entry;
2696 struct trace_event *event;
2700 if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
2701 SEQ_PUT_HEX_FIELD(s, entry->pid);
2702 SEQ_PUT_HEX_FIELD(s, iter->cpu);
2703 SEQ_PUT_HEX_FIELD(s, iter->ts);
2704 if (trace_seq_has_overflowed(s))
2705 return TRACE_TYPE_PARTIAL_LINE;
2708 event = ftrace_find_event(entry->type);
2710 enum print_line_t ret = event->funcs->hex(iter, 0, event);
2711 if (ret != TRACE_TYPE_HANDLED)
2715 SEQ_PUT_FIELD(s, newline);
2717 return trace_handle_return(s);
2720 static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
2722 struct trace_seq *s = &iter->seq;
2723 struct trace_entry *entry;
2724 struct trace_event *event;
2728 if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
2729 SEQ_PUT_FIELD(s, entry->pid);
2730 SEQ_PUT_FIELD(s, iter->cpu);
2731 SEQ_PUT_FIELD(s, iter->ts);
2732 if (trace_seq_has_overflowed(s))
2733 return TRACE_TYPE_PARTIAL_LINE;
2736 event = ftrace_find_event(entry->type);
2737 return event ? event->funcs->binary(iter, 0, event) :
2741 int trace_empty(struct trace_iterator *iter)
2743 struct ring_buffer_iter *buf_iter;
2746 /* If we are looking at one CPU buffer, only check that one */
2747 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
2748 cpu = iter->cpu_file;
2749 buf_iter = trace_buffer_iter(iter, cpu);
2751 if (!ring_buffer_iter_empty(buf_iter))
2754 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2760 for_each_tracing_cpu(cpu) {
2761 buf_iter = trace_buffer_iter(iter, cpu);
2763 if (!ring_buffer_iter_empty(buf_iter))
2766 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2774 /* Called with trace_event_read_lock() held. */
2775 enum print_line_t print_trace_line(struct trace_iterator *iter)
2777 enum print_line_t ret;
2779 if (iter->lost_events) {
2780 trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
2781 iter->cpu, iter->lost_events);
2782 if (trace_seq_has_overflowed(&iter->seq))
2783 return TRACE_TYPE_PARTIAL_LINE;
2786 if (iter->trace && iter->trace->print_line) {
2787 ret = iter->trace->print_line(iter);
2788 if (ret != TRACE_TYPE_UNHANDLED)
2792 if (iter->ent->type == TRACE_BPUTS &&
2793 trace_flags & TRACE_ITER_PRINTK &&
2794 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2795 return trace_print_bputs_msg_only(iter);
2797 if (iter->ent->type == TRACE_BPRINT &&
2798 trace_flags & TRACE_ITER_PRINTK &&
2799 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2800 return trace_print_bprintk_msg_only(iter);
2802 if (iter->ent->type == TRACE_PRINT &&
2803 trace_flags & TRACE_ITER_PRINTK &&
2804 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2805 return trace_print_printk_msg_only(iter);
2807 if (trace_flags & TRACE_ITER_BIN)
2808 return print_bin_fmt(iter);
2810 if (trace_flags & TRACE_ITER_HEX)
2811 return print_hex_fmt(iter);
2813 if (trace_flags & TRACE_ITER_RAW)
2814 return print_raw_fmt(iter);
2816 return print_trace_fmt(iter);
2819 void trace_latency_header(struct seq_file *m)
2821 struct trace_iterator *iter = m->private;
2823 /* print nothing if the buffers are empty */
2824 if (trace_empty(iter))
2827 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2828 print_trace_header(m, iter);
2830 if (!(trace_flags & TRACE_ITER_VERBOSE))
2831 print_lat_help_header(m);
2834 void trace_default_header(struct seq_file *m)
2836 struct trace_iterator *iter = m->private;
2838 if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
2841 if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
2842 /* print nothing if the buffers are empty */
2843 if (trace_empty(iter))
2845 print_trace_header(m, iter);
2846 if (!(trace_flags & TRACE_ITER_VERBOSE))
2847 print_lat_help_header(m);
2849 if (!(trace_flags & TRACE_ITER_VERBOSE)) {
2850 if (trace_flags & TRACE_ITER_IRQ_INFO)
2851 print_func_help_header_irq(iter->trace_buffer, m);
2853 print_func_help_header(iter->trace_buffer, m);
2858 static void test_ftrace_alive(struct seq_file *m)
2860 if (!ftrace_is_dead())
2862 seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n"
2863 "# MAY BE MISSING FUNCTION EVENTS\n");
2866 #ifdef CONFIG_TRACER_MAX_TRACE
2867 static void show_snapshot_main_help(struct seq_file *m)
2869 seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n"
2870 "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
2871 "# Takes a snapshot of the main buffer.\n"
2872 "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n"
2873 "# (Doesn't have to be '2' works with any number that\n"
2874 "# is not a '0' or '1')\n");
2877 static void show_snapshot_percpu_help(struct seq_file *m)
2879 seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n");
2880 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
2881 seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
2882 "# Takes a snapshot of the main buffer for this cpu.\n");
2884 seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n"
2885 "# Must use main snapshot file to allocate.\n");
2887 seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n"
2888 "# (Doesn't have to be '2' works with any number that\n"
2889 "# is not a '0' or '1')\n");
2892 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
2894 if (iter->tr->allocated_snapshot)
2895 seq_puts(m, "#\n# * Snapshot is allocated *\n#\n");
2897 seq_puts(m, "#\n# * Snapshot is freed *\n#\n");
2899 seq_puts(m, "# Snapshot commands:\n");
2900 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
2901 show_snapshot_main_help(m);
2903 show_snapshot_percpu_help(m);
2906 /* Should never be called */
2907 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
2910 static int s_show(struct seq_file *m, void *v)
2912 struct trace_iterator *iter = v;
2915 if (iter->ent == NULL) {
2917 seq_printf(m, "# tracer: %s\n", iter->trace->name);
2919 test_ftrace_alive(m);
2921 if (iter->snapshot && trace_empty(iter))
2922 print_snapshot_help(m, iter);
2923 else if (iter->trace && iter->trace->print_header)
2924 iter->trace->print_header(m);
2926 trace_default_header(m);
2928 } else if (iter->leftover) {
2930 * If we filled the seq_file buffer earlier, we
2931 * want to just show it now.
2933 ret = trace_print_seq(m, &iter->seq);
2935 /* ret should this time be zero, but you never know */
2936 iter->leftover = ret;
2939 print_trace_line(iter);
2940 ret = trace_print_seq(m, &iter->seq);
2942 * If we overflow the seq_file buffer, then it will
2943 * ask us for this data again at start up.
2945 * ret is 0 if seq_file write succeeded.
2948 iter->leftover = ret;
2955 * Should be used after trace_array_get(), trace_types_lock
2956 * ensures that i_cdev was already initialized.
2958 static inline int tracing_get_cpu(struct inode *inode)
2960 if (inode->i_cdev) /* See trace_create_cpu_file() */
2961 return (long)inode->i_cdev - 1;
2962 return RING_BUFFER_ALL_CPUS;
2965 static const struct seq_operations tracer_seq_ops = {
2972 static struct trace_iterator *
2973 __tracing_open(struct inode *inode, struct file *file, bool snapshot)
2975 struct trace_array *tr = inode->i_private;
2976 struct trace_iterator *iter;
2979 if (tracing_disabled)
2980 return ERR_PTR(-ENODEV);
2982 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
2984 return ERR_PTR(-ENOMEM);
2986 iter->buffer_iter = kzalloc(sizeof(*iter->buffer_iter) * num_possible_cpus(),
2988 if (!iter->buffer_iter)
2992 * We make a copy of the current tracer to avoid concurrent
2993 * changes on it while we are reading.
2995 mutex_lock(&trace_types_lock);
2996 iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL);
3000 *iter->trace = *tr->current_trace;
3002 if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL))
3007 #ifdef CONFIG_TRACER_MAX_TRACE
3008 /* Currently only the top directory has a snapshot */
3009 if (tr->current_trace->print_max || snapshot)
3010 iter->trace_buffer = &tr->max_buffer;
3013 iter->trace_buffer = &tr->trace_buffer;
3014 iter->snapshot = snapshot;
3016 iter->cpu_file = tracing_get_cpu(inode);
3017 mutex_init(&iter->mutex);
3019 /* Notify the tracer early; before we stop tracing. */
3020 if (iter->trace && iter->trace->open)
3021 iter->trace->open(iter);
3023 /* Annotate start of buffers if we had overruns */
3024 if (ring_buffer_overruns(iter->trace_buffer->buffer))
3025 iter->iter_flags |= TRACE_FILE_ANNOTATE;
3027 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
3028 if (trace_clocks[tr->clock_id].in_ns)
3029 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
3031 /* stop the trace while dumping if we are not opening "snapshot" */
3032 if (!iter->snapshot)
3033 tracing_stop_tr(tr);
3035 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
3036 for_each_tracing_cpu(cpu) {
3037 iter->buffer_iter[cpu] =
3038 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3040 ring_buffer_read_prepare_sync();
3041 for_each_tracing_cpu(cpu) {
3042 ring_buffer_read_start(iter->buffer_iter[cpu]);
3043 tracing_iter_reset(iter, cpu);
3046 cpu = iter->cpu_file;
3047 iter->buffer_iter[cpu] =
3048 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3049 ring_buffer_read_prepare_sync();
3050 ring_buffer_read_start(iter->buffer_iter[cpu]);
3051 tracing_iter_reset(iter, cpu);
3054 mutex_unlock(&trace_types_lock);
3059 mutex_unlock(&trace_types_lock);
3061 kfree(iter->buffer_iter);
3063 seq_release_private(inode, file);
3064 return ERR_PTR(-ENOMEM);
3067 int tracing_open_generic(struct inode *inode, struct file *filp)
3069 if (tracing_disabled)
3072 filp->private_data = inode->i_private;
3076 bool tracing_is_disabled(void)
3078 return (tracing_disabled) ? true: false;
3082 * Open and update trace_array ref count.
3083 * Must have the current trace_array passed to it.
3085 static int tracing_open_generic_tr(struct inode *inode, struct file *filp)
3087 struct trace_array *tr = inode->i_private;
3089 if (tracing_disabled)
3092 if (trace_array_get(tr) < 0)
3095 filp->private_data = inode->i_private;
3100 static int tracing_release(struct inode *inode, struct file *file)
3102 struct trace_array *tr = inode->i_private;
3103 struct seq_file *m = file->private_data;
3104 struct trace_iterator *iter;
3107 if (!(file->f_mode & FMODE_READ)) {
3108 trace_array_put(tr);
3112 /* Writes do not use seq_file */
3114 mutex_lock(&trace_types_lock);
3116 for_each_tracing_cpu(cpu) {
3117 if (iter->buffer_iter[cpu])
3118 ring_buffer_read_finish(iter->buffer_iter[cpu]);
3121 if (iter->trace && iter->trace->close)
3122 iter->trace->close(iter);
3124 if (!iter->snapshot)
3125 /* reenable tracing if it was previously enabled */
3126 tracing_start_tr(tr);
3128 __trace_array_put(tr);
3130 mutex_unlock(&trace_types_lock);
3132 mutex_destroy(&iter->mutex);
3133 free_cpumask_var(iter->started);
3135 kfree(iter->buffer_iter);
3136 seq_release_private(inode, file);
3141 static int tracing_release_generic_tr(struct inode *inode, struct file *file)
3143 struct trace_array *tr = inode->i_private;
3145 trace_array_put(tr);
3149 static int tracing_single_release_tr(struct inode *inode, struct file *file)
3151 struct trace_array *tr = inode->i_private;
3153 trace_array_put(tr);
3155 return single_release(inode, file);
3158 static int tracing_open(struct inode *inode, struct file *file)
3160 struct trace_array *tr = inode->i_private;
3161 struct trace_iterator *iter;
3164 if (trace_array_get(tr) < 0)
3167 /* If this file was open for write, then erase contents */
3168 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
3169 int cpu = tracing_get_cpu(inode);
3171 if (cpu == RING_BUFFER_ALL_CPUS)
3172 tracing_reset_online_cpus(&tr->trace_buffer);
3174 tracing_reset(&tr->trace_buffer, cpu);
3177 if (file->f_mode & FMODE_READ) {
3178 iter = __tracing_open(inode, file, false);
3180 ret = PTR_ERR(iter);
3181 else if (trace_flags & TRACE_ITER_LATENCY_FMT)
3182 iter->iter_flags |= TRACE_FILE_LAT_FMT;
3186 trace_array_put(tr);
3192 * Some tracers are not suitable for instance buffers.
3193 * A tracer is always available for the global array (toplevel)
3194 * or if it explicitly states that it is.
3197 trace_ok_for_array(struct tracer *t, struct trace_array *tr)
3199 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances;
3202 /* Find the next tracer that this trace array may use */
3203 static struct tracer *
3204 get_tracer_for_array(struct trace_array *tr, struct tracer *t)
3206 while (t && !trace_ok_for_array(t, tr))
3213 t_next(struct seq_file *m, void *v, loff_t *pos)
3215 struct trace_array *tr = m->private;
3216 struct tracer *t = v;
3221 t = get_tracer_for_array(tr, t->next);
3226 static void *t_start(struct seq_file *m, loff_t *pos)
3228 struct trace_array *tr = m->private;
3232 mutex_lock(&trace_types_lock);
3234 t = get_tracer_for_array(tr, trace_types);
3235 for (; t && l < *pos; t = t_next(m, t, &l))
3241 static void t_stop(struct seq_file *m, void *p)
3243 mutex_unlock(&trace_types_lock);
3246 static int t_show(struct seq_file *m, void *v)
3248 struct tracer *t = v;
3253 seq_puts(m, t->name);
3262 static const struct seq_operations show_traces_seq_ops = {
3269 static int show_traces_open(struct inode *inode, struct file *file)
3271 struct trace_array *tr = inode->i_private;
3275 if (tracing_disabled)
3278 ret = seq_open(file, &show_traces_seq_ops);
3282 m = file->private_data;
3289 tracing_write_stub(struct file *filp, const char __user *ubuf,
3290 size_t count, loff_t *ppos)
3295 loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
3299 if (file->f_mode & FMODE_READ)
3300 ret = seq_lseek(file, offset, whence);
3302 file->f_pos = ret = 0;
3307 static const struct file_operations tracing_fops = {
3308 .open = tracing_open,
3310 .write = tracing_write_stub,
3311 .llseek = tracing_lseek,
3312 .release = tracing_release,
3315 static const struct file_operations show_traces_fops = {
3316 .open = show_traces_open,
3318 .release = seq_release,
3319 .llseek = seq_lseek,
3323 * The tracer itself will not take this lock, but still we want
3324 * to provide a consistent cpumask to user-space:
3326 static DEFINE_MUTEX(tracing_cpumask_update_lock);
3329 * Temporary storage for the character representation of the
3330 * CPU bitmask (and one more byte for the newline):
3332 static char mask_str[NR_CPUS + 1];
3335 tracing_cpumask_read(struct file *filp, char __user *ubuf,
3336 size_t count, loff_t *ppos)
3338 struct trace_array *tr = file_inode(filp)->i_private;
3341 mutex_lock(&tracing_cpumask_update_lock);
3343 len = cpumask_scnprintf(mask_str, count, tr->tracing_cpumask);
3344 if (count - len < 2) {
3348 len += sprintf(mask_str + len, "\n");
3349 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1);
3352 mutex_unlock(&tracing_cpumask_update_lock);
3358 tracing_cpumask_write(struct file *filp, const char __user *ubuf,
3359 size_t count, loff_t *ppos)
3361 struct trace_array *tr = file_inode(filp)->i_private;
3362 cpumask_var_t tracing_cpumask_new;
3365 if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL))
3368 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new);
3372 mutex_lock(&tracing_cpumask_update_lock);
3374 local_irq_disable();
3375 arch_spin_lock(&tr->max_lock);
3376 for_each_tracing_cpu(cpu) {
3378 * Increase/decrease the disabled counter if we are
3379 * about to flip a bit in the cpumask:
3381 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3382 !cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3383 atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3384 ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu);
3386 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3387 cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3388 atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3389 ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu);
3392 arch_spin_unlock(&tr->max_lock);
3395 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
3397 mutex_unlock(&tracing_cpumask_update_lock);
3398 free_cpumask_var(tracing_cpumask_new);
3403 free_cpumask_var(tracing_cpumask_new);
3408 static const struct file_operations tracing_cpumask_fops = {
3409 .open = tracing_open_generic_tr,
3410 .read = tracing_cpumask_read,
3411 .write = tracing_cpumask_write,
3412 .release = tracing_release_generic_tr,
3413 .llseek = generic_file_llseek,
3416 static int tracing_trace_options_show(struct seq_file *m, void *v)
3418 struct tracer_opt *trace_opts;
3419 struct trace_array *tr = m->private;
3423 mutex_lock(&trace_types_lock);
3424 tracer_flags = tr->current_trace->flags->val;
3425 trace_opts = tr->current_trace->flags->opts;
3427 for (i = 0; trace_options[i]; i++) {
3428 if (trace_flags & (1 << i))
3429 seq_printf(m, "%s\n", trace_options[i]);
3431 seq_printf(m, "no%s\n", trace_options[i]);
3434 for (i = 0; trace_opts[i].name; i++) {
3435 if (tracer_flags & trace_opts[i].bit)
3436 seq_printf(m, "%s\n", trace_opts[i].name);
3438 seq_printf(m, "no%s\n", trace_opts[i].name);
3440 mutex_unlock(&trace_types_lock);
3445 static int __set_tracer_option(struct trace_array *tr,
3446 struct tracer_flags *tracer_flags,
3447 struct tracer_opt *opts, int neg)
3449 struct tracer *trace = tr->current_trace;
3452 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg);
3457 tracer_flags->val &= ~opts->bit;
3459 tracer_flags->val |= opts->bit;
3463 /* Try to assign a tracer specific option */
3464 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg)
3466 struct tracer *trace = tr->current_trace;
3467 struct tracer_flags *tracer_flags = trace->flags;
3468 struct tracer_opt *opts = NULL;
3471 for (i = 0; tracer_flags->opts[i].name; i++) {
3472 opts = &tracer_flags->opts[i];
3474 if (strcmp(cmp, opts->name) == 0)
3475 return __set_tracer_option(tr, trace->flags, opts, neg);
3481 /* Some tracers require overwrite to stay enabled */
3482 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
3484 if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set)
3490 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled)
3492 /* do nothing if flag is already set */
3493 if (!!(trace_flags & mask) == !!enabled)
3496 /* Give the tracer a chance to approve the change */
3497 if (tr->current_trace->flag_changed)
3498 if (tr->current_trace->flag_changed(tr, mask, !!enabled))
3502 trace_flags |= mask;
3504 trace_flags &= ~mask;
3506 if (mask == TRACE_ITER_RECORD_CMD)
3507 trace_event_enable_cmd_record(enabled);
3509 if (mask == TRACE_ITER_OVERWRITE) {
3510 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled);
3511 #ifdef CONFIG_TRACER_MAX_TRACE
3512 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled);
3516 if (mask == TRACE_ITER_PRINTK)
3517 trace_printk_start_stop_comm(enabled);
3522 static int trace_set_options(struct trace_array *tr, char *option)
3529 cmp = strstrip(option);
3531 if (strncmp(cmp, "no", 2) == 0) {
3536 mutex_lock(&trace_types_lock);
3538 for (i = 0; trace_options[i]; i++) {
3539 if (strcmp(cmp, trace_options[i]) == 0) {
3540 ret = set_tracer_flag(tr, 1 << i, !neg);
3545 /* If no option could be set, test the specific tracer options */
3546 if (!trace_options[i])
3547 ret = set_tracer_option(tr, cmp, neg);
3549 mutex_unlock(&trace_types_lock);
3555 tracing_trace_options_write(struct file *filp, const char __user *ubuf,
3556 size_t cnt, loff_t *ppos)
3558 struct seq_file *m = filp->private_data;
3559 struct trace_array *tr = m->private;
3563 if (cnt >= sizeof(buf))
3566 if (copy_from_user(&buf, ubuf, cnt))
3571 ret = trace_set_options(tr, buf);
3580 static int tracing_trace_options_open(struct inode *inode, struct file *file)
3582 struct trace_array *tr = inode->i_private;
3585 if (tracing_disabled)
3588 if (trace_array_get(tr) < 0)
3591 ret = single_open(file, tracing_trace_options_show, inode->i_private);
3593 trace_array_put(tr);
3598 static const struct file_operations tracing_iter_fops = {
3599 .open = tracing_trace_options_open,
3601 .llseek = seq_lseek,
3602 .release = tracing_single_release_tr,
3603 .write = tracing_trace_options_write,
3606 static const char readme_msg[] =
3607 "tracing mini-HOWTO:\n\n"
3608 "# echo 0 > tracing_on : quick way to disable tracing\n"
3609 "# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
3610 " Important files:\n"
3611 " trace\t\t\t- The static contents of the buffer\n"
3612 "\t\t\t To clear the buffer write into this file: echo > trace\n"
3613 " trace_pipe\t\t- A consuming read to see the contents of the buffer\n"
3614 " current_tracer\t- function and latency tracers\n"
3615 " available_tracers\t- list of configured tracers for current_tracer\n"
3616 " buffer_size_kb\t- view and modify size of per cpu buffer\n"
3617 " buffer_total_size_kb - view total size of all cpu buffers\n\n"
3618 " trace_clock\t\t-change the clock used to order events\n"
3619 " local: Per cpu clock but may not be synced across CPUs\n"
3620 " global: Synced across CPUs but slows tracing down.\n"
3621 " counter: Not a clock, but just an increment\n"
3622 " uptime: Jiffy counter from time of boot\n"
3623 " perf: Same clock that perf events use\n"
3624 #ifdef CONFIG_X86_64
3625 " x86-tsc: TSC cycle counter\n"
3627 "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
3628 " tracing_cpumask\t- Limit which CPUs to trace\n"
3629 " instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
3630 "\t\t\t Remove sub-buffer with rmdir\n"
3631 " trace_options\t\t- Set format or modify how tracing happens\n"
3632 "\t\t\t Disable an option by adding a suffix 'no' to the\n"
3633 "\t\t\t option name\n"
3634 " saved_cmdlines_size\t- echo command number in here to store comm-pid list\n"
3635 #ifdef CONFIG_DYNAMIC_FTRACE
3636 "\n available_filter_functions - list of functions that can be filtered on\n"
3637 " set_ftrace_filter\t- echo function name in here to only trace these\n"
3638 "\t\t\t functions\n"
3639 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3640 "\t modules: Can select a group via module\n"
3641 "\t Format: :mod:<module-name>\n"
3642 "\t example: echo :mod:ext3 > set_ftrace_filter\n"
3643 "\t triggers: a command to perform when function is hit\n"
3644 "\t Format: <function>:<trigger>[:count]\n"
3645 "\t trigger: traceon, traceoff\n"
3646 "\t\t enable_event:<system>:<event>\n"
3647 "\t\t disable_event:<system>:<event>\n"
3648 #ifdef CONFIG_STACKTRACE
3651 #ifdef CONFIG_TRACER_SNAPSHOT
3656 "\t example: echo do_fault:traceoff > set_ftrace_filter\n"
3657 "\t echo do_trap:traceoff:3 > set_ftrace_filter\n"
3658 "\t The first one will disable tracing every time do_fault is hit\n"
3659 "\t The second will disable tracing at most 3 times when do_trap is hit\n"
3660 "\t The first time do trap is hit and it disables tracing, the\n"
3661 "\t counter will decrement to 2. If tracing is already disabled,\n"
3662 "\t the counter will not decrement. It only decrements when the\n"
3663 "\t trigger did work\n"
3664 "\t To remove trigger without count:\n"
3665 "\t echo '!<function>:<trigger> > set_ftrace_filter\n"
3666 "\t To remove trigger with a count:\n"
3667 "\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
3668 " set_ftrace_notrace\t- echo function name in here to never trace.\n"
3669 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3670 "\t modules: Can select a group via module command :mod:\n"
3671 "\t Does not accept triggers\n"
3672 #endif /* CONFIG_DYNAMIC_FTRACE */
3673 #ifdef CONFIG_FUNCTION_TRACER
3674 " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
3677 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
3678 " set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
3679 " set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n"
3680 " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
3682 #ifdef CONFIG_TRACER_SNAPSHOT
3683 "\n snapshot\t\t- Like 'trace' but shows the content of the static\n"
3684 "\t\t\t snapshot buffer. Read the contents for more\n"
3685 "\t\t\t information\n"
3687 #ifdef CONFIG_STACK_TRACER
3688 " stack_trace\t\t- Shows the max stack trace when active\n"
3689 " stack_max_size\t- Shows current max stack size that was traced\n"
3690 "\t\t\t Write into this file to reset the max size (trigger a\n"
3691 "\t\t\t new trace)\n"
3692 #ifdef CONFIG_DYNAMIC_FTRACE
3693 " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
3696 #endif /* CONFIG_STACK_TRACER */
3697 " events/\t\t- Directory containing all trace event subsystems:\n"
3698 " enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
3699 " events/<system>/\t- Directory containing all trace events for <system>:\n"
3700 " enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
3702 " filter\t\t- If set, only events passing filter are traced\n"
3703 " events/<system>/<event>/\t- Directory containing control files for\n"
3705 " enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
3706 " filter\t\t- If set, only events passing filter are traced\n"
3707 " trigger\t\t- If set, a command to perform when event is hit\n"
3708 "\t Format: <trigger>[:count][if <filter>]\n"
3709 "\t trigger: traceon, traceoff\n"
3710 "\t enable_event:<system>:<event>\n"
3711 "\t disable_event:<system>:<event>\n"
3712 #ifdef CONFIG_STACKTRACE
3715 #ifdef CONFIG_TRACER_SNAPSHOT
3718 "\t example: echo traceoff > events/block/block_unplug/trigger\n"
3719 "\t echo traceoff:3 > events/block/block_unplug/trigger\n"
3720 "\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
3721 "\t events/block/block_unplug/trigger\n"
3722 "\t The first disables tracing every time block_unplug is hit.\n"
3723 "\t The second disables tracing the first 3 times block_unplug is hit.\n"
3724 "\t The third enables the kmalloc event the first 3 times block_unplug\n"
3725 "\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
3726 "\t Like function triggers, the counter is only decremented if it\n"
3727 "\t enabled or disabled tracing.\n"
3728 "\t To remove a trigger without a count:\n"
3729 "\t echo '!<trigger> > <system>/<event>/trigger\n"
3730 "\t To remove a trigger with a count:\n"
3731 "\t echo '!<trigger>:0 > <system>/<event>/trigger\n"
3732 "\t Filters can be ignored when removing a trigger.\n"
3736 tracing_readme_read(struct file *filp, char __user *ubuf,
3737 size_t cnt, loff_t *ppos)
3739 return simple_read_from_buffer(ubuf, cnt, ppos,
3740 readme_msg, strlen(readme_msg));
3743 static const struct file_operations tracing_readme_fops = {
3744 .open = tracing_open_generic,
3745 .read = tracing_readme_read,
3746 .llseek = generic_file_llseek,
3749 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos)
3751 unsigned int *ptr = v;
3753 if (*pos || m->count)
3758 for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num];
3760 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP)
3769 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos)
3775 arch_spin_lock(&trace_cmdline_lock);
3777 v = &savedcmd->map_cmdline_to_pid[0];
3779 v = saved_cmdlines_next(m, v, &l);
3787 static void saved_cmdlines_stop(struct seq_file *m, void *v)
3789 arch_spin_unlock(&trace_cmdline_lock);
3793 static int saved_cmdlines_show(struct seq_file *m, void *v)
3795 char buf[TASK_COMM_LEN];
3796 unsigned int *pid = v;
3798 __trace_find_cmdline(*pid, buf);
3799 seq_printf(m, "%d %s\n", *pid, buf);
3803 static const struct seq_operations tracing_saved_cmdlines_seq_ops = {
3804 .start = saved_cmdlines_start,
3805 .next = saved_cmdlines_next,
3806 .stop = saved_cmdlines_stop,
3807 .show = saved_cmdlines_show,
3810 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
3812 if (tracing_disabled)
3815 return seq_open(filp, &tracing_saved_cmdlines_seq_ops);
3818 static const struct file_operations tracing_saved_cmdlines_fops = {
3819 .open = tracing_saved_cmdlines_open,
3821 .llseek = seq_lseek,
3822 .release = seq_release,
3826 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
3827 size_t cnt, loff_t *ppos)
3832 arch_spin_lock(&trace_cmdline_lock);
3833 r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num);
3834 arch_spin_unlock(&trace_cmdline_lock);
3836 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
3839 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s)
3841 kfree(s->saved_cmdlines);
3842 kfree(s->map_cmdline_to_pid);
3846 static int tracing_resize_saved_cmdlines(unsigned int val)
3848 struct saved_cmdlines_buffer *s, *savedcmd_temp;
3850 s = kmalloc(sizeof(*s), GFP_KERNEL);
3854 if (allocate_cmdlines_buffer(val, s) < 0) {
3859 arch_spin_lock(&trace_cmdline_lock);
3860 savedcmd_temp = savedcmd;
3862 arch_spin_unlock(&trace_cmdline_lock);
3863 free_saved_cmdlines_buffer(savedcmd_temp);
3869 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
3870 size_t cnt, loff_t *ppos)
3875 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
3879 /* must have at least 1 entry or less than PID_MAX_DEFAULT */
3880 if (!val || val > PID_MAX_DEFAULT)
3883 ret = tracing_resize_saved_cmdlines((unsigned int)val);
3892 static const struct file_operations tracing_saved_cmdlines_size_fops = {
3893 .open = tracing_open_generic,
3894 .read = tracing_saved_cmdlines_size_read,
3895 .write = tracing_saved_cmdlines_size_write,
3899 tracing_set_trace_read(struct file *filp, char __user *ubuf,
3900 size_t cnt, loff_t *ppos)
3902 struct trace_array *tr = filp->private_data;
3903 char buf[MAX_TRACER_SIZE+2];
3906 mutex_lock(&trace_types_lock);
3907 r = sprintf(buf, "%s\n", tr->current_trace->name);
3908 mutex_unlock(&trace_types_lock);
3910 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
3913 int tracer_init(struct tracer *t, struct trace_array *tr)
3915 tracing_reset_online_cpus(&tr->trace_buffer);
3919 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val)
3923 for_each_tracing_cpu(cpu)
3924 per_cpu_ptr(buf->data, cpu)->entries = val;
3927 #ifdef CONFIG_TRACER_MAX_TRACE
3928 /* resize @tr's buffer to the size of @size_tr's entries */
3929 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
3930 struct trace_buffer *size_buf, int cpu_id)
3934 if (cpu_id == RING_BUFFER_ALL_CPUS) {
3935 for_each_tracing_cpu(cpu) {
3936 ret = ring_buffer_resize(trace_buf->buffer,
3937 per_cpu_ptr(size_buf->data, cpu)->entries, cpu);
3940 per_cpu_ptr(trace_buf->data, cpu)->entries =
3941 per_cpu_ptr(size_buf->data, cpu)->entries;
3944 ret = ring_buffer_resize(trace_buf->buffer,
3945 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id);
3947 per_cpu_ptr(trace_buf->data, cpu_id)->entries =
3948 per_cpu_ptr(size_buf->data, cpu_id)->entries;
3953 #endif /* CONFIG_TRACER_MAX_TRACE */
3955 static int __tracing_resize_ring_buffer(struct trace_array *tr,
3956 unsigned long size, int cpu)
3961 * If kernel or user changes the size of the ring buffer
3962 * we use the size that was given, and we can forget about
3963 * expanding it later.
3965 ring_buffer_expanded = true;
3967 /* May be called before buffers are initialized */
3968 if (!tr->trace_buffer.buffer)
3971 ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu);
3975 #ifdef CONFIG_TRACER_MAX_TRACE
3976 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) ||
3977 !tr->current_trace->use_max_tr)
3980 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu);
3982 int r = resize_buffer_duplicate_size(&tr->trace_buffer,
3983 &tr->trace_buffer, cpu);
3986 * AARGH! We are left with different
3987 * size max buffer!!!!
3988 * The max buffer is our "snapshot" buffer.
3989 * When a tracer needs a snapshot (one of the
3990 * latency tracers), it swaps the max buffer
3991 * with the saved snap shot. We succeeded to
3992 * update the size of the main buffer, but failed to
3993 * update the size of the max buffer. But when we tried
3994 * to reset the main buffer to the original size, we
3995 * failed there too. This is very unlikely to
3996 * happen, but if it does, warn and kill all
4000 tracing_disabled = 1;
4005 if (cpu == RING_BUFFER_ALL_CPUS)
4006 set_buffer_entries(&tr->max_buffer, size);
4008 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size;
4011 #endif /* CONFIG_TRACER_MAX_TRACE */
4013 if (cpu == RING_BUFFER_ALL_CPUS)
4014 set_buffer_entries(&tr->trace_buffer, size);
4016 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size;
4021 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
4022 unsigned long size, int cpu_id)
4026 mutex_lock(&trace_types_lock);
4028 if (cpu_id != RING_BUFFER_ALL_CPUS) {
4029 /* make sure, this cpu is enabled in the mask */
4030 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) {
4036 ret = __tracing_resize_ring_buffer(tr, size, cpu_id);
4041 mutex_unlock(&trace_types_lock);
4048 * tracing_update_buffers - used by tracing facility to expand ring buffers
4050 * To save on memory when the tracing is never used on a system with it
4051 * configured in. The ring buffers are set to a minimum size. But once
4052 * a user starts to use the tracing facility, then they need to grow
4053 * to their default size.
4055 * This function is to be called when a tracer is about to be used.
4057 int tracing_update_buffers(void)
4061 mutex_lock(&trace_types_lock);
4062 if (!ring_buffer_expanded)
4063 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size,
4064 RING_BUFFER_ALL_CPUS);
4065 mutex_unlock(&trace_types_lock);
4070 struct trace_option_dentry;
4072 static struct trace_option_dentry *
4073 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
4076 destroy_trace_option_files(struct trace_option_dentry *topts);
4079 * Used to clear out the tracer before deletion of an instance.
4080 * Must have trace_types_lock held.
4082 static void tracing_set_nop(struct trace_array *tr)
4084 if (tr->current_trace == &nop_trace)
4087 tr->current_trace->enabled--;
4089 if (tr->current_trace->reset)
4090 tr->current_trace->reset(tr);
4092 tr->current_trace = &nop_trace;
4095 static int tracing_set_tracer(struct trace_array *tr, const char *buf)
4097 static struct trace_option_dentry *topts;
4099 #ifdef CONFIG_TRACER_MAX_TRACE
4104 mutex_lock(&trace_types_lock);
4106 if (!ring_buffer_expanded) {
4107 ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
4108 RING_BUFFER_ALL_CPUS);
4114 for (t = trace_types; t; t = t->next) {
4115 if (strcmp(t->name, buf) == 0)
4122 if (t == tr->current_trace)
4125 /* Some tracers are only allowed for the top level buffer */
4126 if (!trace_ok_for_array(t, tr)) {
4131 trace_branch_disable();
4133 tr->current_trace->enabled--;
4135 if (tr->current_trace->reset)
4136 tr->current_trace->reset(tr);
4138 /* Current trace needs to be nop_trace before synchronize_sched */
4139 tr->current_trace = &nop_trace;
4141 #ifdef CONFIG_TRACER_MAX_TRACE
4142 had_max_tr = tr->allocated_snapshot;
4144 if (had_max_tr && !t->use_max_tr) {
4146 * We need to make sure that the update_max_tr sees that
4147 * current_trace changed to nop_trace to keep it from
4148 * swapping the buffers after we resize it.
4149 * The update_max_tr is called from interrupts disabled
4150 * so a synchronized_sched() is sufficient.
4152 synchronize_sched();
4156 /* Currently, only the top instance has options */
4157 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) {
4158 destroy_trace_option_files(topts);
4159 topts = create_trace_option_files(tr, t);
4162 #ifdef CONFIG_TRACER_MAX_TRACE
4163 if (t->use_max_tr && !had_max_tr) {
4164 ret = alloc_snapshot(tr);
4171 ret = tracer_init(t, tr);
4176 tr->current_trace = t;
4177 tr->current_trace->enabled++;
4178 trace_branch_enable(tr);
4180 mutex_unlock(&trace_types_lock);
4186 tracing_set_trace_write(struct file *filp, const char __user *ubuf,
4187 size_t cnt, loff_t *ppos)
4189 struct trace_array *tr = filp->private_data;
4190 char buf[MAX_TRACER_SIZE+1];
4197 if (cnt > MAX_TRACER_SIZE)
4198 cnt = MAX_TRACER_SIZE;
4200 if (copy_from_user(&buf, ubuf, cnt))
4205 /* strip ending whitespace. */
4206 for (i = cnt - 1; i > 0 && isspace(buf[i]); i--)
4209 err = tracing_set_tracer(tr, buf);
4219 tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
4220 size_t cnt, loff_t *ppos)
4225 r = snprintf(buf, sizeof(buf), "%ld\n",
4226 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
4227 if (r > sizeof(buf))
4229 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4233 tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
4234 size_t cnt, loff_t *ppos)
4239 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4249 tracing_thresh_read(struct file *filp, char __user *ubuf,
4250 size_t cnt, loff_t *ppos)
4252 return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos);
4256 tracing_thresh_write(struct file *filp, const char __user *ubuf,
4257 size_t cnt, loff_t *ppos)
4259 struct trace_array *tr = filp->private_data;
4262 mutex_lock(&trace_types_lock);
4263 ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos);
4267 if (tr->current_trace->update_thresh) {
4268 ret = tr->current_trace->update_thresh(tr);
4275 mutex_unlock(&trace_types_lock);
4281 tracing_max_lat_read(struct file *filp, char __user *ubuf,
4282 size_t cnt, loff_t *ppos)
4284 return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos);
4288 tracing_max_lat_write(struct file *filp, const char __user *ubuf,
4289 size_t cnt, loff_t *ppos)
4291 return tracing_nsecs_write(filp->private_data, ubuf, cnt, ppos);
4294 static int tracing_open_pipe(struct inode *inode, struct file *filp)
4296 struct trace_array *tr = inode->i_private;
4297 struct trace_iterator *iter;
4300 if (tracing_disabled)
4303 if (trace_array_get(tr) < 0)
4306 mutex_lock(&trace_types_lock);
4308 /* create a buffer to store the information to pass to userspace */
4309 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
4312 __trace_array_put(tr);
4317 * We make a copy of the current tracer to avoid concurrent
4318 * changes on it while we are reading.
4320 iter->trace = kmalloc(sizeof(*iter->trace), GFP_KERNEL);
4325 *iter->trace = *tr->current_trace;
4327 if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) {
4332 /* trace pipe does not show start of buffer */
4333 cpumask_setall(iter->started);
4335 if (trace_flags & TRACE_ITER_LATENCY_FMT)
4336 iter->iter_flags |= TRACE_FILE_LAT_FMT;
4338 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
4339 if (trace_clocks[tr->clock_id].in_ns)
4340 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
4343 iter->trace_buffer = &tr->trace_buffer;
4344 iter->cpu_file = tracing_get_cpu(inode);
4345 mutex_init(&iter->mutex);
4346 filp->private_data = iter;
4348 if (iter->trace->pipe_open)
4349 iter->trace->pipe_open(iter);
4351 nonseekable_open(inode, filp);
4353 mutex_unlock(&trace_types_lock);
4359 __trace_array_put(tr);
4360 mutex_unlock(&trace_types_lock);
4364 static int tracing_release_pipe(struct inode *inode, struct file *file)
4366 struct trace_iterator *iter = file->private_data;
4367 struct trace_array *tr = inode->i_private;
4369 mutex_lock(&trace_types_lock);
4371 if (iter->trace->pipe_close)
4372 iter->trace->pipe_close(iter);
4374 mutex_unlock(&trace_types_lock);
4376 free_cpumask_var(iter->started);
4377 mutex_destroy(&iter->mutex);
4381 trace_array_put(tr);
4387 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table)
4389 /* Iterators are static, they should be filled or empty */
4390 if (trace_buffer_iter(iter, iter->cpu_file))
4391 return POLLIN | POLLRDNORM;
4393 if (trace_flags & TRACE_ITER_BLOCK)
4395 * Always select as readable when in blocking mode
4397 return POLLIN | POLLRDNORM;
4399 return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file,
4404 tracing_poll_pipe(struct file *filp, poll_table *poll_table)
4406 struct trace_iterator *iter = filp->private_data;
4408 return trace_poll(iter, filp, poll_table);
4411 /* Must be called with trace_types_lock mutex held. */
4412 static int tracing_wait_pipe(struct file *filp)
4414 struct trace_iterator *iter = filp->private_data;
4417 while (trace_empty(iter)) {
4419 if ((filp->f_flags & O_NONBLOCK)) {
4424 * We block until we read something and tracing is disabled.
4425 * We still block if tracing is disabled, but we have never
4426 * read anything. This allows a user to cat this file, and
4427 * then enable tracing. But after we have read something,
4428 * we give an EOF when tracing is again disabled.
4430 * iter->pos will be 0 if we haven't read anything.
4432 if (!tracing_is_on() && iter->pos)
4435 mutex_unlock(&iter->mutex);
4437 ret = wait_on_pipe(iter, false);
4439 mutex_lock(&iter->mutex);
4452 tracing_read_pipe(struct file *filp, char __user *ubuf,
4453 size_t cnt, loff_t *ppos)
4455 struct trace_iterator *iter = filp->private_data;
4456 struct trace_array *tr = iter->tr;
4459 /* return any leftover data */
4460 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4464 trace_seq_init(&iter->seq);
4466 /* copy the tracer to avoid using a global lock all around */
4467 mutex_lock(&trace_types_lock);
4468 if (unlikely(iter->trace->name != tr->current_trace->name))
4469 *iter->trace = *tr->current_trace;
4470 mutex_unlock(&trace_types_lock);
4473 * Avoid more than one consumer on a single file descriptor
4474 * This is just a matter of traces coherency, the ring buffer itself
4477 mutex_lock(&iter->mutex);
4478 if (iter->trace->read) {
4479 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
4485 sret = tracing_wait_pipe(filp);
4489 /* stop when tracing is finished */
4490 if (trace_empty(iter)) {
4495 if (cnt >= PAGE_SIZE)
4496 cnt = PAGE_SIZE - 1;
4498 /* reset all but tr, trace, and overruns */
4499 memset(&iter->seq, 0,
4500 sizeof(struct trace_iterator) -
4501 offsetof(struct trace_iterator, seq));
4502 cpumask_clear(iter->started);
4505 trace_event_read_lock();
4506 trace_access_lock(iter->cpu_file);
4507 while (trace_find_next_entry_inc(iter) != NULL) {
4508 enum print_line_t ret;
4509 int len = iter->seq.len;
4511 ret = print_trace_line(iter);
4512 if (ret == TRACE_TYPE_PARTIAL_LINE) {
4513 /* don't print partial lines */
4514 iter->seq.len = len;
4517 if (ret != TRACE_TYPE_NO_CONSUME)
4518 trace_consume(iter);
4520 if (iter->seq.len >= cnt)
4524 * Setting the full flag means we reached the trace_seq buffer
4525 * size and we should leave by partial output condition above.
4526 * One of the trace_seq_* functions is not used properly.
4528 WARN_ONCE(iter->seq.full, "full flag set for trace type %d",
4531 trace_access_unlock(iter->cpu_file);
4532 trace_event_read_unlock();
4534 /* Now copy what we have to the user */
4535 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4536 if (iter->seq.readpos >= iter->seq.len)
4537 trace_seq_init(&iter->seq);
4540 * If there was nothing to send to user, in spite of consuming trace
4541 * entries, go back to wait for more entries.
4547 mutex_unlock(&iter->mutex);
4552 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
4555 __free_page(spd->pages[idx]);
4558 static const struct pipe_buf_operations tracing_pipe_buf_ops = {
4560 .confirm = generic_pipe_buf_confirm,
4561 .release = generic_pipe_buf_release,
4562 .steal = generic_pipe_buf_steal,
4563 .get = generic_pipe_buf_get,
4567 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
4572 /* Seq buffer is page-sized, exactly what we need. */
4574 count = iter->seq.len;
4575 ret = print_trace_line(iter);
4576 count = iter->seq.len - count;
4579 iter->seq.len -= count;
4582 if (ret == TRACE_TYPE_PARTIAL_LINE) {
4583 iter->seq.len -= count;
4587 if (ret != TRACE_TYPE_NO_CONSUME)
4588 trace_consume(iter);
4590 if (!trace_find_next_entry_inc(iter)) {
4600 static ssize_t tracing_splice_read_pipe(struct file *filp,
4602 struct pipe_inode_info *pipe,
4606 struct page *pages_def[PIPE_DEF_BUFFERS];
4607 struct partial_page partial_def[PIPE_DEF_BUFFERS];
4608 struct trace_iterator *iter = filp->private_data;
4609 struct splice_pipe_desc spd = {
4611 .partial = partial_def,
4612 .nr_pages = 0, /* This gets updated below. */
4613 .nr_pages_max = PIPE_DEF_BUFFERS,
4615 .ops = &tracing_pipe_buf_ops,
4616 .spd_release = tracing_spd_release_pipe,
4618 struct trace_array *tr = iter->tr;
4623 if (splice_grow_spd(pipe, &spd))
4626 /* copy the tracer to avoid using a global lock all around */
4627 mutex_lock(&trace_types_lock);
4628 if (unlikely(iter->trace->name != tr->current_trace->name))
4629 *iter->trace = *tr->current_trace;
4630 mutex_unlock(&trace_types_lock);
4632 mutex_lock(&iter->mutex);
4634 if (iter->trace->splice_read) {
4635 ret = iter->trace->splice_read(iter, filp,
4636 ppos, pipe, len, flags);
4641 ret = tracing_wait_pipe(filp);
4645 if (!iter->ent && !trace_find_next_entry_inc(iter)) {
4650 trace_event_read_lock();
4651 trace_access_lock(iter->cpu_file);
4653 /* Fill as many pages as possible. */
4654 for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) {
4655 spd.pages[i] = alloc_page(GFP_KERNEL);
4659 rem = tracing_fill_pipe_page(rem, iter);
4661 /* Copy the data into the page, so we can start over. */
4662 ret = trace_seq_to_buffer(&iter->seq,
4663 page_address(spd.pages[i]),
4666 __free_page(spd.pages[i]);
4669 spd.partial[i].offset = 0;
4670 spd.partial[i].len = iter->seq.len;
4672 trace_seq_init(&iter->seq);
4675 trace_access_unlock(iter->cpu_file);
4676 trace_event_read_unlock();
4677 mutex_unlock(&iter->mutex);
4681 ret = splice_to_pipe(pipe, &spd);
4683 splice_shrink_spd(&spd);
4687 mutex_unlock(&iter->mutex);
4692 tracing_entries_read(struct file *filp, char __user *ubuf,
4693 size_t cnt, loff_t *ppos)
4695 struct inode *inode = file_inode(filp);
4696 struct trace_array *tr = inode->i_private;
4697 int cpu = tracing_get_cpu(inode);
4702 mutex_lock(&trace_types_lock);
4704 if (cpu == RING_BUFFER_ALL_CPUS) {
4705 int cpu, buf_size_same;
4710 /* check if all cpu sizes are same */
4711 for_each_tracing_cpu(cpu) {
4712 /* fill in the size from first enabled cpu */
4714 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries;
4715 if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) {
4721 if (buf_size_same) {
4722 if (!ring_buffer_expanded)
4723 r = sprintf(buf, "%lu (expanded: %lu)\n",
4725 trace_buf_size >> 10);
4727 r = sprintf(buf, "%lu\n", size >> 10);
4729 r = sprintf(buf, "X\n");
4731 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10);
4733 mutex_unlock(&trace_types_lock);
4735 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4740 tracing_entries_write(struct file *filp, const char __user *ubuf,
4741 size_t cnt, loff_t *ppos)
4743 struct inode *inode = file_inode(filp);
4744 struct trace_array *tr = inode->i_private;
4748 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4752 /* must have at least 1 entry */
4756 /* value is in KB */
4758 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
4768 tracing_total_entries_read(struct file *filp, char __user *ubuf,
4769 size_t cnt, loff_t *ppos)
4771 struct trace_array *tr = filp->private_data;
4774 unsigned long size = 0, expanded_size = 0;
4776 mutex_lock(&trace_types_lock);
4777 for_each_tracing_cpu(cpu) {
4778 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10;
4779 if (!ring_buffer_expanded)
4780 expanded_size += trace_buf_size >> 10;
4782 if (ring_buffer_expanded)
4783 r = sprintf(buf, "%lu\n", size);
4785 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
4786 mutex_unlock(&trace_types_lock);
4788 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4792 tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
4793 size_t cnt, loff_t *ppos)
4796 * There is no need to read what the user has written, this function
4797 * is just to make sure that there is no error when "echo" is used
4806 tracing_free_buffer_release(struct inode *inode, struct file *filp)
4808 struct trace_array *tr = inode->i_private;
4810 /* disable tracing ? */
4811 if (trace_flags & TRACE_ITER_STOP_ON_FREE)
4812 tracer_tracing_off(tr);
4813 /* resize the ring buffer to 0 */
4814 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
4816 trace_array_put(tr);
4822 tracing_mark_write(struct file *filp, const char __user *ubuf,
4823 size_t cnt, loff_t *fpos)
4825 unsigned long addr = (unsigned long)ubuf;
4826 struct trace_array *tr = filp->private_data;
4827 struct ring_buffer_event *event;
4828 struct ring_buffer *buffer;
4829 struct print_entry *entry;
4830 unsigned long irq_flags;
4831 struct page *pages[2];
4841 if (tracing_disabled)
4844 if (!(trace_flags & TRACE_ITER_MARKERS))
4847 if (cnt > TRACE_BUF_SIZE)
4848 cnt = TRACE_BUF_SIZE;
4851 * Userspace is injecting traces into the kernel trace buffer.
4852 * We want to be as non intrusive as possible.
4853 * To do so, we do not want to allocate any special buffers
4854 * or take any locks, but instead write the userspace data
4855 * straight into the ring buffer.
4857 * First we need to pin the userspace buffer into memory,
4858 * which, most likely it is, because it just referenced it.
4859 * But there's no guarantee that it is. By using get_user_pages_fast()
4860 * and kmap_atomic/kunmap_atomic() we can get access to the
4861 * pages directly. We then write the data directly into the
4864 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
4866 /* check if we cross pages */
4867 if ((addr & PAGE_MASK) != ((addr + cnt) & PAGE_MASK))
4870 offset = addr & (PAGE_SIZE - 1);
4873 ret = get_user_pages_fast(addr, nr_pages, 0, pages);
4874 if (ret < nr_pages) {
4876 put_page(pages[ret]);
4881 for (i = 0; i < nr_pages; i++)
4882 map_page[i] = kmap_atomic(pages[i]);
4884 local_save_flags(irq_flags);
4885 size = sizeof(*entry) + cnt + 2; /* possible \n added */
4886 buffer = tr->trace_buffer.buffer;
4887 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
4888 irq_flags, preempt_count());
4890 /* Ring buffer disabled, return as if not open for write */
4895 entry = ring_buffer_event_data(event);
4896 entry->ip = _THIS_IP_;
4898 if (nr_pages == 2) {
4899 len = PAGE_SIZE - offset;
4900 memcpy(&entry->buf, map_page[0] + offset, len);
4901 memcpy(&entry->buf[len], map_page[1], cnt - len);
4903 memcpy(&entry->buf, map_page[0] + offset, cnt);
4905 if (entry->buf[cnt - 1] != '\n') {
4906 entry->buf[cnt] = '\n';
4907 entry->buf[cnt + 1] = '\0';
4909 entry->buf[cnt] = '\0';
4911 __buffer_unlock_commit(buffer, event);
4918 for (i = 0; i < nr_pages; i++){
4919 kunmap_atomic(map_page[i]);
4926 static int tracing_clock_show(struct seq_file *m, void *v)
4928 struct trace_array *tr = m->private;
4931 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++)
4933 "%s%s%s%s", i ? " " : "",
4934 i == tr->clock_id ? "[" : "", trace_clocks[i].name,
4935 i == tr->clock_id ? "]" : "");
4941 static int tracing_set_clock(struct trace_array *tr, const char *clockstr)
4945 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) {
4946 if (strcmp(trace_clocks[i].name, clockstr) == 0)
4949 if (i == ARRAY_SIZE(trace_clocks))
4952 mutex_lock(&trace_types_lock);
4956 ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func);
4959 * New clock may not be consistent with the previous clock.
4960 * Reset the buffer so that it doesn't have incomparable timestamps.
4962 tracing_reset_online_cpus(&tr->trace_buffer);
4964 #ifdef CONFIG_TRACER_MAX_TRACE
4965 if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer)
4966 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
4967 tracing_reset_online_cpus(&tr->max_buffer);
4970 mutex_unlock(&trace_types_lock);
4975 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
4976 size_t cnt, loff_t *fpos)
4978 struct seq_file *m = filp->private_data;
4979 struct trace_array *tr = m->private;
4981 const char *clockstr;
4984 if (cnt >= sizeof(buf))
4987 if (copy_from_user(&buf, ubuf, cnt))
4992 clockstr = strstrip(buf);
4994 ret = tracing_set_clock(tr, clockstr);
5003 static int tracing_clock_open(struct inode *inode, struct file *file)
5005 struct trace_array *tr = inode->i_private;
5008 if (tracing_disabled)
5011 if (trace_array_get(tr))
5014 ret = single_open(file, tracing_clock_show, inode->i_private);
5016 trace_array_put(tr);
5021 struct ftrace_buffer_info {
5022 struct trace_iterator iter;
5027 #ifdef CONFIG_TRACER_SNAPSHOT
5028 static int tracing_snapshot_open(struct inode *inode, struct file *file)
5030 struct trace_array *tr = inode->i_private;
5031 struct trace_iterator *iter;
5035 if (trace_array_get(tr) < 0)
5038 if (file->f_mode & FMODE_READ) {
5039 iter = __tracing_open(inode, file, true);
5041 ret = PTR_ERR(iter);
5043 /* Writes still need the seq_file to hold the private data */
5045 m = kzalloc(sizeof(*m), GFP_KERNEL);
5048 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
5056 iter->trace_buffer = &tr->max_buffer;
5057 iter->cpu_file = tracing_get_cpu(inode);
5059 file->private_data = m;
5063 trace_array_put(tr);
5069 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
5072 struct seq_file *m = filp->private_data;
5073 struct trace_iterator *iter = m->private;
5074 struct trace_array *tr = iter->tr;
5078 ret = tracing_update_buffers();
5082 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5086 mutex_lock(&trace_types_lock);
5088 if (tr->current_trace->use_max_tr) {
5095 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5099 if (tr->allocated_snapshot)
5103 /* Only allow per-cpu swap if the ring buffer supports it */
5104 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP
5105 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5110 if (!tr->allocated_snapshot) {
5111 ret = alloc_snapshot(tr);
5115 local_irq_disable();
5116 /* Now, we're going to swap */
5117 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5118 update_max_tr(tr, current, smp_processor_id());
5120 update_max_tr_single(tr, current, iter->cpu_file);
5124 if (tr->allocated_snapshot) {
5125 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5126 tracing_reset_online_cpus(&tr->max_buffer);
5128 tracing_reset(&tr->max_buffer, iter->cpu_file);
5138 mutex_unlock(&trace_types_lock);
5142 static int tracing_snapshot_release(struct inode *inode, struct file *file)
5144 struct seq_file *m = file->private_data;
5147 ret = tracing_release(inode, file);
5149 if (file->f_mode & FMODE_READ)
5152 /* If write only, the seq_file is just a stub */
5160 static int tracing_buffers_open(struct inode *inode, struct file *filp);
5161 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
5162 size_t count, loff_t *ppos);
5163 static int tracing_buffers_release(struct inode *inode, struct file *file);
5164 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5165 struct pipe_inode_info *pipe, size_t len, unsigned int flags);
5167 static int snapshot_raw_open(struct inode *inode, struct file *filp)
5169 struct ftrace_buffer_info *info;
5172 ret = tracing_buffers_open(inode, filp);
5176 info = filp->private_data;
5178 if (info->iter.trace->use_max_tr) {
5179 tracing_buffers_release(inode, filp);
5183 info->iter.snapshot = true;
5184 info->iter.trace_buffer = &info->iter.tr->max_buffer;
5189 #endif /* CONFIG_TRACER_SNAPSHOT */
5192 static const struct file_operations tracing_thresh_fops = {
5193 .open = tracing_open_generic,
5194 .read = tracing_thresh_read,
5195 .write = tracing_thresh_write,
5196 .llseek = generic_file_llseek,
5199 static const struct file_operations tracing_max_lat_fops = {
5200 .open = tracing_open_generic,
5201 .read = tracing_max_lat_read,
5202 .write = tracing_max_lat_write,
5203 .llseek = generic_file_llseek,
5206 static const struct file_operations set_tracer_fops = {
5207 .open = tracing_open_generic,
5208 .read = tracing_set_trace_read,
5209 .write = tracing_set_trace_write,
5210 .llseek = generic_file_llseek,
5213 static const struct file_operations tracing_pipe_fops = {
5214 .open = tracing_open_pipe,
5215 .poll = tracing_poll_pipe,
5216 .read = tracing_read_pipe,
5217 .splice_read = tracing_splice_read_pipe,
5218 .release = tracing_release_pipe,
5219 .llseek = no_llseek,
5222 static const struct file_operations tracing_entries_fops = {
5223 .open = tracing_open_generic_tr,
5224 .read = tracing_entries_read,
5225 .write = tracing_entries_write,
5226 .llseek = generic_file_llseek,
5227 .release = tracing_release_generic_tr,
5230 static const struct file_operations tracing_total_entries_fops = {
5231 .open = tracing_open_generic_tr,
5232 .read = tracing_total_entries_read,
5233 .llseek = generic_file_llseek,
5234 .release = tracing_release_generic_tr,
5237 static const struct file_operations tracing_free_buffer_fops = {
5238 .open = tracing_open_generic_tr,
5239 .write = tracing_free_buffer_write,
5240 .release = tracing_free_buffer_release,
5243 static const struct file_operations tracing_mark_fops = {
5244 .open = tracing_open_generic_tr,
5245 .write = tracing_mark_write,
5246 .llseek = generic_file_llseek,
5247 .release = tracing_release_generic_tr,
5250 static const struct file_operations trace_clock_fops = {
5251 .open = tracing_clock_open,
5253 .llseek = seq_lseek,
5254 .release = tracing_single_release_tr,
5255 .write = tracing_clock_write,
5258 #ifdef CONFIG_TRACER_SNAPSHOT
5259 static const struct file_operations snapshot_fops = {
5260 .open = tracing_snapshot_open,
5262 .write = tracing_snapshot_write,
5263 .llseek = tracing_lseek,
5264 .release = tracing_snapshot_release,
5267 static const struct file_operations snapshot_raw_fops = {
5268 .open = snapshot_raw_open,
5269 .read = tracing_buffers_read,
5270 .release = tracing_buffers_release,
5271 .splice_read = tracing_buffers_splice_read,
5272 .llseek = no_llseek,
5275 #endif /* CONFIG_TRACER_SNAPSHOT */
5277 static int tracing_buffers_open(struct inode *inode, struct file *filp)
5279 struct trace_array *tr = inode->i_private;
5280 struct ftrace_buffer_info *info;
5283 if (tracing_disabled)
5286 if (trace_array_get(tr) < 0)
5289 info = kzalloc(sizeof(*info), GFP_KERNEL);
5291 trace_array_put(tr);
5295 mutex_lock(&trace_types_lock);
5298 info->iter.cpu_file = tracing_get_cpu(inode);
5299 info->iter.trace = tr->current_trace;
5300 info->iter.trace_buffer = &tr->trace_buffer;
5302 /* Force reading ring buffer for first read */
5303 info->read = (unsigned int)-1;
5305 filp->private_data = info;
5307 mutex_unlock(&trace_types_lock);
5309 ret = nonseekable_open(inode, filp);
5311 trace_array_put(tr);
5317 tracing_buffers_poll(struct file *filp, poll_table *poll_table)
5319 struct ftrace_buffer_info *info = filp->private_data;
5320 struct trace_iterator *iter = &info->iter;
5322 return trace_poll(iter, filp, poll_table);
5326 tracing_buffers_read(struct file *filp, char __user *ubuf,
5327 size_t count, loff_t *ppos)
5329 struct ftrace_buffer_info *info = filp->private_data;
5330 struct trace_iterator *iter = &info->iter;
5337 mutex_lock(&trace_types_lock);
5339 #ifdef CONFIG_TRACER_MAX_TRACE
5340 if (iter->snapshot && iter->tr->current_trace->use_max_tr) {
5347 info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer,
5353 /* Do we have previous read data to read? */
5354 if (info->read < PAGE_SIZE)
5358 trace_access_lock(iter->cpu_file);
5359 ret = ring_buffer_read_page(iter->trace_buffer->buffer,
5363 trace_access_unlock(iter->cpu_file);
5366 if (trace_empty(iter)) {
5367 if ((filp->f_flags & O_NONBLOCK)) {
5371 mutex_unlock(&trace_types_lock);
5372 ret = wait_on_pipe(iter, false);
5373 mutex_lock(&trace_types_lock);
5386 size = PAGE_SIZE - info->read;
5390 ret = copy_to_user(ubuf, info->spare + info->read, size);
5401 mutex_unlock(&trace_types_lock);
5406 static int tracing_buffers_release(struct inode *inode, struct file *file)
5408 struct ftrace_buffer_info *info = file->private_data;
5409 struct trace_iterator *iter = &info->iter;
5411 mutex_lock(&trace_types_lock);
5413 __trace_array_put(iter->tr);
5416 ring_buffer_free_read_page(iter->trace_buffer->buffer, info->spare);
5419 mutex_unlock(&trace_types_lock);
5425 struct ring_buffer *buffer;
5430 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
5431 struct pipe_buffer *buf)
5433 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5438 ring_buffer_free_read_page(ref->buffer, ref->page);
5443 static void buffer_pipe_buf_get(struct pipe_inode_info *pipe,
5444 struct pipe_buffer *buf)
5446 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5451 /* Pipe buffer operations for a buffer. */
5452 static const struct pipe_buf_operations buffer_pipe_buf_ops = {
5454 .confirm = generic_pipe_buf_confirm,
5455 .release = buffer_pipe_buf_release,
5456 .steal = generic_pipe_buf_steal,
5457 .get = buffer_pipe_buf_get,
5461 * Callback from splice_to_pipe(), if we need to release some pages
5462 * at the end of the spd in case we error'ed out in filling the pipe.
5464 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i)
5466 struct buffer_ref *ref =
5467 (struct buffer_ref *)spd->partial[i].private;
5472 ring_buffer_free_read_page(ref->buffer, ref->page);
5474 spd->partial[i].private = 0;
5478 tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5479 struct pipe_inode_info *pipe, size_t len,
5482 struct ftrace_buffer_info *info = file->private_data;
5483 struct trace_iterator *iter = &info->iter;
5484 struct partial_page partial_def[PIPE_DEF_BUFFERS];
5485 struct page *pages_def[PIPE_DEF_BUFFERS];
5486 struct splice_pipe_desc spd = {
5488 .partial = partial_def,
5489 .nr_pages_max = PIPE_DEF_BUFFERS,
5491 .ops = &buffer_pipe_buf_ops,
5492 .spd_release = buffer_spd_release,
5494 struct buffer_ref *ref;
5495 int entries, size, i;
5498 mutex_lock(&trace_types_lock);
5500 #ifdef CONFIG_TRACER_MAX_TRACE
5501 if (iter->snapshot && iter->tr->current_trace->use_max_tr) {
5507 if (splice_grow_spd(pipe, &spd)) {
5512 if (*ppos & (PAGE_SIZE - 1)) {
5517 if (len & (PAGE_SIZE - 1)) {
5518 if (len < PAGE_SIZE) {
5526 trace_access_lock(iter->cpu_file);
5527 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5529 for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) {
5533 ref = kzalloc(sizeof(*ref), GFP_KERNEL);
5540 ref->buffer = iter->trace_buffer->buffer;
5541 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
5548 r = ring_buffer_read_page(ref->buffer, &ref->page,
5549 len, iter->cpu_file, 1);
5551 ring_buffer_free_read_page(ref->buffer, ref->page);
5557 * zero out any left over data, this is going to
5560 size = ring_buffer_page_len(ref->page);
5561 if (size < PAGE_SIZE)
5562 memset(ref->page + size, 0, PAGE_SIZE - size);
5564 page = virt_to_page(ref->page);
5566 spd.pages[i] = page;
5567 spd.partial[i].len = PAGE_SIZE;
5568 spd.partial[i].offset = 0;
5569 spd.partial[i].private = (unsigned long)ref;
5573 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5576 trace_access_unlock(iter->cpu_file);
5579 /* did we read anything? */
5580 if (!spd.nr_pages) {
5584 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK)) {
5588 mutex_unlock(&trace_types_lock);
5589 ret = wait_on_pipe(iter, true);
5590 mutex_lock(&trace_types_lock);
5597 ret = splice_to_pipe(pipe, &spd);
5598 splice_shrink_spd(&spd);
5600 mutex_unlock(&trace_types_lock);
5605 static const struct file_operations tracing_buffers_fops = {
5606 .open = tracing_buffers_open,
5607 .read = tracing_buffers_read,
5608 .poll = tracing_buffers_poll,
5609 .release = tracing_buffers_release,
5610 .splice_read = tracing_buffers_splice_read,
5611 .llseek = no_llseek,
5615 tracing_stats_read(struct file *filp, char __user *ubuf,
5616 size_t count, loff_t *ppos)
5618 struct inode *inode = file_inode(filp);
5619 struct trace_array *tr = inode->i_private;
5620 struct trace_buffer *trace_buf = &tr->trace_buffer;
5621 int cpu = tracing_get_cpu(inode);
5622 struct trace_seq *s;
5624 unsigned long long t;
5625 unsigned long usec_rem;
5627 s = kmalloc(sizeof(*s), GFP_KERNEL);
5633 cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu);
5634 trace_seq_printf(s, "entries: %ld\n", cnt);
5636 cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu);
5637 trace_seq_printf(s, "overrun: %ld\n", cnt);
5639 cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu);
5640 trace_seq_printf(s, "commit overrun: %ld\n", cnt);
5642 cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu);
5643 trace_seq_printf(s, "bytes: %ld\n", cnt);
5645 if (trace_clocks[tr->clock_id].in_ns) {
5646 /* local or global for trace_clock */
5647 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5648 usec_rem = do_div(t, USEC_PER_SEC);
5649 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n",
5652 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu));
5653 usec_rem = do_div(t, USEC_PER_SEC);
5654 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem);
5656 /* counter or tsc mode for trace_clock */
5657 trace_seq_printf(s, "oldest event ts: %llu\n",
5658 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5660 trace_seq_printf(s, "now ts: %llu\n",
5661 ring_buffer_time_stamp(trace_buf->buffer, cpu));
5664 cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu);
5665 trace_seq_printf(s, "dropped events: %ld\n", cnt);
5667 cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
5668 trace_seq_printf(s, "read events: %ld\n", cnt);
5670 count = simple_read_from_buffer(ubuf, count, ppos, s->buffer, s->len);
5677 static const struct file_operations tracing_stats_fops = {
5678 .open = tracing_open_generic_tr,
5679 .read = tracing_stats_read,
5680 .llseek = generic_file_llseek,
5681 .release = tracing_release_generic_tr,
5684 #ifdef CONFIG_DYNAMIC_FTRACE
5686 int __weak ftrace_arch_read_dyn_info(char *buf, int size)
5692 tracing_read_dyn_info(struct file *filp, char __user *ubuf,
5693 size_t cnt, loff_t *ppos)
5695 static char ftrace_dyn_info_buffer[1024];
5696 static DEFINE_MUTEX(dyn_info_mutex);
5697 unsigned long *p = filp->private_data;
5698 char *buf = ftrace_dyn_info_buffer;
5699 int size = ARRAY_SIZE(ftrace_dyn_info_buffer);
5702 mutex_lock(&dyn_info_mutex);
5703 r = sprintf(buf, "%ld ", *p);
5705 r += ftrace_arch_read_dyn_info(buf+r, (size-1)-r);
5708 r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5710 mutex_unlock(&dyn_info_mutex);
5715 static const struct file_operations tracing_dyn_info_fops = {
5716 .open = tracing_open_generic,
5717 .read = tracing_read_dyn_info,
5718 .llseek = generic_file_llseek,
5720 #endif /* CONFIG_DYNAMIC_FTRACE */
5722 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE)
5724 ftrace_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
5730 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
5732 unsigned long *count = (long *)data;
5744 ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
5745 struct ftrace_probe_ops *ops, void *data)
5747 long count = (long)data;
5749 seq_printf(m, "%ps:", (void *)ip);
5751 seq_puts(m, "snapshot");
5754 seq_puts(m, ":unlimited\n");
5756 seq_printf(m, ":count=%ld\n", count);
5761 static struct ftrace_probe_ops snapshot_probe_ops = {
5762 .func = ftrace_snapshot,
5763 .print = ftrace_snapshot_print,
5766 static struct ftrace_probe_ops snapshot_count_probe_ops = {
5767 .func = ftrace_count_snapshot,
5768 .print = ftrace_snapshot_print,
5772 ftrace_trace_snapshot_callback(struct ftrace_hash *hash,
5773 char *glob, char *cmd, char *param, int enable)
5775 struct ftrace_probe_ops *ops;
5776 void *count = (void *)-1;
5780 /* hash funcs only work with set_ftrace_filter */
5784 ops = param ? &snapshot_count_probe_ops : &snapshot_probe_ops;
5786 if (glob[0] == '!') {
5787 unregister_ftrace_function_probe_func(glob+1, ops);
5794 number = strsep(¶m, ":");
5796 if (!strlen(number))
5800 * We use the callback data field (which is a pointer)
5803 ret = kstrtoul(number, 0, (unsigned long *)&count);
5808 ret = register_ftrace_function_probe(glob, ops, count);
5811 alloc_snapshot(&global_trace);
5813 return ret < 0 ? ret : 0;
5816 static struct ftrace_func_command ftrace_snapshot_cmd = {
5818 .func = ftrace_trace_snapshot_callback,
5821 static __init int register_snapshot_cmd(void)
5823 return register_ftrace_command(&ftrace_snapshot_cmd);
5826 static inline __init int register_snapshot_cmd(void) { return 0; }
5827 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */
5829 struct dentry *tracing_init_dentry_tr(struct trace_array *tr)
5834 if (!debugfs_initialized())
5837 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
5838 tr->dir = debugfs_create_dir("tracing", NULL);
5841 pr_warn_once("Could not create debugfs directory 'tracing'\n");
5846 struct dentry *tracing_init_dentry(void)
5848 return tracing_init_dentry_tr(&global_trace);
5851 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
5853 struct dentry *d_tracer;
5856 return tr->percpu_dir;
5858 d_tracer = tracing_init_dentry_tr(tr);
5862 tr->percpu_dir = debugfs_create_dir("per_cpu", d_tracer);
5864 WARN_ONCE(!tr->percpu_dir,
5865 "Could not create debugfs directory 'per_cpu/%d'\n", cpu);
5867 return tr->percpu_dir;
5870 static struct dentry *
5871 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
5872 void *data, long cpu, const struct file_operations *fops)
5874 struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
5876 if (ret) /* See tracing_get_cpu() */
5877 ret->d_inode->i_cdev = (void *)(cpu + 1);
5882 tracing_init_debugfs_percpu(struct trace_array *tr, long cpu)
5884 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
5885 struct dentry *d_cpu;
5886 char cpu_dir[30]; /* 30 characters should be more than enough */
5891 snprintf(cpu_dir, 30, "cpu%ld", cpu);
5892 d_cpu = debugfs_create_dir(cpu_dir, d_percpu);
5894 pr_warning("Could not create debugfs '%s' entry\n", cpu_dir);
5898 /* per cpu trace_pipe */
5899 trace_create_cpu_file("trace_pipe", 0444, d_cpu,
5900 tr, cpu, &tracing_pipe_fops);
5903 trace_create_cpu_file("trace", 0644, d_cpu,
5904 tr, cpu, &tracing_fops);
5906 trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
5907 tr, cpu, &tracing_buffers_fops);
5909 trace_create_cpu_file("stats", 0444, d_cpu,
5910 tr, cpu, &tracing_stats_fops);
5912 trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
5913 tr, cpu, &tracing_entries_fops);
5915 #ifdef CONFIG_TRACER_SNAPSHOT
5916 trace_create_cpu_file("snapshot", 0644, d_cpu,
5917 tr, cpu, &snapshot_fops);
5919 trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
5920 tr, cpu, &snapshot_raw_fops);
5924 #ifdef CONFIG_FTRACE_SELFTEST
5925 /* Let selftest have access to static functions in this file */
5926 #include "trace_selftest.c"
5929 struct trace_option_dentry {
5930 struct tracer_opt *opt;
5931 struct tracer_flags *flags;
5932 struct trace_array *tr;
5933 struct dentry *entry;
5937 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
5940 struct trace_option_dentry *topt = filp->private_data;
5943 if (topt->flags->val & topt->opt->bit)
5948 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
5952 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
5955 struct trace_option_dentry *topt = filp->private_data;
5959 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5963 if (val != 0 && val != 1)
5966 if (!!(topt->flags->val & topt->opt->bit) != val) {
5967 mutex_lock(&trace_types_lock);
5968 ret = __set_tracer_option(topt->tr, topt->flags,
5970 mutex_unlock(&trace_types_lock);
5981 static const struct file_operations trace_options_fops = {
5982 .open = tracing_open_generic,
5983 .read = trace_options_read,
5984 .write = trace_options_write,
5985 .llseek = generic_file_llseek,
5989 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
5992 long index = (long)filp->private_data;
5995 if (trace_flags & (1 << index))
6000 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
6004 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
6007 struct trace_array *tr = &global_trace;
6008 long index = (long)filp->private_data;
6012 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6016 if (val != 0 && val != 1)
6019 mutex_lock(&trace_types_lock);
6020 ret = set_tracer_flag(tr, 1 << index, val);
6021 mutex_unlock(&trace_types_lock);
6031 static const struct file_operations trace_options_core_fops = {
6032 .open = tracing_open_generic,
6033 .read = trace_options_core_read,
6034 .write = trace_options_core_write,
6035 .llseek = generic_file_llseek,
6038 struct dentry *trace_create_file(const char *name,
6040 struct dentry *parent,
6042 const struct file_operations *fops)
6046 ret = debugfs_create_file(name, mode, parent, data, fops);
6048 pr_warning("Could not create debugfs '%s' entry\n", name);
6054 static struct dentry *trace_options_init_dentry(struct trace_array *tr)
6056 struct dentry *d_tracer;
6061 d_tracer = tracing_init_dentry_tr(tr);
6065 tr->options = debugfs_create_dir("options", d_tracer);
6067 pr_warning("Could not create debugfs directory 'options'\n");
6075 create_trace_option_file(struct trace_array *tr,
6076 struct trace_option_dentry *topt,
6077 struct tracer_flags *flags,
6078 struct tracer_opt *opt)
6080 struct dentry *t_options;
6082 t_options = trace_options_init_dentry(tr);
6086 topt->flags = flags;
6090 topt->entry = trace_create_file(opt->name, 0644, t_options, topt,
6091 &trace_options_fops);
6095 static struct trace_option_dentry *
6096 create_trace_option_files(struct trace_array *tr, struct tracer *tracer)
6098 struct trace_option_dentry *topts;
6099 struct tracer_flags *flags;
6100 struct tracer_opt *opts;
6106 flags = tracer->flags;
6108 if (!flags || !flags->opts)
6113 for (cnt = 0; opts[cnt].name; cnt++)
6116 topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
6120 for (cnt = 0; opts[cnt].name; cnt++)
6121 create_trace_option_file(tr, &topts[cnt], flags,
6128 destroy_trace_option_files(struct trace_option_dentry *topts)
6135 for (cnt = 0; topts[cnt].opt; cnt++)
6136 debugfs_remove(topts[cnt].entry);
6141 static struct dentry *
6142 create_trace_option_core_file(struct trace_array *tr,
6143 const char *option, long index)
6145 struct dentry *t_options;
6147 t_options = trace_options_init_dentry(tr);
6151 return trace_create_file(option, 0644, t_options, (void *)index,
6152 &trace_options_core_fops);
6155 static __init void create_trace_options_dir(struct trace_array *tr)
6157 struct dentry *t_options;
6160 t_options = trace_options_init_dentry(tr);
6164 for (i = 0; trace_options[i]; i++)
6165 create_trace_option_core_file(tr, trace_options[i], i);
6169 rb_simple_read(struct file *filp, char __user *ubuf,
6170 size_t cnt, loff_t *ppos)
6172 struct trace_array *tr = filp->private_data;
6176 r = tracer_tracing_is_on(tr);
6177 r = sprintf(buf, "%d\n", r);
6179 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6183 rb_simple_write(struct file *filp, const char __user *ubuf,
6184 size_t cnt, loff_t *ppos)
6186 struct trace_array *tr = filp->private_data;
6187 struct ring_buffer *buffer = tr->trace_buffer.buffer;
6191 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6196 mutex_lock(&trace_types_lock);
6198 tracer_tracing_on(tr);
6199 if (tr->current_trace->start)
6200 tr->current_trace->start(tr);
6202 tracer_tracing_off(tr);
6203 if (tr->current_trace->stop)
6204 tr->current_trace->stop(tr);
6206 mutex_unlock(&trace_types_lock);
6214 static const struct file_operations rb_simple_fops = {
6215 .open = tracing_open_generic_tr,
6216 .read = rb_simple_read,
6217 .write = rb_simple_write,
6218 .release = tracing_release_generic_tr,
6219 .llseek = default_llseek,
6222 struct dentry *trace_instance_dir;
6225 init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer);
6228 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
6230 enum ring_buffer_flags rb_flags;
6232 rb_flags = trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0;
6236 buf->buffer = ring_buffer_alloc(size, rb_flags);
6240 buf->data = alloc_percpu(struct trace_array_cpu);
6242 ring_buffer_free(buf->buffer);
6246 /* Allocate the first page for all buffers */
6247 set_buffer_entries(&tr->trace_buffer,
6248 ring_buffer_size(tr->trace_buffer.buffer, 0));
6253 static int allocate_trace_buffers(struct trace_array *tr, int size)
6257 ret = allocate_trace_buffer(tr, &tr->trace_buffer, size);
6261 #ifdef CONFIG_TRACER_MAX_TRACE
6262 ret = allocate_trace_buffer(tr, &tr->max_buffer,
6263 allocate_snapshot ? size : 1);
6265 ring_buffer_free(tr->trace_buffer.buffer);
6266 free_percpu(tr->trace_buffer.data);
6269 tr->allocated_snapshot = allocate_snapshot;
6272 * Only the top level trace array gets its snapshot allocated
6273 * from the kernel command line.
6275 allocate_snapshot = false;
6280 static void free_trace_buffer(struct trace_buffer *buf)
6283 ring_buffer_free(buf->buffer);
6285 free_percpu(buf->data);
6290 static void free_trace_buffers(struct trace_array *tr)
6295 free_trace_buffer(&tr->trace_buffer);
6297 #ifdef CONFIG_TRACER_MAX_TRACE
6298 free_trace_buffer(&tr->max_buffer);
6302 static int new_instance_create(const char *name)
6304 struct trace_array *tr;
6307 mutex_lock(&trace_types_lock);
6310 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6311 if (tr->name && strcmp(tr->name, name) == 0)
6316 tr = kzalloc(sizeof(*tr), GFP_KERNEL);
6320 tr->name = kstrdup(name, GFP_KERNEL);
6324 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
6327 cpumask_copy(tr->tracing_cpumask, cpu_all_mask);
6329 raw_spin_lock_init(&tr->start_lock);
6331 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
6333 tr->current_trace = &nop_trace;
6335 INIT_LIST_HEAD(&tr->systems);
6336 INIT_LIST_HEAD(&tr->events);
6338 if (allocate_trace_buffers(tr, trace_buf_size) < 0)
6341 tr->dir = debugfs_create_dir(name, trace_instance_dir);
6345 ret = event_trace_add_tracer(tr->dir, tr);
6347 debugfs_remove_recursive(tr->dir);
6351 init_tracer_debugfs(tr, tr->dir);
6353 list_add(&tr->list, &ftrace_trace_arrays);
6355 mutex_unlock(&trace_types_lock);
6360 free_trace_buffers(tr);
6361 free_cpumask_var(tr->tracing_cpumask);
6366 mutex_unlock(&trace_types_lock);
6372 static int instance_delete(const char *name)
6374 struct trace_array *tr;
6378 mutex_lock(&trace_types_lock);
6381 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6382 if (tr->name && strcmp(tr->name, name) == 0) {
6394 list_del(&tr->list);
6396 tracing_set_nop(tr);
6397 event_trace_del_tracer(tr);
6398 ftrace_destroy_function_files(tr);
6399 debugfs_remove_recursive(tr->dir);
6400 free_trace_buffers(tr);
6408 mutex_unlock(&trace_types_lock);
6413 static int instance_mkdir (struct inode *inode, struct dentry *dentry, umode_t mode)
6415 struct dentry *parent;
6418 /* Paranoid: Make sure the parent is the "instances" directory */
6419 parent = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias);
6420 if (WARN_ON_ONCE(parent != trace_instance_dir))
6424 * The inode mutex is locked, but debugfs_create_dir() will also
6425 * take the mutex. As the instances directory can not be destroyed
6426 * or changed in any other way, it is safe to unlock it, and
6427 * let the dentry try. If two users try to make the same dir at
6428 * the same time, then the new_instance_create() will determine the
6431 mutex_unlock(&inode->i_mutex);
6433 ret = new_instance_create(dentry->d_iname);
6435 mutex_lock(&inode->i_mutex);
6440 static int instance_rmdir(struct inode *inode, struct dentry *dentry)
6442 struct dentry *parent;
6445 /* Paranoid: Make sure the parent is the "instances" directory */
6446 parent = hlist_entry(inode->i_dentry.first, struct dentry, d_u.d_alias);
6447 if (WARN_ON_ONCE(parent != trace_instance_dir))
6450 /* The caller did a dget() on dentry */
6451 mutex_unlock(&dentry->d_inode->i_mutex);
6454 * The inode mutex is locked, but debugfs_create_dir() will also
6455 * take the mutex. As the instances directory can not be destroyed
6456 * or changed in any other way, it is safe to unlock it, and
6457 * let the dentry try. If two users try to make the same dir at
6458 * the same time, then the instance_delete() will determine the
6461 mutex_unlock(&inode->i_mutex);
6463 ret = instance_delete(dentry->d_iname);
6465 mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT);
6466 mutex_lock(&dentry->d_inode->i_mutex);
6471 static const struct inode_operations instance_dir_inode_operations = {
6472 .lookup = simple_lookup,
6473 .mkdir = instance_mkdir,
6474 .rmdir = instance_rmdir,
6477 static __init void create_trace_instances(struct dentry *d_tracer)
6479 trace_instance_dir = debugfs_create_dir("instances", d_tracer);
6480 if (WARN_ON(!trace_instance_dir))
6483 /* Hijack the dir inode operations, to allow mkdir */
6484 trace_instance_dir->d_inode->i_op = &instance_dir_inode_operations;
6488 init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer)
6492 trace_create_file("available_tracers", 0444, d_tracer,
6493 tr, &show_traces_fops);
6495 trace_create_file("current_tracer", 0644, d_tracer,
6496 tr, &set_tracer_fops);
6498 trace_create_file("tracing_cpumask", 0644, d_tracer,
6499 tr, &tracing_cpumask_fops);
6501 trace_create_file("trace_options", 0644, d_tracer,
6502 tr, &tracing_iter_fops);
6504 trace_create_file("trace", 0644, d_tracer,
6507 trace_create_file("trace_pipe", 0444, d_tracer,
6508 tr, &tracing_pipe_fops);
6510 trace_create_file("buffer_size_kb", 0644, d_tracer,
6511 tr, &tracing_entries_fops);
6513 trace_create_file("buffer_total_size_kb", 0444, d_tracer,
6514 tr, &tracing_total_entries_fops);
6516 trace_create_file("free_buffer", 0200, d_tracer,
6517 tr, &tracing_free_buffer_fops);
6519 trace_create_file("trace_marker", 0220, d_tracer,
6520 tr, &tracing_mark_fops);
6522 trace_create_file("trace_clock", 0644, d_tracer, tr,
6525 trace_create_file("tracing_on", 0644, d_tracer,
6526 tr, &rb_simple_fops);
6528 #ifdef CONFIG_TRACER_MAX_TRACE
6529 trace_create_file("tracing_max_latency", 0644, d_tracer,
6530 &tr->max_latency, &tracing_max_lat_fops);
6533 if (ftrace_create_function_files(tr, d_tracer))
6534 WARN(1, "Could not allocate function filter files");
6536 #ifdef CONFIG_TRACER_SNAPSHOT
6537 trace_create_file("snapshot", 0644, d_tracer,
6538 tr, &snapshot_fops);
6541 for_each_tracing_cpu(cpu)
6542 tracing_init_debugfs_percpu(tr, cpu);
6546 static __init int tracer_init_debugfs(void)
6548 struct dentry *d_tracer;
6550 trace_access_lock_init();
6552 d_tracer = tracing_init_dentry();
6556 init_tracer_debugfs(&global_trace, d_tracer);
6558 trace_create_file("tracing_thresh", 0644, d_tracer,
6559 &global_trace, &tracing_thresh_fops);
6561 trace_create_file("README", 0444, d_tracer,
6562 NULL, &tracing_readme_fops);
6564 trace_create_file("saved_cmdlines", 0444, d_tracer,
6565 NULL, &tracing_saved_cmdlines_fops);
6567 trace_create_file("saved_cmdlines_size", 0644, d_tracer,
6568 NULL, &tracing_saved_cmdlines_size_fops);
6570 #ifdef CONFIG_DYNAMIC_FTRACE
6571 trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
6572 &ftrace_update_tot_cnt, &tracing_dyn_info_fops);
6575 create_trace_instances(d_tracer);
6577 create_trace_options_dir(&global_trace);
6582 static int trace_panic_handler(struct notifier_block *this,
6583 unsigned long event, void *unused)
6585 if (ftrace_dump_on_oops)
6586 ftrace_dump(ftrace_dump_on_oops);
6590 static struct notifier_block trace_panic_notifier = {
6591 .notifier_call = trace_panic_handler,
6593 .priority = 150 /* priority: INT_MAX >= x >= 0 */
6596 static int trace_die_handler(struct notifier_block *self,
6602 if (ftrace_dump_on_oops)
6603 ftrace_dump(ftrace_dump_on_oops);
6611 static struct notifier_block trace_die_notifier = {
6612 .notifier_call = trace_die_handler,
6617 * printk is set to max of 1024, we really don't need it that big.
6618 * Nothing should be printing 1000 characters anyway.
6620 #define TRACE_MAX_PRINT 1000
6623 * Define here KERN_TRACE so that we have one place to modify
6624 * it if we decide to change what log level the ftrace dump
6627 #define KERN_TRACE KERN_EMERG
6630 trace_printk_seq(struct trace_seq *s)
6632 /* Probably should print a warning here. */
6633 if (s->len >= TRACE_MAX_PRINT)
6634 s->len = TRACE_MAX_PRINT;
6636 /* should be zero ended, but we are paranoid. */
6637 s->buffer[s->len] = 0;
6639 printk(KERN_TRACE "%s", s->buffer);
6644 void trace_init_global_iter(struct trace_iterator *iter)
6646 iter->tr = &global_trace;
6647 iter->trace = iter->tr->current_trace;
6648 iter->cpu_file = RING_BUFFER_ALL_CPUS;
6649 iter->trace_buffer = &global_trace.trace_buffer;
6651 if (iter->trace && iter->trace->open)
6652 iter->trace->open(iter);
6654 /* Annotate start of buffers if we had overruns */
6655 if (ring_buffer_overruns(iter->trace_buffer->buffer))
6656 iter->iter_flags |= TRACE_FILE_ANNOTATE;
6658 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
6659 if (trace_clocks[iter->tr->clock_id].in_ns)
6660 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
6663 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
6665 /* use static because iter can be a bit big for the stack */
6666 static struct trace_iterator iter;
6667 static atomic_t dump_running;
6668 unsigned int old_userobj;
6669 unsigned long flags;
6672 /* Only allow one dump user at a time. */
6673 if (atomic_inc_return(&dump_running) != 1) {
6674 atomic_dec(&dump_running);
6679 * Always turn off tracing when we dump.
6680 * We don't need to show trace output of what happens
6681 * between multiple crashes.
6683 * If the user does a sysrq-z, then they can re-enable
6684 * tracing with echo 1 > tracing_on.
6688 local_irq_save(flags);
6690 /* Simulate the iterator */
6691 trace_init_global_iter(&iter);
6693 for_each_tracing_cpu(cpu) {
6694 atomic_inc(&per_cpu_ptr(iter.tr->trace_buffer.data, cpu)->disabled);
6697 old_userobj = trace_flags & TRACE_ITER_SYM_USEROBJ;
6699 /* don't look at user memory in panic mode */
6700 trace_flags &= ~TRACE_ITER_SYM_USEROBJ;
6702 switch (oops_dump_mode) {
6704 iter.cpu_file = RING_BUFFER_ALL_CPUS;
6707 iter.cpu_file = raw_smp_processor_id();
6712 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n");
6713 iter.cpu_file = RING_BUFFER_ALL_CPUS;
6716 printk(KERN_TRACE "Dumping ftrace buffer:\n");
6718 /* Did function tracer already get disabled? */
6719 if (ftrace_is_dead()) {
6720 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
6721 printk("# MAY BE MISSING FUNCTION EVENTS\n");
6725 * We need to stop all tracing on all CPUS to read the
6726 * the next buffer. This is a bit expensive, but is
6727 * not done often. We fill all what we can read,
6728 * and then release the locks again.
6731 while (!trace_empty(&iter)) {
6734 printk(KERN_TRACE "---------------------------------\n");
6738 /* reset all but tr, trace, and overruns */
6739 memset(&iter.seq, 0,
6740 sizeof(struct trace_iterator) -
6741 offsetof(struct trace_iterator, seq));
6742 iter.iter_flags |= TRACE_FILE_LAT_FMT;
6745 if (trace_find_next_entry_inc(&iter) != NULL) {
6748 ret = print_trace_line(&iter);
6749 if (ret != TRACE_TYPE_NO_CONSUME)
6750 trace_consume(&iter);
6752 touch_nmi_watchdog();
6754 trace_printk_seq(&iter.seq);
6758 printk(KERN_TRACE " (ftrace buffer empty)\n");
6760 printk(KERN_TRACE "---------------------------------\n");
6763 trace_flags |= old_userobj;
6765 for_each_tracing_cpu(cpu) {
6766 atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
6768 atomic_dec(&dump_running);
6769 local_irq_restore(flags);
6771 EXPORT_SYMBOL_GPL(ftrace_dump);
6773 __init static int tracer_alloc_buffers(void)
6779 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL))
6782 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL))
6783 goto out_free_buffer_mask;
6785 /* Only allocate trace_printk buffers if a trace_printk exists */
6786 if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt)
6787 /* Must be called before global_trace.buffer is allocated */
6788 trace_printk_init_buffers();
6790 /* To save memory, keep the ring buffer size to its minimum */
6791 if (ring_buffer_expanded)
6792 ring_buf_size = trace_buf_size;
6796 cpumask_copy(tracing_buffer_mask, cpu_possible_mask);
6797 cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask);
6799 raw_spin_lock_init(&global_trace.start_lock);
6801 /* Used for event triggers */
6802 temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE);
6804 goto out_free_cpumask;
6806 if (trace_create_savedcmd() < 0)
6807 goto out_free_temp_buffer;
6809 /* TODO: make the number of buffers hot pluggable with CPUS */
6810 if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) {
6811 printk(KERN_ERR "tracer: failed to allocate ring buffer!\n");
6813 goto out_free_savedcmd;
6816 if (global_trace.buffer_disabled)
6819 if (trace_boot_clock) {
6820 ret = tracing_set_clock(&global_trace, trace_boot_clock);
6822 pr_warning("Trace clock %s not defined, going back to default\n",
6827 * register_tracer() might reference current_trace, so it
6828 * needs to be set before we register anything. This is
6829 * just a bootstrap of current_trace anyway.
6831 global_trace.current_trace = &nop_trace;
6833 global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
6835 ftrace_init_global_array_ops(&global_trace);
6837 register_tracer(&nop_trace);
6839 /* All seems OK, enable tracing */
6840 tracing_disabled = 0;
6842 atomic_notifier_chain_register(&panic_notifier_list,
6843 &trace_panic_notifier);
6845 register_die_notifier(&trace_die_notifier);
6847 global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
6849 INIT_LIST_HEAD(&global_trace.systems);
6850 INIT_LIST_HEAD(&global_trace.events);
6851 list_add(&global_trace.list, &ftrace_trace_arrays);
6853 while (trace_boot_options) {
6856 option = strsep(&trace_boot_options, ",");
6857 trace_set_options(&global_trace, option);
6860 register_snapshot_cmd();
6865 free_saved_cmdlines_buffer(savedcmd);
6866 out_free_temp_buffer:
6867 ring_buffer_free(temp_buffer);
6869 free_cpumask_var(global_trace.tracing_cpumask);
6870 out_free_buffer_mask:
6871 free_cpumask_var(tracing_buffer_mask);
6876 __init static int clear_boot_tracer(void)
6879 * The default tracer at boot buffer is an init section.
6880 * This function is called in lateinit. If we did not
6881 * find the boot tracer, then clear it out, to prevent
6882 * later registration from accessing the buffer that is
6883 * about to be freed.
6885 if (!default_bootup_tracer)
6888 printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n",
6889 default_bootup_tracer);
6890 default_bootup_tracer = NULL;
6895 early_initcall(tracer_alloc_buffers);
6896 fs_initcall(tracer_init_debugfs);
6897 late_initcall(clear_boot_tracer);