2 * ring buffer based function tracer
4 * Copyright (C) 2007-2012 Steven Rostedt <srostedt@redhat.com>
5 * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com>
7 * Originally taken from the RT patch by:
8 * Arnaldo Carvalho de Melo <acme@redhat.com>
10 * Based on code from the latency_tracer, that is:
11 * Copyright (C) 2004-2006 Ingo Molnar
12 * Copyright (C) 2004 Nadia Yvette Chambers
14 #include <linux/ring_buffer.h>
15 #include <generated/utsrelease.h>
16 #include <linux/stacktrace.h>
17 #include <linux/writeback.h>
18 #include <linux/kallsyms.h>
19 #include <linux/seq_file.h>
20 #include <linux/notifier.h>
21 #include <linux/irqflags.h>
22 #include <linux/debugfs.h>
23 #include <linux/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 __disable_trace_on_warning = 1;
161 __setup("traceoff_on_warning=", stop_trace_on_warning);
163 static int __init boot_alloc_snapshot(char *str)
165 allocate_snapshot = true;
166 /* We also need the main ring buffer expanded */
167 ring_buffer_expanded = true;
170 __setup("alloc_snapshot", boot_alloc_snapshot);
173 static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;
174 static char *trace_boot_options __initdata;
176 static int __init set_trace_boot_options(char *str)
178 strlcpy(trace_boot_options_buf, str, MAX_TRACER_SIZE);
179 trace_boot_options = trace_boot_options_buf;
182 __setup("trace_options=", set_trace_boot_options);
184 static char trace_boot_clock_buf[MAX_TRACER_SIZE] __initdata;
185 static char *trace_boot_clock __initdata;
187 static int __init set_trace_boot_clock(char *str)
189 strlcpy(trace_boot_clock_buf, str, MAX_TRACER_SIZE);
190 trace_boot_clock = trace_boot_clock_buf;
193 __setup("trace_clock=", set_trace_boot_clock);
196 unsigned long long ns2usecs(cycle_t nsec)
204 * The global_trace is the descriptor that holds the tracing
205 * buffers for the live tracing. For each CPU, it contains
206 * a link list of pages that will store trace entries. The
207 * page descriptor of the pages in the memory is used to hold
208 * the link list by linking the lru item in the page descriptor
209 * to each of the pages in the buffer per CPU.
211 * For each active CPU there is a data field that holds the
212 * pages for the buffer for that CPU. Each CPU has the same number
213 * of pages allocated for its buffer.
215 static struct trace_array global_trace;
217 LIST_HEAD(ftrace_trace_arrays);
219 int trace_array_get(struct trace_array *this_tr)
221 struct trace_array *tr;
224 mutex_lock(&trace_types_lock);
225 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
232 mutex_unlock(&trace_types_lock);
237 static void __trace_array_put(struct trace_array *this_tr)
239 WARN_ON(!this_tr->ref);
243 void trace_array_put(struct trace_array *this_tr)
245 mutex_lock(&trace_types_lock);
246 __trace_array_put(this_tr);
247 mutex_unlock(&trace_types_lock);
250 int filter_check_discard(struct ftrace_event_file *file, void *rec,
251 struct ring_buffer *buffer,
252 struct ring_buffer_event *event)
254 if (unlikely(file->flags & FTRACE_EVENT_FL_FILTERED) &&
255 !filter_match_preds(file->filter, rec)) {
256 ring_buffer_discard_commit(buffer, event);
262 EXPORT_SYMBOL_GPL(filter_check_discard);
264 int call_filter_check_discard(struct ftrace_event_call *call, void *rec,
265 struct ring_buffer *buffer,
266 struct ring_buffer_event *event)
268 if (unlikely(call->flags & TRACE_EVENT_FL_FILTERED) &&
269 !filter_match_preds(call->filter, rec)) {
270 ring_buffer_discard_commit(buffer, event);
276 EXPORT_SYMBOL_GPL(call_filter_check_discard);
278 static cycle_t buffer_ftrace_now(struct trace_buffer *buf, int cpu)
282 /* Early boot up does not have a buffer yet */
284 return trace_clock_local();
286 ts = ring_buffer_time_stamp(buf->buffer, cpu);
287 ring_buffer_normalize_time_stamp(buf->buffer, cpu, &ts);
292 cycle_t ftrace_now(int cpu)
294 return buffer_ftrace_now(&global_trace.trace_buffer, cpu);
298 * tracing_is_enabled - Show if global_trace has been disabled
300 * Shows if the global trace has been enabled or not. It uses the
301 * mirror flag "buffer_disabled" to be used in fast paths such as for
302 * the irqsoff tracer. But it may be inaccurate due to races. If you
303 * need to know the accurate state, use tracing_is_on() which is a little
304 * slower, but accurate.
306 int tracing_is_enabled(void)
309 * For quick access (irqsoff uses this in fast path), just
310 * return the mirror variable of the state of the ring buffer.
311 * It's a little racy, but we don't really care.
314 return !global_trace.buffer_disabled;
318 * trace_buf_size is the size in bytes that is allocated
319 * for a buffer. Note, the number of bytes is always rounded
322 * This number is purposely set to a low number of 16384.
323 * If the dump on oops happens, it will be much appreciated
324 * to not have to wait for all that output. Anyway this can be
325 * boot time and run time configurable.
327 #define TRACE_BUF_SIZE_DEFAULT 1441792UL /* 16384 * 88 (sizeof(entry)) */
329 static unsigned long trace_buf_size = TRACE_BUF_SIZE_DEFAULT;
331 /* trace_types holds a link list of available tracers. */
332 static struct tracer *trace_types __read_mostly;
335 * trace_types_lock is used to protect the trace_types list.
337 DEFINE_MUTEX(trace_types_lock);
340 * serialize the access of the ring buffer
342 * ring buffer serializes readers, but it is low level protection.
343 * The validity of the events (which returns by ring_buffer_peek() ..etc)
344 * are not protected by ring buffer.
346 * The content of events may become garbage if we allow other process consumes
347 * these events concurrently:
348 * A) the page of the consumed events may become a normal page
349 * (not reader page) in ring buffer, and this page will be rewrited
350 * by events producer.
351 * B) The page of the consumed events may become a page for splice_read,
352 * and this page will be returned to system.
354 * These primitives allow multi process access to different cpu ring buffer
357 * These primitives don't distinguish read-only and read-consume access.
358 * Multi read-only access are also serialized.
362 static DECLARE_RWSEM(all_cpu_access_lock);
363 static DEFINE_PER_CPU(struct mutex, cpu_access_lock);
365 static inline void trace_access_lock(int cpu)
367 if (cpu == RING_BUFFER_ALL_CPUS) {
368 /* gain it for accessing the whole ring buffer. */
369 down_write(&all_cpu_access_lock);
371 /* gain it for accessing a cpu ring buffer. */
373 /* Firstly block other trace_access_lock(RING_BUFFER_ALL_CPUS). */
374 down_read(&all_cpu_access_lock);
376 /* Secondly block other access to this @cpu ring buffer. */
377 mutex_lock(&per_cpu(cpu_access_lock, cpu));
381 static inline void trace_access_unlock(int cpu)
383 if (cpu == RING_BUFFER_ALL_CPUS) {
384 up_write(&all_cpu_access_lock);
386 mutex_unlock(&per_cpu(cpu_access_lock, cpu));
387 up_read(&all_cpu_access_lock);
391 static inline void trace_access_lock_init(void)
395 for_each_possible_cpu(cpu)
396 mutex_init(&per_cpu(cpu_access_lock, cpu));
401 static DEFINE_MUTEX(access_lock);
403 static inline void trace_access_lock(int cpu)
406 mutex_lock(&access_lock);
409 static inline void trace_access_unlock(int cpu)
412 mutex_unlock(&access_lock);
415 static inline void trace_access_lock_init(void)
421 /* trace_flags holds trace_options default values */
422 unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
423 TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME |
424 TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE |
425 TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS | TRACE_ITER_FUNCTION;
427 static void tracer_tracing_on(struct trace_array *tr)
429 if (tr->trace_buffer.buffer)
430 ring_buffer_record_on(tr->trace_buffer.buffer);
432 * This flag is looked at when buffers haven't been allocated
433 * yet, or by some tracers (like irqsoff), that just want to
434 * know if the ring buffer has been disabled, but it can handle
435 * races of where it gets disabled but we still do a record.
436 * As the check is in the fast path of the tracers, it is more
437 * important to be fast than accurate.
439 tr->buffer_disabled = 0;
440 /* Make the flag seen by readers */
445 * tracing_on - enable tracing buffers
447 * This function enables tracing buffers that may have been
448 * disabled with tracing_off.
450 void tracing_on(void)
452 tracer_tracing_on(&global_trace);
454 EXPORT_SYMBOL_GPL(tracing_on);
457 * __trace_puts - write a constant string into the trace buffer.
458 * @ip: The address of the caller
459 * @str: The constant string to write
460 * @size: The size of the string.
462 int __trace_puts(unsigned long ip, const char *str, int size)
464 struct ring_buffer_event *event;
465 struct ring_buffer *buffer;
466 struct print_entry *entry;
467 unsigned long irq_flags;
470 if (unlikely(tracing_selftest_running || tracing_disabled))
473 alloc = sizeof(*entry) + size + 2; /* possible \n added */
475 local_save_flags(irq_flags);
476 buffer = global_trace.trace_buffer.buffer;
477 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc,
478 irq_flags, preempt_count());
482 entry = ring_buffer_event_data(event);
485 memcpy(&entry->buf, str, size);
487 /* Add a newline if necessary */
488 if (entry->buf[size - 1] != '\n') {
489 entry->buf[size] = '\n';
490 entry->buf[size + 1] = '\0';
492 entry->buf[size] = '\0';
494 __buffer_unlock_commit(buffer, event);
498 EXPORT_SYMBOL_GPL(__trace_puts);
501 * __trace_bputs - write the pointer to a constant string into trace buffer
502 * @ip: The address of the caller
503 * @str: The constant string to write to the buffer to
505 int __trace_bputs(unsigned long ip, const char *str)
507 struct ring_buffer_event *event;
508 struct ring_buffer *buffer;
509 struct bputs_entry *entry;
510 unsigned long irq_flags;
511 int size = sizeof(struct bputs_entry);
513 if (unlikely(tracing_selftest_running || tracing_disabled))
516 local_save_flags(irq_flags);
517 buffer = global_trace.trace_buffer.buffer;
518 event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
519 irq_flags, preempt_count());
523 entry = ring_buffer_event_data(event);
527 __buffer_unlock_commit(buffer, event);
531 EXPORT_SYMBOL_GPL(__trace_bputs);
533 #ifdef CONFIG_TRACER_SNAPSHOT
535 * trace_snapshot - take a snapshot of the current buffer.
537 * This causes a swap between the snapshot buffer and the current live
538 * tracing buffer. You can use this to take snapshots of the live
539 * trace when some condition is triggered, but continue to trace.
541 * Note, make sure to allocate the snapshot with either
542 * a tracing_snapshot_alloc(), or by doing it manually
543 * with: echo 1 > /sys/kernel/debug/tracing/snapshot
545 * If the snapshot buffer is not allocated, it will stop tracing.
546 * Basically making a permanent snapshot.
548 void tracing_snapshot(void)
550 struct trace_array *tr = &global_trace;
551 struct tracer *tracer = tr->current_trace;
555 internal_trace_puts("*** SNAPSHOT CALLED FROM NMI CONTEXT ***\n");
556 internal_trace_puts("*** snapshot is being ignored ***\n");
560 if (!tr->allocated_snapshot) {
561 internal_trace_puts("*** SNAPSHOT NOT ALLOCATED ***\n");
562 internal_trace_puts("*** stopping trace here! ***\n");
567 /* Note, snapshot can not be used when the tracer uses it */
568 if (tracer->use_max_tr) {
569 internal_trace_puts("*** LATENCY TRACER ACTIVE ***\n");
570 internal_trace_puts("*** Can not use snapshot (sorry) ***\n");
574 local_irq_save(flags);
575 update_max_tr(tr, current, smp_processor_id());
576 local_irq_restore(flags);
578 EXPORT_SYMBOL_GPL(tracing_snapshot);
580 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
581 struct trace_buffer *size_buf, int cpu_id);
582 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val);
584 static int alloc_snapshot(struct trace_array *tr)
588 if (!tr->allocated_snapshot) {
590 /* allocate spare buffer */
591 ret = resize_buffer_duplicate_size(&tr->max_buffer,
592 &tr->trace_buffer, RING_BUFFER_ALL_CPUS);
596 tr->allocated_snapshot = true;
602 static void free_snapshot(struct trace_array *tr)
605 * We don't free the ring buffer. instead, resize it because
606 * The max_tr ring buffer has some state (e.g. ring->clock) and
607 * we want preserve it.
609 ring_buffer_resize(tr->max_buffer.buffer, 1, RING_BUFFER_ALL_CPUS);
610 set_buffer_entries(&tr->max_buffer, 1);
611 tracing_reset_online_cpus(&tr->max_buffer);
612 tr->allocated_snapshot = false;
616 * tracing_alloc_snapshot - allocate snapshot buffer.
618 * This only allocates the snapshot buffer if it isn't already
619 * allocated - it doesn't also take a snapshot.
621 * This is meant to be used in cases where the snapshot buffer needs
622 * to be set up for events that can't sleep but need to be able to
623 * trigger a snapshot.
625 int tracing_alloc_snapshot(void)
627 struct trace_array *tr = &global_trace;
630 ret = alloc_snapshot(tr);
635 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
638 * trace_snapshot_alloc - allocate and take a snapshot of the current buffer.
640 * This is similar to trace_snapshot(), but it will allocate the
641 * snapshot buffer if it isn't already allocated. Use this only
642 * where it is safe to sleep, as the allocation may sleep.
644 * This causes a swap between the snapshot buffer and the current live
645 * tracing buffer. You can use this to take snapshots of the live
646 * trace when some condition is triggered, but continue to trace.
648 void tracing_snapshot_alloc(void)
652 ret = tracing_alloc_snapshot();
658 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
660 void tracing_snapshot(void)
662 WARN_ONCE(1, "Snapshot feature not enabled, but internal snapshot used");
664 EXPORT_SYMBOL_GPL(tracing_snapshot);
665 int tracing_alloc_snapshot(void)
667 WARN_ONCE(1, "Snapshot feature not enabled, but snapshot allocation used");
670 EXPORT_SYMBOL_GPL(tracing_alloc_snapshot);
671 void tracing_snapshot_alloc(void)
676 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
677 #endif /* CONFIG_TRACER_SNAPSHOT */
679 static void tracer_tracing_off(struct trace_array *tr)
681 if (tr->trace_buffer.buffer)
682 ring_buffer_record_off(tr->trace_buffer.buffer);
684 * This flag is looked at when buffers haven't been allocated
685 * yet, or by some tracers (like irqsoff), that just want to
686 * know if the ring buffer has been disabled, but it can handle
687 * races of where it gets disabled but we still do a record.
688 * As the check is in the fast path of the tracers, it is more
689 * important to be fast than accurate.
691 tr->buffer_disabled = 1;
692 /* Make the flag seen by readers */
697 * tracing_off - turn off tracing buffers
699 * This function stops the tracing buffers from recording data.
700 * It does not disable any overhead the tracers themselves may
701 * be causing. This function simply causes all recording to
702 * the ring buffers to fail.
704 void tracing_off(void)
706 tracer_tracing_off(&global_trace);
708 EXPORT_SYMBOL_GPL(tracing_off);
710 void disable_trace_on_warning(void)
712 if (__disable_trace_on_warning)
717 * tracer_tracing_is_on - show real state of ring buffer enabled
718 * @tr : the trace array to know if ring buffer is enabled
720 * Shows real state of the ring buffer if it is enabled or not.
722 static int tracer_tracing_is_on(struct trace_array *tr)
724 if (tr->trace_buffer.buffer)
725 return ring_buffer_record_is_on(tr->trace_buffer.buffer);
726 return !tr->buffer_disabled;
730 * tracing_is_on - show state of ring buffers enabled
732 int tracing_is_on(void)
734 return tracer_tracing_is_on(&global_trace);
736 EXPORT_SYMBOL_GPL(tracing_is_on);
738 static int __init set_buf_size(char *str)
740 unsigned long buf_size;
744 buf_size = memparse(str, &str);
745 /* nr_entries can not be zero */
748 trace_buf_size = buf_size;
751 __setup("trace_buf_size=", set_buf_size);
753 static int __init set_tracing_thresh(char *str)
755 unsigned long threshold;
760 ret = kstrtoul(str, 0, &threshold);
763 tracing_thresh = threshold * 1000;
766 __setup("tracing_thresh=", set_tracing_thresh);
768 unsigned long nsecs_to_usecs(unsigned long nsecs)
773 /* These must match the bit postions in trace_iterator_flags */
774 static const char *trace_options[] = {
807 int in_ns; /* is this clock in nanoseconds? */
809 { trace_clock_local, "local", 1 },
810 { trace_clock_global, "global", 1 },
811 { trace_clock_counter, "counter", 0 },
812 { trace_clock_jiffies, "uptime", 1 },
813 { trace_clock, "perf", 1 },
818 * trace_parser_get_init - gets the buffer for trace parser
820 int trace_parser_get_init(struct trace_parser *parser, int size)
822 memset(parser, 0, sizeof(*parser));
824 parser->buffer = kmalloc(size, GFP_KERNEL);
833 * trace_parser_put - frees the buffer for trace parser
835 void trace_parser_put(struct trace_parser *parser)
837 kfree(parser->buffer);
841 * trace_get_user - reads the user input string separated by space
842 * (matched by isspace(ch))
844 * For each string found the 'struct trace_parser' is updated,
845 * and the function returns.
847 * Returns number of bytes read.
849 * See kernel/trace/trace.h for 'struct trace_parser' details.
851 int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
852 size_t cnt, loff_t *ppos)
859 trace_parser_clear(parser);
861 ret = get_user(ch, ubuf++);
869 * The parser is not finished with the last write,
870 * continue reading the user input without skipping spaces.
873 /* skip white space */
874 while (cnt && isspace(ch)) {
875 ret = get_user(ch, ubuf++);
882 /* only spaces were written */
892 /* read the non-space input */
893 while (cnt && !isspace(ch)) {
894 if (parser->idx < parser->size - 1)
895 parser->buffer[parser->idx++] = ch;
900 ret = get_user(ch, ubuf++);
907 /* We either got finished input or we have to wait for another call. */
909 parser->buffer[parser->idx] = 0;
910 parser->cont = false;
911 } else if (parser->idx < parser->size - 1) {
913 parser->buffer[parser->idx++] = ch;
926 ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf, size_t cnt)
934 if (s->len <= s->readpos)
937 len = s->len - s->readpos;
940 ret = copy_to_user(ubuf, s->buffer + s->readpos, cnt);
950 static ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt)
954 if (s->len <= s->readpos)
957 len = s->len - s->readpos;
960 memcpy(buf, s->buffer + s->readpos, cnt);
966 unsigned long __read_mostly tracing_thresh;
968 #ifdef CONFIG_TRACER_MAX_TRACE
970 * Copy the new maximum trace into the separate maximum-trace
971 * structure. (this way the maximum trace is permanently saved,
972 * for later retrieval via /sys/kernel/debug/tracing/latency_trace)
975 __update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
977 struct trace_buffer *trace_buf = &tr->trace_buffer;
978 struct trace_buffer *max_buf = &tr->max_buffer;
979 struct trace_array_cpu *data = per_cpu_ptr(trace_buf->data, cpu);
980 struct trace_array_cpu *max_data = per_cpu_ptr(max_buf->data, cpu);
983 max_buf->time_start = data->preempt_timestamp;
985 max_data->saved_latency = tr->max_latency;
986 max_data->critical_start = data->critical_start;
987 max_data->critical_end = data->critical_end;
989 memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN);
990 max_data->pid = tsk->pid;
992 * If tsk == current, then use current_uid(), as that does not use
993 * RCU. The irq tracer can be called out of RCU scope.
996 max_data->uid = current_uid();
998 max_data->uid = task_uid(tsk);
1000 max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO;
1001 max_data->policy = tsk->policy;
1002 max_data->rt_priority = tsk->rt_priority;
1004 /* record this tasks comm */
1005 tracing_record_cmdline(tsk);
1009 * update_max_tr - snapshot all trace buffers from global_trace to max_tr
1011 * @tsk: the task with the latency
1012 * @cpu: The cpu that initiated the trace.
1014 * Flip the buffers between the @tr and the max_tr and record information
1015 * about which task was the cause of this latency.
1018 update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu)
1020 struct ring_buffer *buf;
1025 WARN_ON_ONCE(!irqs_disabled());
1027 if (!tr->allocated_snapshot) {
1028 /* Only the nop tracer should hit this when disabling */
1029 WARN_ON_ONCE(tr->current_trace != &nop_trace);
1033 arch_spin_lock(&tr->max_lock);
1035 buf = tr->trace_buffer.buffer;
1036 tr->trace_buffer.buffer = tr->max_buffer.buffer;
1037 tr->max_buffer.buffer = buf;
1039 __update_max_tr(tr, tsk, cpu);
1040 arch_spin_unlock(&tr->max_lock);
1044 * update_max_tr_single - only copy one trace over, and reset the rest
1046 * @tsk - task with the latency
1047 * @cpu - the cpu of the buffer to copy.
1049 * Flip the trace of a single CPU buffer between the @tr and the max_tr.
1052 update_max_tr_single(struct trace_array *tr, struct task_struct *tsk, int cpu)
1059 WARN_ON_ONCE(!irqs_disabled());
1060 if (!tr->allocated_snapshot) {
1061 /* Only the nop tracer should hit this when disabling */
1062 WARN_ON_ONCE(tr->current_trace != &nop_trace);
1066 arch_spin_lock(&tr->max_lock);
1068 ret = ring_buffer_swap_cpu(tr->max_buffer.buffer, tr->trace_buffer.buffer, cpu);
1070 if (ret == -EBUSY) {
1072 * We failed to swap the buffer due to a commit taking
1073 * place on this CPU. We fail to record, but we reset
1074 * the max trace buffer (no one writes directly to it)
1075 * and flag that it failed.
1077 trace_array_printk_buf(tr->max_buffer.buffer, _THIS_IP_,
1078 "Failed to swap buffers due to commit in progress\n");
1081 WARN_ON_ONCE(ret && ret != -EAGAIN && ret != -EBUSY);
1083 __update_max_tr(tr, tsk, cpu);
1084 arch_spin_unlock(&tr->max_lock);
1086 #endif /* CONFIG_TRACER_MAX_TRACE */
1088 static int wait_on_pipe(struct trace_iterator *iter)
1090 /* Iterators are static, they should be filled or empty */
1091 if (trace_buffer_iter(iter, iter->cpu_file))
1094 return ring_buffer_wait(iter->trace_buffer->buffer, iter->cpu_file);
1097 #ifdef CONFIG_FTRACE_STARTUP_TEST
1098 static int run_tracer_selftest(struct tracer *type)
1100 struct trace_array *tr = &global_trace;
1101 struct tracer *saved_tracer = tr->current_trace;
1104 if (!type->selftest || tracing_selftest_disabled)
1108 * Run a selftest on this tracer.
1109 * Here we reset the trace buffer, and set the current
1110 * tracer to be this tracer. The tracer can then run some
1111 * internal tracing to verify that everything is in order.
1112 * If we fail, we do not register this tracer.
1114 tracing_reset_online_cpus(&tr->trace_buffer);
1116 tr->current_trace = type;
1118 #ifdef CONFIG_TRACER_MAX_TRACE
1119 if (type->use_max_tr) {
1120 /* If we expanded the buffers, make sure the max is expanded too */
1121 if (ring_buffer_expanded)
1122 ring_buffer_resize(tr->max_buffer.buffer, trace_buf_size,
1123 RING_BUFFER_ALL_CPUS);
1124 tr->allocated_snapshot = true;
1128 /* the test is responsible for initializing and enabling */
1129 pr_info("Testing tracer %s: ", type->name);
1130 ret = type->selftest(type, tr);
1131 /* the test is responsible for resetting too */
1132 tr->current_trace = saved_tracer;
1134 printk(KERN_CONT "FAILED!\n");
1135 /* Add the warning after printing 'FAILED' */
1139 /* Only reset on passing, to avoid touching corrupted buffers */
1140 tracing_reset_online_cpus(&tr->trace_buffer);
1142 #ifdef CONFIG_TRACER_MAX_TRACE
1143 if (type->use_max_tr) {
1144 tr->allocated_snapshot = false;
1146 /* Shrink the max buffer again */
1147 if (ring_buffer_expanded)
1148 ring_buffer_resize(tr->max_buffer.buffer, 1,
1149 RING_BUFFER_ALL_CPUS);
1153 printk(KERN_CONT "PASSED\n");
1157 static inline int run_tracer_selftest(struct tracer *type)
1161 #endif /* CONFIG_FTRACE_STARTUP_TEST */
1164 * register_tracer - register a tracer with the ftrace system.
1165 * @type - the plugin for the tracer
1167 * Register a new plugin tracer.
1169 int register_tracer(struct tracer *type)
1175 pr_info("Tracer must have a name\n");
1179 if (strlen(type->name) >= MAX_TRACER_SIZE) {
1180 pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE);
1184 mutex_lock(&trace_types_lock);
1186 tracing_selftest_running = true;
1188 for (t = trace_types; t; t = t->next) {
1189 if (strcmp(type->name, t->name) == 0) {
1191 pr_info("Tracer %s already registered\n",
1198 if (!type->set_flag)
1199 type->set_flag = &dummy_set_flag;
1201 type->flags = &dummy_tracer_flags;
1203 if (!type->flags->opts)
1204 type->flags->opts = dummy_tracer_opt;
1206 ret = run_tracer_selftest(type);
1210 type->next = trace_types;
1214 tracing_selftest_running = false;
1215 mutex_unlock(&trace_types_lock);
1217 if (ret || !default_bootup_tracer)
1220 if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE))
1223 printk(KERN_INFO "Starting tracer '%s'\n", type->name);
1224 /* Do we want this tracer to start on bootup? */
1225 tracing_set_tracer(&global_trace, type->name);
1226 default_bootup_tracer = NULL;
1227 /* disable other selftests, since this will break it. */
1228 tracing_selftest_disabled = true;
1229 #ifdef CONFIG_FTRACE_STARTUP_TEST
1230 printk(KERN_INFO "Disabling FTRACE selftests due to running tracer '%s'\n",
1238 void tracing_reset(struct trace_buffer *buf, int cpu)
1240 struct ring_buffer *buffer = buf->buffer;
1245 ring_buffer_record_disable(buffer);
1247 /* Make sure all commits have finished */
1248 synchronize_sched();
1249 ring_buffer_reset_cpu(buffer, cpu);
1251 ring_buffer_record_enable(buffer);
1254 void tracing_reset_online_cpus(struct trace_buffer *buf)
1256 struct ring_buffer *buffer = buf->buffer;
1262 ring_buffer_record_disable(buffer);
1264 /* Make sure all commits have finished */
1265 synchronize_sched();
1267 buf->time_start = buffer_ftrace_now(buf, buf->cpu);
1269 for_each_online_cpu(cpu)
1270 ring_buffer_reset_cpu(buffer, cpu);
1272 ring_buffer_record_enable(buffer);
1275 /* Must have trace_types_lock held */
1276 void tracing_reset_all_online_cpus(void)
1278 struct trace_array *tr;
1280 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
1281 tracing_reset_online_cpus(&tr->trace_buffer);
1282 #ifdef CONFIG_TRACER_MAX_TRACE
1283 tracing_reset_online_cpus(&tr->max_buffer);
1288 #define SAVED_CMDLINES_DEFAULT 128
1289 #define NO_CMDLINE_MAP UINT_MAX
1290 static arch_spinlock_t trace_cmdline_lock = __ARCH_SPIN_LOCK_UNLOCKED;
1291 struct saved_cmdlines_buffer {
1292 unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1];
1293 unsigned *map_cmdline_to_pid;
1294 unsigned cmdline_num;
1296 char *saved_cmdlines;
1298 static struct saved_cmdlines_buffer *savedcmd;
1300 /* temporary disable recording */
1301 static atomic_t trace_record_cmdline_disabled __read_mostly;
1303 static inline char *get_saved_cmdlines(int idx)
1305 return &savedcmd->saved_cmdlines[idx * TASK_COMM_LEN];
1308 static inline void set_cmdline(int idx, const char *cmdline)
1310 memcpy(get_saved_cmdlines(idx), cmdline, TASK_COMM_LEN);
1313 static int allocate_cmdlines_buffer(unsigned int val,
1314 struct saved_cmdlines_buffer *s)
1316 s->map_cmdline_to_pid = kmalloc(val * sizeof(*s->map_cmdline_to_pid),
1318 if (!s->map_cmdline_to_pid)
1321 s->saved_cmdlines = kmalloc(val * TASK_COMM_LEN, GFP_KERNEL);
1322 if (!s->saved_cmdlines) {
1323 kfree(s->map_cmdline_to_pid);
1328 s->cmdline_num = val;
1329 memset(&s->map_pid_to_cmdline, NO_CMDLINE_MAP,
1330 sizeof(s->map_pid_to_cmdline));
1331 memset(s->map_cmdline_to_pid, NO_CMDLINE_MAP,
1332 val * sizeof(*s->map_cmdline_to_pid));
1337 static int trace_create_savedcmd(void)
1341 savedcmd = kmalloc(sizeof(*savedcmd), GFP_KERNEL);
1345 ret = allocate_cmdlines_buffer(SAVED_CMDLINES_DEFAULT, savedcmd);
1355 int is_tracing_stopped(void)
1357 return global_trace.stop_count;
1361 * tracing_start - quick start of the tracer
1363 * If tracing is enabled but was stopped by tracing_stop,
1364 * this will start the tracer back up.
1366 void tracing_start(void)
1368 struct ring_buffer *buffer;
1369 unsigned long flags;
1371 if (tracing_disabled)
1374 raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1375 if (--global_trace.stop_count) {
1376 if (global_trace.stop_count < 0) {
1377 /* Someone screwed up their debugging */
1379 global_trace.stop_count = 0;
1384 /* Prevent the buffers from switching */
1385 arch_spin_lock(&global_trace.max_lock);
1387 buffer = global_trace.trace_buffer.buffer;
1389 ring_buffer_record_enable(buffer);
1391 #ifdef CONFIG_TRACER_MAX_TRACE
1392 buffer = global_trace.max_buffer.buffer;
1394 ring_buffer_record_enable(buffer);
1397 arch_spin_unlock(&global_trace.max_lock);
1400 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1403 static void tracing_start_tr(struct trace_array *tr)
1405 struct ring_buffer *buffer;
1406 unsigned long flags;
1408 if (tracing_disabled)
1411 /* If global, we need to also start the max tracer */
1412 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1413 return tracing_start();
1415 raw_spin_lock_irqsave(&tr->start_lock, flags);
1417 if (--tr->stop_count) {
1418 if (tr->stop_count < 0) {
1419 /* Someone screwed up their debugging */
1426 buffer = tr->trace_buffer.buffer;
1428 ring_buffer_record_enable(buffer);
1431 raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1435 * tracing_stop - quick stop of the tracer
1437 * Light weight way to stop tracing. Use in conjunction with
1440 void tracing_stop(void)
1442 struct ring_buffer *buffer;
1443 unsigned long flags;
1445 raw_spin_lock_irqsave(&global_trace.start_lock, flags);
1446 if (global_trace.stop_count++)
1449 /* Prevent the buffers from switching */
1450 arch_spin_lock(&global_trace.max_lock);
1452 buffer = global_trace.trace_buffer.buffer;
1454 ring_buffer_record_disable(buffer);
1456 #ifdef CONFIG_TRACER_MAX_TRACE
1457 buffer = global_trace.max_buffer.buffer;
1459 ring_buffer_record_disable(buffer);
1462 arch_spin_unlock(&global_trace.max_lock);
1465 raw_spin_unlock_irqrestore(&global_trace.start_lock, flags);
1468 static void tracing_stop_tr(struct trace_array *tr)
1470 struct ring_buffer *buffer;
1471 unsigned long flags;
1473 /* If global, we need to also stop the max tracer */
1474 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
1475 return tracing_stop();
1477 raw_spin_lock_irqsave(&tr->start_lock, flags);
1478 if (tr->stop_count++)
1481 buffer = tr->trace_buffer.buffer;
1483 ring_buffer_record_disable(buffer);
1486 raw_spin_unlock_irqrestore(&tr->start_lock, flags);
1489 void trace_stop_cmdline_recording(void);
1491 static int trace_save_cmdline(struct task_struct *tsk)
1495 if (!tsk->pid || unlikely(tsk->pid > PID_MAX_DEFAULT))
1499 * It's not the end of the world if we don't get
1500 * the lock, but we also don't want to spin
1501 * nor do we want to disable interrupts,
1502 * so if we miss here, then better luck next time.
1504 if (!arch_spin_trylock(&trace_cmdline_lock))
1507 idx = savedcmd->map_pid_to_cmdline[tsk->pid];
1508 if (idx == NO_CMDLINE_MAP) {
1509 idx = (savedcmd->cmdline_idx + 1) % savedcmd->cmdline_num;
1512 * Check whether the cmdline buffer at idx has a pid
1513 * mapped. We are going to overwrite that entry so we
1514 * need to clear the map_pid_to_cmdline. Otherwise we
1515 * would read the new comm for the old pid.
1517 pid = savedcmd->map_cmdline_to_pid[idx];
1518 if (pid != NO_CMDLINE_MAP)
1519 savedcmd->map_pid_to_cmdline[pid] = NO_CMDLINE_MAP;
1521 savedcmd->map_cmdline_to_pid[idx] = tsk->pid;
1522 savedcmd->map_pid_to_cmdline[tsk->pid] = idx;
1524 savedcmd->cmdline_idx = idx;
1527 set_cmdline(idx, tsk->comm);
1529 arch_spin_unlock(&trace_cmdline_lock);
1534 static void __trace_find_cmdline(int pid, char comm[])
1539 strcpy(comm, "<idle>");
1543 if (WARN_ON_ONCE(pid < 0)) {
1544 strcpy(comm, "<XXX>");
1548 if (pid > PID_MAX_DEFAULT) {
1549 strcpy(comm, "<...>");
1553 map = savedcmd->map_pid_to_cmdline[pid];
1554 if (map != NO_CMDLINE_MAP)
1555 strcpy(comm, get_saved_cmdlines(map));
1557 strcpy(comm, "<...>");
1560 void trace_find_cmdline(int pid, char comm[])
1563 arch_spin_lock(&trace_cmdline_lock);
1565 __trace_find_cmdline(pid, comm);
1567 arch_spin_unlock(&trace_cmdline_lock);
1571 void tracing_record_cmdline(struct task_struct *tsk)
1573 if (atomic_read(&trace_record_cmdline_disabled) || !tracing_is_on())
1576 if (!__this_cpu_read(trace_cmdline_save))
1579 if (trace_save_cmdline(tsk))
1580 __this_cpu_write(trace_cmdline_save, false);
1584 tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
1587 struct task_struct *tsk = current;
1589 entry->preempt_count = pc & 0xff;
1590 entry->pid = (tsk) ? tsk->pid : 0;
1592 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
1593 (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) |
1595 TRACE_FLAG_IRQS_NOSUPPORT |
1597 ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
1598 ((pc & SOFTIRQ_MASK) ? TRACE_FLAG_SOFTIRQ : 0) |
1599 (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
1600 (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
1602 EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
1604 struct ring_buffer_event *
1605 trace_buffer_lock_reserve(struct ring_buffer *buffer,
1608 unsigned long flags, int pc)
1610 struct ring_buffer_event *event;
1612 event = ring_buffer_lock_reserve(buffer, len);
1613 if (event != NULL) {
1614 struct trace_entry *ent = ring_buffer_event_data(event);
1616 tracing_generic_entry_update(ent, flags, pc);
1624 __buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event)
1626 __this_cpu_write(trace_cmdline_save, true);
1627 ring_buffer_unlock_commit(buffer, event);
1631 __trace_buffer_unlock_commit(struct ring_buffer *buffer,
1632 struct ring_buffer_event *event,
1633 unsigned long flags, int pc)
1635 __buffer_unlock_commit(buffer, event);
1637 ftrace_trace_stack(buffer, flags, 6, pc);
1638 ftrace_trace_userstack(buffer, flags, pc);
1641 void trace_buffer_unlock_commit(struct ring_buffer *buffer,
1642 struct ring_buffer_event *event,
1643 unsigned long flags, int pc)
1645 __trace_buffer_unlock_commit(buffer, event, flags, pc);
1647 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit);
1649 static struct ring_buffer *temp_buffer;
1651 struct ring_buffer_event *
1652 trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
1653 struct ftrace_event_file *ftrace_file,
1654 int type, unsigned long len,
1655 unsigned long flags, int pc)
1657 struct ring_buffer_event *entry;
1659 *current_rb = ftrace_file->tr->trace_buffer.buffer;
1660 entry = trace_buffer_lock_reserve(*current_rb,
1661 type, len, flags, pc);
1663 * If tracing is off, but we have triggers enabled
1664 * we still need to look at the event data. Use the temp_buffer
1665 * to store the trace event for the tigger to use. It's recusive
1666 * safe and will not be recorded anywhere.
1668 if (!entry && ftrace_file->flags & FTRACE_EVENT_FL_TRIGGER_COND) {
1669 *current_rb = temp_buffer;
1670 entry = trace_buffer_lock_reserve(*current_rb,
1671 type, len, flags, pc);
1675 EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve);
1677 struct ring_buffer_event *
1678 trace_current_buffer_lock_reserve(struct ring_buffer **current_rb,
1679 int type, unsigned long len,
1680 unsigned long flags, int pc)
1682 *current_rb = global_trace.trace_buffer.buffer;
1683 return trace_buffer_lock_reserve(*current_rb,
1684 type, len, flags, pc);
1686 EXPORT_SYMBOL_GPL(trace_current_buffer_lock_reserve);
1688 void trace_current_buffer_unlock_commit(struct ring_buffer *buffer,
1689 struct ring_buffer_event *event,
1690 unsigned long flags, int pc)
1692 __trace_buffer_unlock_commit(buffer, event, flags, pc);
1694 EXPORT_SYMBOL_GPL(trace_current_buffer_unlock_commit);
1696 void trace_buffer_unlock_commit_regs(struct ring_buffer *buffer,
1697 struct ring_buffer_event *event,
1698 unsigned long flags, int pc,
1699 struct pt_regs *regs)
1701 __buffer_unlock_commit(buffer, event);
1703 ftrace_trace_stack_regs(buffer, flags, 0, pc, regs);
1704 ftrace_trace_userstack(buffer, flags, pc);
1706 EXPORT_SYMBOL_GPL(trace_buffer_unlock_commit_regs);
1708 void trace_current_buffer_discard_commit(struct ring_buffer *buffer,
1709 struct ring_buffer_event *event)
1711 ring_buffer_discard_commit(buffer, event);
1713 EXPORT_SYMBOL_GPL(trace_current_buffer_discard_commit);
1716 trace_function(struct trace_array *tr,
1717 unsigned long ip, unsigned long parent_ip, unsigned long flags,
1720 struct ftrace_event_call *call = &event_function;
1721 struct ring_buffer *buffer = tr->trace_buffer.buffer;
1722 struct ring_buffer_event *event;
1723 struct ftrace_entry *entry;
1725 /* If we are reading the ring buffer, don't trace */
1726 if (unlikely(__this_cpu_read(ftrace_cpu_disabled)))
1729 event = trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry),
1733 entry = ring_buffer_event_data(event);
1735 entry->parent_ip = parent_ip;
1737 if (!call_filter_check_discard(call, entry, buffer, event))
1738 __buffer_unlock_commit(buffer, event);
1741 #ifdef CONFIG_STACKTRACE
1743 #define FTRACE_STACK_MAX_ENTRIES (PAGE_SIZE / sizeof(unsigned long))
1744 struct ftrace_stack {
1745 unsigned long calls[FTRACE_STACK_MAX_ENTRIES];
1748 static DEFINE_PER_CPU(struct ftrace_stack, ftrace_stack);
1749 static DEFINE_PER_CPU(int, ftrace_stack_reserve);
1751 static void __ftrace_trace_stack(struct ring_buffer *buffer,
1752 unsigned long flags,
1753 int skip, int pc, struct pt_regs *regs)
1755 struct ftrace_event_call *call = &event_kernel_stack;
1756 struct ring_buffer_event *event;
1757 struct stack_entry *entry;
1758 struct stack_trace trace;
1760 int size = FTRACE_STACK_ENTRIES;
1762 trace.nr_entries = 0;
1766 * Since events can happen in NMIs there's no safe way to
1767 * use the per cpu ftrace_stacks. We reserve it and if an interrupt
1768 * or NMI comes in, it will just have to use the default
1769 * FTRACE_STACK_SIZE.
1771 preempt_disable_notrace();
1773 use_stack = __this_cpu_inc_return(ftrace_stack_reserve);
1775 * We don't need any atomic variables, just a barrier.
1776 * If an interrupt comes in, we don't care, because it would
1777 * have exited and put the counter back to what we want.
1778 * We just need a barrier to keep gcc from moving things
1782 if (use_stack == 1) {
1783 trace.entries = this_cpu_ptr(ftrace_stack.calls);
1784 trace.max_entries = FTRACE_STACK_MAX_ENTRIES;
1787 save_stack_trace_regs(regs, &trace);
1789 save_stack_trace(&trace);
1791 if (trace.nr_entries > size)
1792 size = trace.nr_entries;
1794 /* From now on, use_stack is a boolean */
1797 size *= sizeof(unsigned long);
1799 event = trace_buffer_lock_reserve(buffer, TRACE_STACK,
1800 sizeof(*entry) + size, flags, pc);
1803 entry = ring_buffer_event_data(event);
1805 memset(&entry->caller, 0, size);
1808 memcpy(&entry->caller, trace.entries,
1809 trace.nr_entries * sizeof(unsigned long));
1811 trace.max_entries = FTRACE_STACK_ENTRIES;
1812 trace.entries = entry->caller;
1814 save_stack_trace_regs(regs, &trace);
1816 save_stack_trace(&trace);
1819 entry->size = trace.nr_entries;
1821 if (!call_filter_check_discard(call, entry, buffer, event))
1822 __buffer_unlock_commit(buffer, event);
1825 /* Again, don't let gcc optimize things here */
1827 __this_cpu_dec(ftrace_stack_reserve);
1828 preempt_enable_notrace();
1832 void ftrace_trace_stack_regs(struct ring_buffer *buffer, unsigned long flags,
1833 int skip, int pc, struct pt_regs *regs)
1835 if (!(trace_flags & TRACE_ITER_STACKTRACE))
1838 __ftrace_trace_stack(buffer, flags, skip, pc, regs);
1841 void ftrace_trace_stack(struct ring_buffer *buffer, unsigned long flags,
1844 if (!(trace_flags & TRACE_ITER_STACKTRACE))
1847 __ftrace_trace_stack(buffer, flags, skip, pc, NULL);
1850 void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
1853 __ftrace_trace_stack(tr->trace_buffer.buffer, flags, skip, pc, NULL);
1857 * trace_dump_stack - record a stack back trace in the trace buffer
1858 * @skip: Number of functions to skip (helper handlers)
1860 void trace_dump_stack(int skip)
1862 unsigned long flags;
1864 if (tracing_disabled || tracing_selftest_running)
1867 local_save_flags(flags);
1870 * Skip 3 more, seems to get us at the caller of
1874 __ftrace_trace_stack(global_trace.trace_buffer.buffer,
1875 flags, skip, preempt_count(), NULL);
1878 static DEFINE_PER_CPU(int, user_stack_count);
1881 ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
1883 struct ftrace_event_call *call = &event_user_stack;
1884 struct ring_buffer_event *event;
1885 struct userstack_entry *entry;
1886 struct stack_trace trace;
1888 if (!(trace_flags & TRACE_ITER_USERSTACKTRACE))
1892 * NMIs can not handle page faults, even with fix ups.
1893 * The save user stack can (and often does) fault.
1895 if (unlikely(in_nmi()))
1899 * prevent recursion, since the user stack tracing may
1900 * trigger other kernel events.
1903 if (__this_cpu_read(user_stack_count))
1906 __this_cpu_inc(user_stack_count);
1908 event = trace_buffer_lock_reserve(buffer, TRACE_USER_STACK,
1909 sizeof(*entry), flags, pc);
1911 goto out_drop_count;
1912 entry = ring_buffer_event_data(event);
1914 entry->tgid = current->tgid;
1915 memset(&entry->caller, 0, sizeof(entry->caller));
1917 trace.nr_entries = 0;
1918 trace.max_entries = FTRACE_STACK_ENTRIES;
1920 trace.entries = entry->caller;
1922 save_stack_trace_user(&trace);
1923 if (!call_filter_check_discard(call, entry, buffer, event))
1924 __buffer_unlock_commit(buffer, event);
1927 __this_cpu_dec(user_stack_count);
1933 static void __trace_userstack(struct trace_array *tr, unsigned long flags)
1935 ftrace_trace_userstack(tr, flags, preempt_count());
1939 #endif /* CONFIG_STACKTRACE */
1941 /* created for use with alloc_percpu */
1942 struct trace_buffer_struct {
1943 char buffer[TRACE_BUF_SIZE];
1946 static struct trace_buffer_struct *trace_percpu_buffer;
1947 static struct trace_buffer_struct *trace_percpu_sirq_buffer;
1948 static struct trace_buffer_struct *trace_percpu_irq_buffer;
1949 static struct trace_buffer_struct *trace_percpu_nmi_buffer;
1952 * The buffer used is dependent on the context. There is a per cpu
1953 * buffer for normal context, softirq contex, hard irq context and
1954 * for NMI context. Thise allows for lockless recording.
1956 * Note, if the buffers failed to be allocated, then this returns NULL
1958 static char *get_trace_buf(void)
1960 struct trace_buffer_struct *percpu_buffer;
1963 * If we have allocated per cpu buffers, then we do not
1964 * need to do any locking.
1967 percpu_buffer = trace_percpu_nmi_buffer;
1969 percpu_buffer = trace_percpu_irq_buffer;
1970 else if (in_softirq())
1971 percpu_buffer = trace_percpu_sirq_buffer;
1973 percpu_buffer = trace_percpu_buffer;
1978 return this_cpu_ptr(&percpu_buffer->buffer[0]);
1981 static int alloc_percpu_trace_buffer(void)
1983 struct trace_buffer_struct *buffers;
1984 struct trace_buffer_struct *sirq_buffers;
1985 struct trace_buffer_struct *irq_buffers;
1986 struct trace_buffer_struct *nmi_buffers;
1988 buffers = alloc_percpu(struct trace_buffer_struct);
1992 sirq_buffers = alloc_percpu(struct trace_buffer_struct);
1996 irq_buffers = alloc_percpu(struct trace_buffer_struct);
2000 nmi_buffers = alloc_percpu(struct trace_buffer_struct);
2004 trace_percpu_buffer = buffers;
2005 trace_percpu_sirq_buffer = sirq_buffers;
2006 trace_percpu_irq_buffer = irq_buffers;
2007 trace_percpu_nmi_buffer = nmi_buffers;
2012 free_percpu(irq_buffers);
2014 free_percpu(sirq_buffers);
2016 free_percpu(buffers);
2018 WARN(1, "Could not allocate percpu trace_printk buffer");
2022 static int buffers_allocated;
2024 void trace_printk_init_buffers(void)
2026 if (buffers_allocated)
2029 if (alloc_percpu_trace_buffer())
2032 /* trace_printk() is for debug use only. Don't use it in production. */
2034 pr_warning("\n**********************************************************\n");
2035 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
2036 pr_warning("** **\n");
2037 pr_warning("** trace_printk() being used. Allocating extra memory. **\n");
2038 pr_warning("** **\n");
2039 pr_warning("** This means that this is a DEBUG kernel and it is **\n");
2040 pr_warning("** unsafe for produciton use. **\n");
2041 pr_warning("** **\n");
2042 pr_warning("** If you see this message and you are not debugging **\n");
2043 pr_warning("** the kernel, report this immediately to your vendor! **\n");
2044 pr_warning("** **\n");
2045 pr_warning("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
2046 pr_warning("**********************************************************\n");
2048 /* Expand the buffers to set size */
2049 tracing_update_buffers();
2051 buffers_allocated = 1;
2054 * trace_printk_init_buffers() can be called by modules.
2055 * If that happens, then we need to start cmdline recording
2056 * directly here. If the global_trace.buffer is already
2057 * allocated here, then this was called by module code.
2059 if (global_trace.trace_buffer.buffer)
2060 tracing_start_cmdline_record();
2063 void trace_printk_start_comm(void)
2065 /* Start tracing comms if trace printk is set */
2066 if (!buffers_allocated)
2068 tracing_start_cmdline_record();
2071 static void trace_printk_start_stop_comm(int enabled)
2073 if (!buffers_allocated)
2077 tracing_start_cmdline_record();
2079 tracing_stop_cmdline_record();
2083 * trace_vbprintk - write binary msg to tracing buffer
2086 int trace_vbprintk(unsigned long ip, const char *fmt, va_list args)
2088 struct ftrace_event_call *call = &event_bprint;
2089 struct ring_buffer_event *event;
2090 struct ring_buffer *buffer;
2091 struct trace_array *tr = &global_trace;
2092 struct bprint_entry *entry;
2093 unsigned long flags;
2095 int len = 0, size, pc;
2097 if (unlikely(tracing_selftest_running || tracing_disabled))
2100 /* Don't pollute graph traces with trace_vprintk internals */
2101 pause_graph_tracing();
2103 pc = preempt_count();
2104 preempt_disable_notrace();
2106 tbuffer = get_trace_buf();
2112 len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args);
2114 if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0)
2117 local_save_flags(flags);
2118 size = sizeof(*entry) + sizeof(u32) * len;
2119 buffer = tr->trace_buffer.buffer;
2120 event = trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size,
2124 entry = ring_buffer_event_data(event);
2128 memcpy(entry->buf, tbuffer, sizeof(u32) * len);
2129 if (!call_filter_check_discard(call, entry, buffer, event)) {
2130 __buffer_unlock_commit(buffer, event);
2131 ftrace_trace_stack(buffer, flags, 6, pc);
2135 preempt_enable_notrace();
2136 unpause_graph_tracing();
2140 EXPORT_SYMBOL_GPL(trace_vbprintk);
2143 __trace_array_vprintk(struct ring_buffer *buffer,
2144 unsigned long ip, const char *fmt, va_list args)
2146 struct ftrace_event_call *call = &event_print;
2147 struct ring_buffer_event *event;
2148 int len = 0, size, pc;
2149 struct print_entry *entry;
2150 unsigned long flags;
2153 if (tracing_disabled || tracing_selftest_running)
2156 /* Don't pollute graph traces with trace_vprintk internals */
2157 pause_graph_tracing();
2159 pc = preempt_count();
2160 preempt_disable_notrace();
2163 tbuffer = get_trace_buf();
2169 len = vsnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args);
2170 if (len > TRACE_BUF_SIZE)
2173 local_save_flags(flags);
2174 size = sizeof(*entry) + len + 1;
2175 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
2179 entry = ring_buffer_event_data(event);
2182 memcpy(&entry->buf, tbuffer, len);
2183 entry->buf[len] = '\0';
2184 if (!call_filter_check_discard(call, entry, buffer, event)) {
2185 __buffer_unlock_commit(buffer, event);
2186 ftrace_trace_stack(buffer, flags, 6, pc);
2189 preempt_enable_notrace();
2190 unpause_graph_tracing();
2195 int trace_array_vprintk(struct trace_array *tr,
2196 unsigned long ip, const char *fmt, va_list args)
2198 return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
2201 int trace_array_printk(struct trace_array *tr,
2202 unsigned long ip, const char *fmt, ...)
2207 if (!(trace_flags & TRACE_ITER_PRINTK))
2211 ret = trace_array_vprintk(tr, ip, fmt, ap);
2216 int trace_array_printk_buf(struct ring_buffer *buffer,
2217 unsigned long ip, const char *fmt, ...)
2222 if (!(trace_flags & TRACE_ITER_PRINTK))
2226 ret = __trace_array_vprintk(buffer, ip, fmt, ap);
2231 int trace_vprintk(unsigned long ip, const char *fmt, va_list args)
2233 return trace_array_vprintk(&global_trace, ip, fmt, args);
2235 EXPORT_SYMBOL_GPL(trace_vprintk);
2237 static void trace_iterator_increment(struct trace_iterator *iter)
2239 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu);
2243 ring_buffer_read(buf_iter, NULL);
2246 static struct trace_entry *
2247 peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts,
2248 unsigned long *lost_events)
2250 struct ring_buffer_event *event;
2251 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu);
2254 event = ring_buffer_iter_peek(buf_iter, ts);
2256 event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts,
2260 iter->ent_size = ring_buffer_event_length(event);
2261 return ring_buffer_event_data(event);
2267 static struct trace_entry *
2268 __find_next_entry(struct trace_iterator *iter, int *ent_cpu,
2269 unsigned long *missing_events, u64 *ent_ts)
2271 struct ring_buffer *buffer = iter->trace_buffer->buffer;
2272 struct trace_entry *ent, *next = NULL;
2273 unsigned long lost_events = 0, next_lost = 0;
2274 int cpu_file = iter->cpu_file;
2275 u64 next_ts = 0, ts;
2281 * If we are in a per_cpu trace file, don't bother by iterating over
2282 * all cpu and peek directly.
2284 if (cpu_file > RING_BUFFER_ALL_CPUS) {
2285 if (ring_buffer_empty_cpu(buffer, cpu_file))
2287 ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events);
2289 *ent_cpu = cpu_file;
2294 for_each_tracing_cpu(cpu) {
2296 if (ring_buffer_empty_cpu(buffer, cpu))
2299 ent = peek_next_entry(iter, cpu, &ts, &lost_events);
2302 * Pick the entry with the smallest timestamp:
2304 if (ent && (!next || ts < next_ts)) {
2308 next_lost = lost_events;
2309 next_size = iter->ent_size;
2313 iter->ent_size = next_size;
2316 *ent_cpu = next_cpu;
2322 *missing_events = next_lost;
2327 /* Find the next real entry, without updating the iterator itself */
2328 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
2329 int *ent_cpu, u64 *ent_ts)
2331 return __find_next_entry(iter, ent_cpu, NULL, ent_ts);
2334 /* Find the next real entry, and increment the iterator to the next entry */
2335 void *trace_find_next_entry_inc(struct trace_iterator *iter)
2337 iter->ent = __find_next_entry(iter, &iter->cpu,
2338 &iter->lost_events, &iter->ts);
2341 trace_iterator_increment(iter);
2343 return iter->ent ? iter : NULL;
2346 static void trace_consume(struct trace_iterator *iter)
2348 ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts,
2349 &iter->lost_events);
2352 static void *s_next(struct seq_file *m, void *v, loff_t *pos)
2354 struct trace_iterator *iter = m->private;
2358 WARN_ON_ONCE(iter->leftover);
2362 /* can't go backwards */
2367 ent = trace_find_next_entry_inc(iter);
2371 while (ent && iter->idx < i)
2372 ent = trace_find_next_entry_inc(iter);
2379 void tracing_iter_reset(struct trace_iterator *iter, int cpu)
2381 struct ring_buffer_event *event;
2382 struct ring_buffer_iter *buf_iter;
2383 unsigned long entries = 0;
2386 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0;
2388 buf_iter = trace_buffer_iter(iter, cpu);
2392 ring_buffer_iter_reset(buf_iter);
2395 * We could have the case with the max latency tracers
2396 * that a reset never took place on a cpu. This is evident
2397 * by the timestamp being before the start of the buffer.
2399 while ((event = ring_buffer_iter_peek(buf_iter, &ts))) {
2400 if (ts >= iter->trace_buffer->time_start)
2403 ring_buffer_read(buf_iter, NULL);
2406 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries;
2410 * The current tracer is copied to avoid a global locking
2413 static void *s_start(struct seq_file *m, loff_t *pos)
2415 struct trace_iterator *iter = m->private;
2416 struct trace_array *tr = iter->tr;
2417 int cpu_file = iter->cpu_file;
2423 * copy the tracer to avoid using a global lock all around.
2424 * iter->trace is a copy of current_trace, the pointer to the
2425 * name may be used instead of a strcmp(), as iter->trace->name
2426 * will point to the same string as current_trace->name.
2428 mutex_lock(&trace_types_lock);
2429 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name))
2430 *iter->trace = *tr->current_trace;
2431 mutex_unlock(&trace_types_lock);
2433 #ifdef CONFIG_TRACER_MAX_TRACE
2434 if (iter->snapshot && iter->trace->use_max_tr)
2435 return ERR_PTR(-EBUSY);
2438 if (!iter->snapshot)
2439 atomic_inc(&trace_record_cmdline_disabled);
2441 if (*pos != iter->pos) {
2446 if (cpu_file == RING_BUFFER_ALL_CPUS) {
2447 for_each_tracing_cpu(cpu)
2448 tracing_iter_reset(iter, cpu);
2450 tracing_iter_reset(iter, cpu_file);
2453 for (p = iter; p && l < *pos; p = s_next(m, p, &l))
2458 * If we overflowed the seq_file before, then we want
2459 * to just reuse the trace_seq buffer again.
2465 p = s_next(m, p, &l);
2469 trace_event_read_lock();
2470 trace_access_lock(cpu_file);
2474 static void s_stop(struct seq_file *m, void *p)
2476 struct trace_iterator *iter = m->private;
2478 #ifdef CONFIG_TRACER_MAX_TRACE
2479 if (iter->snapshot && iter->trace->use_max_tr)
2483 if (!iter->snapshot)
2484 atomic_dec(&trace_record_cmdline_disabled);
2486 trace_access_unlock(iter->cpu_file);
2487 trace_event_read_unlock();
2491 get_total_entries(struct trace_buffer *buf,
2492 unsigned long *total, unsigned long *entries)
2494 unsigned long count;
2500 for_each_tracing_cpu(cpu) {
2501 count = ring_buffer_entries_cpu(buf->buffer, cpu);
2503 * If this buffer has skipped entries, then we hold all
2504 * entries for the trace and we need to ignore the
2505 * ones before the time stamp.
2507 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) {
2508 count -= per_cpu_ptr(buf->data, cpu)->skipped_entries;
2509 /* total is the same as the entries */
2513 ring_buffer_overrun_cpu(buf->buffer, cpu);
2518 static void print_lat_help_header(struct seq_file *m)
2520 seq_puts(m, "# _------=> CPU# \n");
2521 seq_puts(m, "# / _-----=> irqs-off \n");
2522 seq_puts(m, "# | / _----=> need-resched \n");
2523 seq_puts(m, "# || / _---=> hardirq/softirq \n");
2524 seq_puts(m, "# ||| / _--=> preempt-depth \n");
2525 seq_puts(m, "# |||| / delay \n");
2526 seq_puts(m, "# cmd pid ||||| time | caller \n");
2527 seq_puts(m, "# \\ / ||||| \\ | / \n");
2530 static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
2532 unsigned long total;
2533 unsigned long entries;
2535 get_total_entries(buf, &total, &entries);
2536 seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu #P:%d\n",
2537 entries, total, num_online_cpus());
2541 static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m)
2543 print_event_info(buf, m);
2544 seq_puts(m, "# TASK-PID CPU# TIMESTAMP FUNCTION\n");
2545 seq_puts(m, "# | | | | |\n");
2548 static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m)
2550 print_event_info(buf, m);
2551 seq_puts(m, "# _-----=> irqs-off\n");
2552 seq_puts(m, "# / _----=> need-resched\n");
2553 seq_puts(m, "# | / _---=> hardirq/softirq\n");
2554 seq_puts(m, "# || / _--=> preempt-depth\n");
2555 seq_puts(m, "# ||| / delay\n");
2556 seq_puts(m, "# TASK-PID CPU# |||| TIMESTAMP FUNCTION\n");
2557 seq_puts(m, "# | | | |||| | |\n");
2561 print_trace_header(struct seq_file *m, struct trace_iterator *iter)
2563 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK);
2564 struct trace_buffer *buf = iter->trace_buffer;
2565 struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu);
2566 struct tracer *type = iter->trace;
2567 unsigned long entries;
2568 unsigned long total;
2569 const char *name = "preemption";
2573 get_total_entries(buf, &total, &entries);
2575 seq_printf(m, "# %s latency trace v1.1.5 on %s\n",
2577 seq_puts(m, "# -----------------------------------"
2578 "---------------------------------\n");
2579 seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |"
2580 " (M:%s VP:%d, KP:%d, SP:%d HP:%d",
2581 nsecs_to_usecs(data->saved_latency),
2585 #if defined(CONFIG_PREEMPT_NONE)
2587 #elif defined(CONFIG_PREEMPT_VOLUNTARY)
2589 #elif defined(CONFIG_PREEMPT)
2594 /* These are reserved for later use */
2597 seq_printf(m, " #P:%d)\n", num_online_cpus());
2601 seq_puts(m, "# -----------------\n");
2602 seq_printf(m, "# | task: %.16s-%d "
2603 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n",
2604 data->comm, data->pid,
2605 from_kuid_munged(seq_user_ns(m), data->uid), data->nice,
2606 data->policy, data->rt_priority);
2607 seq_puts(m, "# -----------------\n");
2609 if (data->critical_start) {
2610 seq_puts(m, "# => started at: ");
2611 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags);
2612 trace_print_seq(m, &iter->seq);
2613 seq_puts(m, "\n# => ended at: ");
2614 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags);
2615 trace_print_seq(m, &iter->seq);
2616 seq_puts(m, "\n#\n");
2622 static void test_cpu_buff_start(struct trace_iterator *iter)
2624 struct trace_seq *s = &iter->seq;
2626 if (!(trace_flags & TRACE_ITER_ANNOTATE))
2629 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
2632 if (cpumask_test_cpu(iter->cpu, iter->started))
2635 if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries)
2638 cpumask_set_cpu(iter->cpu, iter->started);
2640 /* Don't print started cpu buffer for the first entry of the trace */
2642 trace_seq_printf(s, "##### CPU %u buffer started ####\n",
2646 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
2648 struct trace_seq *s = &iter->seq;
2649 unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK);
2650 struct trace_entry *entry;
2651 struct trace_event *event;
2655 test_cpu_buff_start(iter);
2657 event = ftrace_find_event(entry->type);
2659 if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
2660 if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
2661 if (!trace_print_lat_context(iter))
2664 if (!trace_print_context(iter))
2670 return event->funcs->trace(iter, sym_flags, event);
2672 if (!trace_seq_printf(s, "Unknown type %d\n", entry->type))
2675 return TRACE_TYPE_HANDLED;
2677 return TRACE_TYPE_PARTIAL_LINE;
2680 static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
2682 struct trace_seq *s = &iter->seq;
2683 struct trace_entry *entry;
2684 struct trace_event *event;
2688 if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
2689 if (!trace_seq_printf(s, "%d %d %llu ",
2690 entry->pid, iter->cpu, iter->ts))
2694 event = ftrace_find_event(entry->type);
2696 return event->funcs->raw(iter, 0, event);
2698 if (!trace_seq_printf(s, "%d ?\n", entry->type))
2701 return TRACE_TYPE_HANDLED;
2703 return TRACE_TYPE_PARTIAL_LINE;
2706 static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
2708 struct trace_seq *s = &iter->seq;
2709 unsigned char newline = '\n';
2710 struct trace_entry *entry;
2711 struct trace_event *event;
2715 if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
2716 SEQ_PUT_HEX_FIELD_RET(s, entry->pid);
2717 SEQ_PUT_HEX_FIELD_RET(s, iter->cpu);
2718 SEQ_PUT_HEX_FIELD_RET(s, iter->ts);
2721 event = ftrace_find_event(entry->type);
2723 enum print_line_t ret = event->funcs->hex(iter, 0, event);
2724 if (ret != TRACE_TYPE_HANDLED)
2728 SEQ_PUT_FIELD_RET(s, newline);
2730 return TRACE_TYPE_HANDLED;
2733 static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
2735 struct trace_seq *s = &iter->seq;
2736 struct trace_entry *entry;
2737 struct trace_event *event;
2741 if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
2742 SEQ_PUT_FIELD_RET(s, entry->pid);
2743 SEQ_PUT_FIELD_RET(s, iter->cpu);
2744 SEQ_PUT_FIELD_RET(s, iter->ts);
2747 event = ftrace_find_event(entry->type);
2748 return event ? event->funcs->binary(iter, 0, event) :
2752 int trace_empty(struct trace_iterator *iter)
2754 struct ring_buffer_iter *buf_iter;
2757 /* If we are looking at one CPU buffer, only check that one */
2758 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
2759 cpu = iter->cpu_file;
2760 buf_iter = trace_buffer_iter(iter, cpu);
2762 if (!ring_buffer_iter_empty(buf_iter))
2765 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2771 for_each_tracing_cpu(cpu) {
2772 buf_iter = trace_buffer_iter(iter, cpu);
2774 if (!ring_buffer_iter_empty(buf_iter))
2777 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
2785 /* Called with trace_event_read_lock() held. */
2786 enum print_line_t print_trace_line(struct trace_iterator *iter)
2788 enum print_line_t ret;
2790 if (iter->lost_events &&
2791 !trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
2792 iter->cpu, iter->lost_events))
2793 return TRACE_TYPE_PARTIAL_LINE;
2795 if (iter->trace && iter->trace->print_line) {
2796 ret = iter->trace->print_line(iter);
2797 if (ret != TRACE_TYPE_UNHANDLED)
2801 if (iter->ent->type == TRACE_BPUTS &&
2802 trace_flags & TRACE_ITER_PRINTK &&
2803 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2804 return trace_print_bputs_msg_only(iter);
2806 if (iter->ent->type == TRACE_BPRINT &&
2807 trace_flags & TRACE_ITER_PRINTK &&
2808 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2809 return trace_print_bprintk_msg_only(iter);
2811 if (iter->ent->type == TRACE_PRINT &&
2812 trace_flags & TRACE_ITER_PRINTK &&
2813 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
2814 return trace_print_printk_msg_only(iter);
2816 if (trace_flags & TRACE_ITER_BIN)
2817 return print_bin_fmt(iter);
2819 if (trace_flags & TRACE_ITER_HEX)
2820 return print_hex_fmt(iter);
2822 if (trace_flags & TRACE_ITER_RAW)
2823 return print_raw_fmt(iter);
2825 return print_trace_fmt(iter);
2828 void trace_latency_header(struct seq_file *m)
2830 struct trace_iterator *iter = m->private;
2832 /* print nothing if the buffers are empty */
2833 if (trace_empty(iter))
2836 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
2837 print_trace_header(m, iter);
2839 if (!(trace_flags & TRACE_ITER_VERBOSE))
2840 print_lat_help_header(m);
2843 void trace_default_header(struct seq_file *m)
2845 struct trace_iterator *iter = m->private;
2847 if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
2850 if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
2851 /* print nothing if the buffers are empty */
2852 if (trace_empty(iter))
2854 print_trace_header(m, iter);
2855 if (!(trace_flags & TRACE_ITER_VERBOSE))
2856 print_lat_help_header(m);
2858 if (!(trace_flags & TRACE_ITER_VERBOSE)) {
2859 if (trace_flags & TRACE_ITER_IRQ_INFO)
2860 print_func_help_header_irq(iter->trace_buffer, m);
2862 print_func_help_header(iter->trace_buffer, m);
2867 static void test_ftrace_alive(struct seq_file *m)
2869 if (!ftrace_is_dead())
2871 seq_printf(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n");
2872 seq_printf(m, "# MAY BE MISSING FUNCTION EVENTS\n");
2875 #ifdef CONFIG_TRACER_MAX_TRACE
2876 static void show_snapshot_main_help(struct seq_file *m)
2878 seq_printf(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n");
2879 seq_printf(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n");
2880 seq_printf(m, "# Takes a snapshot of the main buffer.\n");
2881 seq_printf(m, "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n");
2882 seq_printf(m, "# (Doesn't have to be '2' works with any number that\n");
2883 seq_printf(m, "# is not a '0' or '1')\n");
2886 static void show_snapshot_percpu_help(struct seq_file *m)
2888 seq_printf(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n");
2889 #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
2890 seq_printf(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n");
2891 seq_printf(m, "# Takes a snapshot of the main buffer for this cpu.\n");
2893 seq_printf(m, "# echo 1 > snapshot : Not supported with this kernel.\n");
2894 seq_printf(m, "# Must use main snapshot file to allocate.\n");
2896 seq_printf(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n");
2897 seq_printf(m, "# (Doesn't have to be '2' works with any number that\n");
2898 seq_printf(m, "# is not a '0' or '1')\n");
2901 static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
2903 if (iter->tr->allocated_snapshot)
2904 seq_printf(m, "#\n# * Snapshot is allocated *\n#\n");
2906 seq_printf(m, "#\n# * Snapshot is freed *\n#\n");
2908 seq_printf(m, "# Snapshot commands:\n");
2909 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
2910 show_snapshot_main_help(m);
2912 show_snapshot_percpu_help(m);
2915 /* Should never be called */
2916 static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
2919 static int s_show(struct seq_file *m, void *v)
2921 struct trace_iterator *iter = v;
2924 if (iter->ent == NULL) {
2926 seq_printf(m, "# tracer: %s\n", iter->trace->name);
2928 test_ftrace_alive(m);
2930 if (iter->snapshot && trace_empty(iter))
2931 print_snapshot_help(m, iter);
2932 else if (iter->trace && iter->trace->print_header)
2933 iter->trace->print_header(m);
2935 trace_default_header(m);
2937 } else if (iter->leftover) {
2939 * If we filled the seq_file buffer earlier, we
2940 * want to just show it now.
2942 ret = trace_print_seq(m, &iter->seq);
2944 /* ret should this time be zero, but you never know */
2945 iter->leftover = ret;
2948 print_trace_line(iter);
2949 ret = trace_print_seq(m, &iter->seq);
2951 * If we overflow the seq_file buffer, then it will
2952 * ask us for this data again at start up.
2954 * ret is 0 if seq_file write succeeded.
2957 iter->leftover = ret;
2964 * Should be used after trace_array_get(), trace_types_lock
2965 * ensures that i_cdev was already initialized.
2967 static inline int tracing_get_cpu(struct inode *inode)
2969 if (inode->i_cdev) /* See trace_create_cpu_file() */
2970 return (long)inode->i_cdev - 1;
2971 return RING_BUFFER_ALL_CPUS;
2974 static const struct seq_operations tracer_seq_ops = {
2981 static struct trace_iterator *
2982 __tracing_open(struct inode *inode, struct file *file, bool snapshot)
2984 struct trace_array *tr = inode->i_private;
2985 struct trace_iterator *iter;
2988 if (tracing_disabled)
2989 return ERR_PTR(-ENODEV);
2991 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
2993 return ERR_PTR(-ENOMEM);
2995 iter->buffer_iter = kzalloc(sizeof(*iter->buffer_iter) * num_possible_cpus(),
2997 if (!iter->buffer_iter)
3001 * We make a copy of the current tracer to avoid concurrent
3002 * changes on it while we are reading.
3004 mutex_lock(&trace_types_lock);
3005 iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL);
3009 *iter->trace = *tr->current_trace;
3011 if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL))
3016 #ifdef CONFIG_TRACER_MAX_TRACE
3017 /* Currently only the top directory has a snapshot */
3018 if (tr->current_trace->print_max || snapshot)
3019 iter->trace_buffer = &tr->max_buffer;
3022 iter->trace_buffer = &tr->trace_buffer;
3023 iter->snapshot = snapshot;
3025 iter->cpu_file = tracing_get_cpu(inode);
3026 mutex_init(&iter->mutex);
3028 /* Notify the tracer early; before we stop tracing. */
3029 if (iter->trace && iter->trace->open)
3030 iter->trace->open(iter);
3032 /* Annotate start of buffers if we had overruns */
3033 if (ring_buffer_overruns(iter->trace_buffer->buffer))
3034 iter->iter_flags |= TRACE_FILE_ANNOTATE;
3036 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
3037 if (trace_clocks[tr->clock_id].in_ns)
3038 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
3040 /* stop the trace while dumping if we are not opening "snapshot" */
3041 if (!iter->snapshot)
3042 tracing_stop_tr(tr);
3044 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
3045 for_each_tracing_cpu(cpu) {
3046 iter->buffer_iter[cpu] =
3047 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3049 ring_buffer_read_prepare_sync();
3050 for_each_tracing_cpu(cpu) {
3051 ring_buffer_read_start(iter->buffer_iter[cpu]);
3052 tracing_iter_reset(iter, cpu);
3055 cpu = iter->cpu_file;
3056 iter->buffer_iter[cpu] =
3057 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
3058 ring_buffer_read_prepare_sync();
3059 ring_buffer_read_start(iter->buffer_iter[cpu]);
3060 tracing_iter_reset(iter, cpu);
3063 mutex_unlock(&trace_types_lock);
3068 mutex_unlock(&trace_types_lock);
3070 kfree(iter->buffer_iter);
3072 seq_release_private(inode, file);
3073 return ERR_PTR(-ENOMEM);
3076 int tracing_open_generic(struct inode *inode, struct file *filp)
3078 if (tracing_disabled)
3081 filp->private_data = inode->i_private;
3085 bool tracing_is_disabled(void)
3087 return (tracing_disabled) ? true: false;
3091 * Open and update trace_array ref count.
3092 * Must have the current trace_array passed to it.
3094 static int tracing_open_generic_tr(struct inode *inode, struct file *filp)
3096 struct trace_array *tr = inode->i_private;
3098 if (tracing_disabled)
3101 if (trace_array_get(tr) < 0)
3104 filp->private_data = inode->i_private;
3109 static int tracing_release(struct inode *inode, struct file *file)
3111 struct trace_array *tr = inode->i_private;
3112 struct seq_file *m = file->private_data;
3113 struct trace_iterator *iter;
3116 if (!(file->f_mode & FMODE_READ)) {
3117 trace_array_put(tr);
3121 /* Writes do not use seq_file */
3123 mutex_lock(&trace_types_lock);
3125 for_each_tracing_cpu(cpu) {
3126 if (iter->buffer_iter[cpu])
3127 ring_buffer_read_finish(iter->buffer_iter[cpu]);
3130 if (iter->trace && iter->trace->close)
3131 iter->trace->close(iter);
3133 if (!iter->snapshot)
3134 /* reenable tracing if it was previously enabled */
3135 tracing_start_tr(tr);
3137 __trace_array_put(tr);
3139 mutex_unlock(&trace_types_lock);
3141 mutex_destroy(&iter->mutex);
3142 free_cpumask_var(iter->started);
3144 kfree(iter->buffer_iter);
3145 seq_release_private(inode, file);
3150 static int tracing_release_generic_tr(struct inode *inode, struct file *file)
3152 struct trace_array *tr = inode->i_private;
3154 trace_array_put(tr);
3158 static int tracing_single_release_tr(struct inode *inode, struct file *file)
3160 struct trace_array *tr = inode->i_private;
3162 trace_array_put(tr);
3164 return single_release(inode, file);
3167 static int tracing_open(struct inode *inode, struct file *file)
3169 struct trace_array *tr = inode->i_private;
3170 struct trace_iterator *iter;
3173 if (trace_array_get(tr) < 0)
3176 /* If this file was open for write, then erase contents */
3177 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
3178 int cpu = tracing_get_cpu(inode);
3180 if (cpu == RING_BUFFER_ALL_CPUS)
3181 tracing_reset_online_cpus(&tr->trace_buffer);
3183 tracing_reset(&tr->trace_buffer, cpu);
3186 if (file->f_mode & FMODE_READ) {
3187 iter = __tracing_open(inode, file, false);
3189 ret = PTR_ERR(iter);
3190 else if (trace_flags & TRACE_ITER_LATENCY_FMT)
3191 iter->iter_flags |= TRACE_FILE_LAT_FMT;
3195 trace_array_put(tr);
3201 * Some tracers are not suitable for instance buffers.
3202 * A tracer is always available for the global array (toplevel)
3203 * or if it explicitly states that it is.
3206 trace_ok_for_array(struct tracer *t, struct trace_array *tr)
3208 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances;
3211 /* Find the next tracer that this trace array may use */
3212 static struct tracer *
3213 get_tracer_for_array(struct trace_array *tr, struct tracer *t)
3215 while (t && !trace_ok_for_array(t, tr))
3222 t_next(struct seq_file *m, void *v, loff_t *pos)
3224 struct trace_array *tr = m->private;
3225 struct tracer *t = v;
3230 t = get_tracer_for_array(tr, t->next);
3235 static void *t_start(struct seq_file *m, loff_t *pos)
3237 struct trace_array *tr = m->private;
3241 mutex_lock(&trace_types_lock);
3243 t = get_tracer_for_array(tr, trace_types);
3244 for (; t && l < *pos; t = t_next(m, t, &l))
3250 static void t_stop(struct seq_file *m, void *p)
3252 mutex_unlock(&trace_types_lock);
3255 static int t_show(struct seq_file *m, void *v)
3257 struct tracer *t = v;
3262 seq_printf(m, "%s", t->name);
3271 static const struct seq_operations show_traces_seq_ops = {
3278 static int show_traces_open(struct inode *inode, struct file *file)
3280 struct trace_array *tr = inode->i_private;
3284 if (tracing_disabled)
3287 ret = seq_open(file, &show_traces_seq_ops);
3291 m = file->private_data;
3298 tracing_write_stub(struct file *filp, const char __user *ubuf,
3299 size_t count, loff_t *ppos)
3304 loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
3308 if (file->f_mode & FMODE_READ)
3309 ret = seq_lseek(file, offset, whence);
3311 file->f_pos = ret = 0;
3316 static const struct file_operations tracing_fops = {
3317 .open = tracing_open,
3319 .write = tracing_write_stub,
3320 .llseek = tracing_lseek,
3321 .release = tracing_release,
3324 static const struct file_operations show_traces_fops = {
3325 .open = show_traces_open,
3327 .release = seq_release,
3328 .llseek = seq_lseek,
3332 * The tracer itself will not take this lock, but still we want
3333 * to provide a consistent cpumask to user-space:
3335 static DEFINE_MUTEX(tracing_cpumask_update_lock);
3338 * Temporary storage for the character representation of the
3339 * CPU bitmask (and one more byte for the newline):
3341 static char mask_str[NR_CPUS + 1];
3344 tracing_cpumask_read(struct file *filp, char __user *ubuf,
3345 size_t count, loff_t *ppos)
3347 struct trace_array *tr = file_inode(filp)->i_private;
3350 mutex_lock(&tracing_cpumask_update_lock);
3352 len = cpumask_scnprintf(mask_str, count, tr->tracing_cpumask);
3353 if (count - len < 2) {
3357 len += sprintf(mask_str + len, "\n");
3358 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1);
3361 mutex_unlock(&tracing_cpumask_update_lock);
3367 tracing_cpumask_write(struct file *filp, const char __user *ubuf,
3368 size_t count, loff_t *ppos)
3370 struct trace_array *tr = file_inode(filp)->i_private;
3371 cpumask_var_t tracing_cpumask_new;
3374 if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL))
3377 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new);
3381 mutex_lock(&tracing_cpumask_update_lock);
3383 local_irq_disable();
3384 arch_spin_lock(&tr->max_lock);
3385 for_each_tracing_cpu(cpu) {
3387 * Increase/decrease the disabled counter if we are
3388 * about to flip a bit in the cpumask:
3390 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3391 !cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3392 atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3393 ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu);
3395 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
3396 cpumask_test_cpu(cpu, tracing_cpumask_new)) {
3397 atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
3398 ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu);
3401 arch_spin_unlock(&tr->max_lock);
3404 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
3406 mutex_unlock(&tracing_cpumask_update_lock);
3407 free_cpumask_var(tracing_cpumask_new);
3412 free_cpumask_var(tracing_cpumask_new);
3417 static const struct file_operations tracing_cpumask_fops = {
3418 .open = tracing_open_generic_tr,
3419 .read = tracing_cpumask_read,
3420 .write = tracing_cpumask_write,
3421 .release = tracing_release_generic_tr,
3422 .llseek = generic_file_llseek,
3425 static int tracing_trace_options_show(struct seq_file *m, void *v)
3427 struct tracer_opt *trace_opts;
3428 struct trace_array *tr = m->private;
3432 mutex_lock(&trace_types_lock);
3433 tracer_flags = tr->current_trace->flags->val;
3434 trace_opts = tr->current_trace->flags->opts;
3436 for (i = 0; trace_options[i]; i++) {
3437 if (trace_flags & (1 << i))
3438 seq_printf(m, "%s\n", trace_options[i]);
3440 seq_printf(m, "no%s\n", trace_options[i]);
3443 for (i = 0; trace_opts[i].name; i++) {
3444 if (tracer_flags & trace_opts[i].bit)
3445 seq_printf(m, "%s\n", trace_opts[i].name);
3447 seq_printf(m, "no%s\n", trace_opts[i].name);
3449 mutex_unlock(&trace_types_lock);
3454 static int __set_tracer_option(struct trace_array *tr,
3455 struct tracer_flags *tracer_flags,
3456 struct tracer_opt *opts, int neg)
3458 struct tracer *trace = tr->current_trace;
3461 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg);
3466 tracer_flags->val &= ~opts->bit;
3468 tracer_flags->val |= opts->bit;
3472 /* Try to assign a tracer specific option */
3473 static int set_tracer_option(struct trace_array *tr, char *cmp, int neg)
3475 struct tracer *trace = tr->current_trace;
3476 struct tracer_flags *tracer_flags = trace->flags;
3477 struct tracer_opt *opts = NULL;
3480 for (i = 0; tracer_flags->opts[i].name; i++) {
3481 opts = &tracer_flags->opts[i];
3483 if (strcmp(cmp, opts->name) == 0)
3484 return __set_tracer_option(tr, trace->flags, opts, neg);
3490 /* Some tracers require overwrite to stay enabled */
3491 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
3493 if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set)
3499 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled)
3501 /* do nothing if flag is already set */
3502 if (!!(trace_flags & mask) == !!enabled)
3505 /* Give the tracer a chance to approve the change */
3506 if (tr->current_trace->flag_changed)
3507 if (tr->current_trace->flag_changed(tr, mask, !!enabled))
3511 trace_flags |= mask;
3513 trace_flags &= ~mask;
3515 if (mask == TRACE_ITER_RECORD_CMD)
3516 trace_event_enable_cmd_record(enabled);
3518 if (mask == TRACE_ITER_OVERWRITE) {
3519 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled);
3520 #ifdef CONFIG_TRACER_MAX_TRACE
3521 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled);
3525 if (mask == TRACE_ITER_PRINTK)
3526 trace_printk_start_stop_comm(enabled);
3531 static int trace_set_options(struct trace_array *tr, char *option)
3538 cmp = strstrip(option);
3540 if (strncmp(cmp, "no", 2) == 0) {
3545 mutex_lock(&trace_types_lock);
3547 for (i = 0; trace_options[i]; i++) {
3548 if (strcmp(cmp, trace_options[i]) == 0) {
3549 ret = set_tracer_flag(tr, 1 << i, !neg);
3554 /* If no option could be set, test the specific tracer options */
3555 if (!trace_options[i])
3556 ret = set_tracer_option(tr, cmp, neg);
3558 mutex_unlock(&trace_types_lock);
3564 tracing_trace_options_write(struct file *filp, const char __user *ubuf,
3565 size_t cnt, loff_t *ppos)
3567 struct seq_file *m = filp->private_data;
3568 struct trace_array *tr = m->private;
3572 if (cnt >= sizeof(buf))
3575 if (copy_from_user(&buf, ubuf, cnt))
3580 ret = trace_set_options(tr, buf);
3589 static int tracing_trace_options_open(struct inode *inode, struct file *file)
3591 struct trace_array *tr = inode->i_private;
3594 if (tracing_disabled)
3597 if (trace_array_get(tr) < 0)
3600 ret = single_open(file, tracing_trace_options_show, inode->i_private);
3602 trace_array_put(tr);
3607 static const struct file_operations tracing_iter_fops = {
3608 .open = tracing_trace_options_open,
3610 .llseek = seq_lseek,
3611 .release = tracing_single_release_tr,
3612 .write = tracing_trace_options_write,
3615 static const char readme_msg[] =
3616 "tracing mini-HOWTO:\n\n"
3617 "# echo 0 > tracing_on : quick way to disable tracing\n"
3618 "# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
3619 " Important files:\n"
3620 " trace\t\t\t- The static contents of the buffer\n"
3621 "\t\t\t To clear the buffer write into this file: echo > trace\n"
3622 " trace_pipe\t\t- A consuming read to see the contents of the buffer\n"
3623 " current_tracer\t- function and latency tracers\n"
3624 " available_tracers\t- list of configured tracers for current_tracer\n"
3625 " buffer_size_kb\t- view and modify size of per cpu buffer\n"
3626 " buffer_total_size_kb - view total size of all cpu buffers\n\n"
3627 " trace_clock\t\t-change the clock used to order events\n"
3628 " local: Per cpu clock but may not be synced across CPUs\n"
3629 " global: Synced across CPUs but slows tracing down.\n"
3630 " counter: Not a clock, but just an increment\n"
3631 " uptime: Jiffy counter from time of boot\n"
3632 " perf: Same clock that perf events use\n"
3633 #ifdef CONFIG_X86_64
3634 " x86-tsc: TSC cycle counter\n"
3636 "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
3637 " tracing_cpumask\t- Limit which CPUs to trace\n"
3638 " instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
3639 "\t\t\t Remove sub-buffer with rmdir\n"
3640 " trace_options\t\t- Set format or modify how tracing happens\n"
3641 "\t\t\t Disable an option by adding a suffix 'no' to the\n"
3642 "\t\t\t option name\n"
3643 " saved_cmdlines_size\t- echo command number in here to store comm-pid list\n"
3644 #ifdef CONFIG_DYNAMIC_FTRACE
3645 "\n available_filter_functions - list of functions that can be filtered on\n"
3646 " set_ftrace_filter\t- echo function name in here to only trace these\n"
3647 "\t\t\t functions\n"
3648 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3649 "\t modules: Can select a group via module\n"
3650 "\t Format: :mod:<module-name>\n"
3651 "\t example: echo :mod:ext3 > set_ftrace_filter\n"
3652 "\t triggers: a command to perform when function is hit\n"
3653 "\t Format: <function>:<trigger>[:count]\n"
3654 "\t trigger: traceon, traceoff\n"
3655 "\t\t enable_event:<system>:<event>\n"
3656 "\t\t disable_event:<system>:<event>\n"
3657 #ifdef CONFIG_STACKTRACE
3660 #ifdef CONFIG_TRACER_SNAPSHOT
3665 "\t example: echo do_fault:traceoff > set_ftrace_filter\n"
3666 "\t echo do_trap:traceoff:3 > set_ftrace_filter\n"
3667 "\t The first one will disable tracing every time do_fault is hit\n"
3668 "\t The second will disable tracing at most 3 times when do_trap is hit\n"
3669 "\t The first time do trap is hit and it disables tracing, the\n"
3670 "\t counter will decrement to 2. If tracing is already disabled,\n"
3671 "\t the counter will not decrement. It only decrements when the\n"
3672 "\t trigger did work\n"
3673 "\t To remove trigger without count:\n"
3674 "\t echo '!<function>:<trigger> > set_ftrace_filter\n"
3675 "\t To remove trigger with a count:\n"
3676 "\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
3677 " set_ftrace_notrace\t- echo function name in here to never trace.\n"
3678 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
3679 "\t modules: Can select a group via module command :mod:\n"
3680 "\t Does not accept triggers\n"
3681 #endif /* CONFIG_DYNAMIC_FTRACE */
3682 #ifdef CONFIG_FUNCTION_TRACER
3683 " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
3686 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
3687 " set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
3688 " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
3690 #ifdef CONFIG_TRACER_SNAPSHOT
3691 "\n snapshot\t\t- Like 'trace' but shows the content of the static\n"
3692 "\t\t\t snapshot buffer. Read the contents for more\n"
3693 "\t\t\t information\n"
3695 #ifdef CONFIG_STACK_TRACER
3696 " stack_trace\t\t- Shows the max stack trace when active\n"
3697 " stack_max_size\t- Shows current max stack size that was traced\n"
3698 "\t\t\t Write into this file to reset the max size (trigger a\n"
3699 "\t\t\t new trace)\n"
3700 #ifdef CONFIG_DYNAMIC_FTRACE
3701 " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
3704 #endif /* CONFIG_STACK_TRACER */
3705 " events/\t\t- Directory containing all trace event subsystems:\n"
3706 " enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
3707 " events/<system>/\t- Directory containing all trace events for <system>:\n"
3708 " enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
3710 " filter\t\t- If set, only events passing filter are traced\n"
3711 " events/<system>/<event>/\t- Directory containing control files for\n"
3713 " enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
3714 " filter\t\t- If set, only events passing filter are traced\n"
3715 " trigger\t\t- If set, a command to perform when event is hit\n"
3716 "\t Format: <trigger>[:count][if <filter>]\n"
3717 "\t trigger: traceon, traceoff\n"
3718 "\t enable_event:<system>:<event>\n"
3719 "\t disable_event:<system>:<event>\n"
3720 #ifdef CONFIG_STACKTRACE
3723 #ifdef CONFIG_TRACER_SNAPSHOT
3726 "\t example: echo traceoff > events/block/block_unplug/trigger\n"
3727 "\t echo traceoff:3 > events/block/block_unplug/trigger\n"
3728 "\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
3729 "\t events/block/block_unplug/trigger\n"
3730 "\t The first disables tracing every time block_unplug is hit.\n"
3731 "\t The second disables tracing the first 3 times block_unplug is hit.\n"
3732 "\t The third enables the kmalloc event the first 3 times block_unplug\n"
3733 "\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
3734 "\t Like function triggers, the counter is only decremented if it\n"
3735 "\t enabled or disabled tracing.\n"
3736 "\t To remove a trigger without a count:\n"
3737 "\t echo '!<trigger> > <system>/<event>/trigger\n"
3738 "\t To remove a trigger with a count:\n"
3739 "\t echo '!<trigger>:0 > <system>/<event>/trigger\n"
3740 "\t Filters can be ignored when removing a trigger.\n"
3744 tracing_readme_read(struct file *filp, char __user *ubuf,
3745 size_t cnt, loff_t *ppos)
3747 return simple_read_from_buffer(ubuf, cnt, ppos,
3748 readme_msg, strlen(readme_msg));
3751 static const struct file_operations tracing_readme_fops = {
3752 .open = tracing_open_generic,
3753 .read = tracing_readme_read,
3754 .llseek = generic_file_llseek,
3757 static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos)
3759 unsigned int *ptr = v;
3761 if (*pos || m->count)
3766 for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num];
3768 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP)
3777 static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos)
3783 arch_spin_lock(&trace_cmdline_lock);
3785 v = &savedcmd->map_cmdline_to_pid[0];
3787 v = saved_cmdlines_next(m, v, &l);
3795 static void saved_cmdlines_stop(struct seq_file *m, void *v)
3797 arch_spin_unlock(&trace_cmdline_lock);
3801 static int saved_cmdlines_show(struct seq_file *m, void *v)
3803 char buf[TASK_COMM_LEN];
3804 unsigned int *pid = v;
3806 __trace_find_cmdline(*pid, buf);
3807 seq_printf(m, "%d %s\n", *pid, buf);
3811 static const struct seq_operations tracing_saved_cmdlines_seq_ops = {
3812 .start = saved_cmdlines_start,
3813 .next = saved_cmdlines_next,
3814 .stop = saved_cmdlines_stop,
3815 .show = saved_cmdlines_show,
3818 static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
3820 if (tracing_disabled)
3823 return seq_open(filp, &tracing_saved_cmdlines_seq_ops);
3826 static const struct file_operations tracing_saved_cmdlines_fops = {
3827 .open = tracing_saved_cmdlines_open,
3829 .llseek = seq_lseek,
3830 .release = seq_release,
3834 tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
3835 size_t cnt, loff_t *ppos)
3840 arch_spin_lock(&trace_cmdline_lock);
3841 r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num);
3842 arch_spin_unlock(&trace_cmdline_lock);
3844 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
3847 static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s)
3849 kfree(s->saved_cmdlines);
3850 kfree(s->map_cmdline_to_pid);
3854 static int tracing_resize_saved_cmdlines(unsigned int val)
3856 struct saved_cmdlines_buffer *s, *savedcmd_temp;
3858 s = kmalloc(sizeof(*s), GFP_KERNEL);
3862 if (allocate_cmdlines_buffer(val, s) < 0) {
3867 arch_spin_lock(&trace_cmdline_lock);
3868 savedcmd_temp = savedcmd;
3870 arch_spin_unlock(&trace_cmdline_lock);
3871 free_saved_cmdlines_buffer(savedcmd_temp);
3877 tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
3878 size_t cnt, loff_t *ppos)
3883 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
3887 /* must have at least 1 entry or less than PID_MAX_DEFAULT */
3888 if (!val || val > PID_MAX_DEFAULT)
3891 ret = tracing_resize_saved_cmdlines((unsigned int)val);
3900 static const struct file_operations tracing_saved_cmdlines_size_fops = {
3901 .open = tracing_open_generic,
3902 .read = tracing_saved_cmdlines_size_read,
3903 .write = tracing_saved_cmdlines_size_write,
3907 tracing_set_trace_read(struct file *filp, char __user *ubuf,
3908 size_t cnt, loff_t *ppos)
3910 struct trace_array *tr = filp->private_data;
3911 char buf[MAX_TRACER_SIZE+2];
3914 mutex_lock(&trace_types_lock);
3915 r = sprintf(buf, "%s\n", tr->current_trace->name);
3916 mutex_unlock(&trace_types_lock);
3918 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
3921 int tracer_init(struct tracer *t, struct trace_array *tr)
3923 tracing_reset_online_cpus(&tr->trace_buffer);
3927 static void set_buffer_entries(struct trace_buffer *buf, unsigned long val)
3931 for_each_tracing_cpu(cpu)
3932 per_cpu_ptr(buf->data, cpu)->entries = val;
3935 #ifdef CONFIG_TRACER_MAX_TRACE
3936 /* resize @tr's buffer to the size of @size_tr's entries */
3937 static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
3938 struct trace_buffer *size_buf, int cpu_id)
3942 if (cpu_id == RING_BUFFER_ALL_CPUS) {
3943 for_each_tracing_cpu(cpu) {
3944 ret = ring_buffer_resize(trace_buf->buffer,
3945 per_cpu_ptr(size_buf->data, cpu)->entries, cpu);
3948 per_cpu_ptr(trace_buf->data, cpu)->entries =
3949 per_cpu_ptr(size_buf->data, cpu)->entries;
3952 ret = ring_buffer_resize(trace_buf->buffer,
3953 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id);
3955 per_cpu_ptr(trace_buf->data, cpu_id)->entries =
3956 per_cpu_ptr(size_buf->data, cpu_id)->entries;
3961 #endif /* CONFIG_TRACER_MAX_TRACE */
3963 static int __tracing_resize_ring_buffer(struct trace_array *tr,
3964 unsigned long size, int cpu)
3969 * If kernel or user changes the size of the ring buffer
3970 * we use the size that was given, and we can forget about
3971 * expanding it later.
3973 ring_buffer_expanded = true;
3975 /* May be called before buffers are initialized */
3976 if (!tr->trace_buffer.buffer)
3979 ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu);
3983 #ifdef CONFIG_TRACER_MAX_TRACE
3984 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) ||
3985 !tr->current_trace->use_max_tr)
3988 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu);
3990 int r = resize_buffer_duplicate_size(&tr->trace_buffer,
3991 &tr->trace_buffer, cpu);
3994 * AARGH! We are left with different
3995 * size max buffer!!!!
3996 * The max buffer is our "snapshot" buffer.
3997 * When a tracer needs a snapshot (one of the
3998 * latency tracers), it swaps the max buffer
3999 * with the saved snap shot. We succeeded to
4000 * update the size of the main buffer, but failed to
4001 * update the size of the max buffer. But when we tried
4002 * to reset the main buffer to the original size, we
4003 * failed there too. This is very unlikely to
4004 * happen, but if it does, warn and kill all
4008 tracing_disabled = 1;
4013 if (cpu == RING_BUFFER_ALL_CPUS)
4014 set_buffer_entries(&tr->max_buffer, size);
4016 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size;
4019 #endif /* CONFIG_TRACER_MAX_TRACE */
4021 if (cpu == RING_BUFFER_ALL_CPUS)
4022 set_buffer_entries(&tr->trace_buffer, size);
4024 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size;
4029 static ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
4030 unsigned long size, int cpu_id)
4034 mutex_lock(&trace_types_lock);
4036 if (cpu_id != RING_BUFFER_ALL_CPUS) {
4037 /* make sure, this cpu is enabled in the mask */
4038 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) {
4044 ret = __tracing_resize_ring_buffer(tr, size, cpu_id);
4049 mutex_unlock(&trace_types_lock);
4056 * tracing_update_buffers - used by tracing facility to expand ring buffers
4058 * To save on memory when the tracing is never used on a system with it
4059 * configured in. The ring buffers are set to a minimum size. But once
4060 * a user starts to use the tracing facility, then they need to grow
4061 * to their default size.
4063 * This function is to be called when a tracer is about to be used.
4065 int tracing_update_buffers(void)
4069 mutex_lock(&trace_types_lock);
4070 if (!ring_buffer_expanded)
4071 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size,
4072 RING_BUFFER_ALL_CPUS);
4073 mutex_unlock(&trace_types_lock);
4078 struct trace_option_dentry;
4080 static struct trace_option_dentry *
4081 create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
4084 destroy_trace_option_files(struct trace_option_dentry *topts);
4087 * Used to clear out the tracer before deletion of an instance.
4088 * Must have trace_types_lock held.
4090 static void tracing_set_nop(struct trace_array *tr)
4092 if (tr->current_trace == &nop_trace)
4095 tr->current_trace->enabled--;
4097 if (tr->current_trace->reset)
4098 tr->current_trace->reset(tr);
4100 tr->current_trace = &nop_trace;
4103 static int tracing_set_tracer(struct trace_array *tr, const char *buf)
4105 static struct trace_option_dentry *topts;
4107 #ifdef CONFIG_TRACER_MAX_TRACE
4112 mutex_lock(&trace_types_lock);
4114 if (!ring_buffer_expanded) {
4115 ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
4116 RING_BUFFER_ALL_CPUS);
4122 for (t = trace_types; t; t = t->next) {
4123 if (strcmp(t->name, buf) == 0)
4130 if (t == tr->current_trace)
4133 /* Some tracers are only allowed for the top level buffer */
4134 if (!trace_ok_for_array(t, tr)) {
4139 trace_branch_disable();
4141 tr->current_trace->enabled--;
4143 if (tr->current_trace->reset)
4144 tr->current_trace->reset(tr);
4146 /* Current trace needs to be nop_trace before synchronize_sched */
4147 tr->current_trace = &nop_trace;
4149 #ifdef CONFIG_TRACER_MAX_TRACE
4150 had_max_tr = tr->allocated_snapshot;
4152 if (had_max_tr && !t->use_max_tr) {
4154 * We need to make sure that the update_max_tr sees that
4155 * current_trace changed to nop_trace to keep it from
4156 * swapping the buffers after we resize it.
4157 * The update_max_tr is called from interrupts disabled
4158 * so a synchronized_sched() is sufficient.
4160 synchronize_sched();
4164 /* Currently, only the top instance has options */
4165 if (tr->flags & TRACE_ARRAY_FL_GLOBAL) {
4166 destroy_trace_option_files(topts);
4167 topts = create_trace_option_files(tr, t);
4170 #ifdef CONFIG_TRACER_MAX_TRACE
4171 if (t->use_max_tr && !had_max_tr) {
4172 ret = alloc_snapshot(tr);
4179 ret = tracer_init(t, tr);
4184 tr->current_trace = t;
4185 tr->current_trace->enabled++;
4186 trace_branch_enable(tr);
4188 mutex_unlock(&trace_types_lock);
4194 tracing_set_trace_write(struct file *filp, const char __user *ubuf,
4195 size_t cnt, loff_t *ppos)
4197 struct trace_array *tr = filp->private_data;
4198 char buf[MAX_TRACER_SIZE+1];
4205 if (cnt > MAX_TRACER_SIZE)
4206 cnt = MAX_TRACER_SIZE;
4208 if (copy_from_user(&buf, ubuf, cnt))
4213 /* strip ending whitespace. */
4214 for (i = cnt - 1; i > 0 && isspace(buf[i]); i--)
4217 err = tracing_set_tracer(tr, buf);
4227 tracing_max_lat_read(struct file *filp, char __user *ubuf,
4228 size_t cnt, loff_t *ppos)
4230 unsigned long *ptr = filp->private_data;
4234 r = snprintf(buf, sizeof(buf), "%ld\n",
4235 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
4236 if (r > sizeof(buf))
4238 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4242 tracing_max_lat_write(struct file *filp, const char __user *ubuf,
4243 size_t cnt, loff_t *ppos)
4245 unsigned long *ptr = filp->private_data;
4249 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4258 static int tracing_open_pipe(struct inode *inode, struct file *filp)
4260 struct trace_array *tr = inode->i_private;
4261 struct trace_iterator *iter;
4264 if (tracing_disabled)
4267 if (trace_array_get(tr) < 0)
4270 mutex_lock(&trace_types_lock);
4272 /* create a buffer to store the information to pass to userspace */
4273 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
4276 __trace_array_put(tr);
4281 * We make a copy of the current tracer to avoid concurrent
4282 * changes on it while we are reading.
4284 iter->trace = kmalloc(sizeof(*iter->trace), GFP_KERNEL);
4289 *iter->trace = *tr->current_trace;
4291 if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) {
4296 /* trace pipe does not show start of buffer */
4297 cpumask_setall(iter->started);
4299 if (trace_flags & TRACE_ITER_LATENCY_FMT)
4300 iter->iter_flags |= TRACE_FILE_LAT_FMT;
4302 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
4303 if (trace_clocks[tr->clock_id].in_ns)
4304 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
4307 iter->trace_buffer = &tr->trace_buffer;
4308 iter->cpu_file = tracing_get_cpu(inode);
4309 mutex_init(&iter->mutex);
4310 filp->private_data = iter;
4312 if (iter->trace->pipe_open)
4313 iter->trace->pipe_open(iter);
4315 nonseekable_open(inode, filp);
4317 mutex_unlock(&trace_types_lock);
4323 __trace_array_put(tr);
4324 mutex_unlock(&trace_types_lock);
4328 static int tracing_release_pipe(struct inode *inode, struct file *file)
4330 struct trace_iterator *iter = file->private_data;
4331 struct trace_array *tr = inode->i_private;
4333 mutex_lock(&trace_types_lock);
4335 if (iter->trace->pipe_close)
4336 iter->trace->pipe_close(iter);
4338 mutex_unlock(&trace_types_lock);
4340 free_cpumask_var(iter->started);
4341 mutex_destroy(&iter->mutex);
4345 trace_array_put(tr);
4351 trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table)
4353 /* Iterators are static, they should be filled or empty */
4354 if (trace_buffer_iter(iter, iter->cpu_file))
4355 return POLLIN | POLLRDNORM;
4357 if (trace_flags & TRACE_ITER_BLOCK)
4359 * Always select as readable when in blocking mode
4361 return POLLIN | POLLRDNORM;
4363 return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file,
4368 tracing_poll_pipe(struct file *filp, poll_table *poll_table)
4370 struct trace_iterator *iter = filp->private_data;
4372 return trace_poll(iter, filp, poll_table);
4375 /* Must be called with trace_types_lock mutex held. */
4376 static int tracing_wait_pipe(struct file *filp)
4378 struct trace_iterator *iter = filp->private_data;
4381 while (trace_empty(iter)) {
4383 if ((filp->f_flags & O_NONBLOCK)) {
4388 * We block until we read something and tracing is disabled.
4389 * We still block if tracing is disabled, but we have never
4390 * read anything. This allows a user to cat this file, and
4391 * then enable tracing. But after we have read something,
4392 * we give an EOF when tracing is again disabled.
4394 * iter->pos will be 0 if we haven't read anything.
4396 if (!tracing_is_on() && iter->pos)
4399 mutex_unlock(&iter->mutex);
4401 ret = wait_on_pipe(iter);
4403 mutex_lock(&iter->mutex);
4408 if (signal_pending(current))
4419 tracing_read_pipe(struct file *filp, char __user *ubuf,
4420 size_t cnt, loff_t *ppos)
4422 struct trace_iterator *iter = filp->private_data;
4423 struct trace_array *tr = iter->tr;
4426 /* return any leftover data */
4427 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4431 trace_seq_init(&iter->seq);
4433 /* copy the tracer to avoid using a global lock all around */
4434 mutex_lock(&trace_types_lock);
4435 if (unlikely(iter->trace->name != tr->current_trace->name))
4436 *iter->trace = *tr->current_trace;
4437 mutex_unlock(&trace_types_lock);
4440 * Avoid more than one consumer on a single file descriptor
4441 * This is just a matter of traces coherency, the ring buffer itself
4444 mutex_lock(&iter->mutex);
4445 if (iter->trace->read) {
4446 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
4452 sret = tracing_wait_pipe(filp);
4456 /* stop when tracing is finished */
4457 if (trace_empty(iter)) {
4462 if (cnt >= PAGE_SIZE)
4463 cnt = PAGE_SIZE - 1;
4465 /* reset all but tr, trace, and overruns */
4466 memset(&iter->seq, 0,
4467 sizeof(struct trace_iterator) -
4468 offsetof(struct trace_iterator, seq));
4469 cpumask_clear(iter->started);
4472 trace_event_read_lock();
4473 trace_access_lock(iter->cpu_file);
4474 while (trace_find_next_entry_inc(iter) != NULL) {
4475 enum print_line_t ret;
4476 int len = iter->seq.len;
4478 ret = print_trace_line(iter);
4479 if (ret == TRACE_TYPE_PARTIAL_LINE) {
4480 /* don't print partial lines */
4481 iter->seq.len = len;
4484 if (ret != TRACE_TYPE_NO_CONSUME)
4485 trace_consume(iter);
4487 if (iter->seq.len >= cnt)
4491 * Setting the full flag means we reached the trace_seq buffer
4492 * size and we should leave by partial output condition above.
4493 * One of the trace_seq_* functions is not used properly.
4495 WARN_ONCE(iter->seq.full, "full flag set for trace type %d",
4498 trace_access_unlock(iter->cpu_file);
4499 trace_event_read_unlock();
4501 /* Now copy what we have to the user */
4502 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
4503 if (iter->seq.readpos >= iter->seq.len)
4504 trace_seq_init(&iter->seq);
4507 * If there was nothing to send to user, in spite of consuming trace
4508 * entries, go back to wait for more entries.
4514 mutex_unlock(&iter->mutex);
4519 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
4522 __free_page(spd->pages[idx]);
4525 static const struct pipe_buf_operations tracing_pipe_buf_ops = {
4527 .confirm = generic_pipe_buf_confirm,
4528 .release = generic_pipe_buf_release,
4529 .steal = generic_pipe_buf_steal,
4530 .get = generic_pipe_buf_get,
4534 tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
4539 /* Seq buffer is page-sized, exactly what we need. */
4541 count = iter->seq.len;
4542 ret = print_trace_line(iter);
4543 count = iter->seq.len - count;
4546 iter->seq.len -= count;
4549 if (ret == TRACE_TYPE_PARTIAL_LINE) {
4550 iter->seq.len -= count;
4554 if (ret != TRACE_TYPE_NO_CONSUME)
4555 trace_consume(iter);
4557 if (!trace_find_next_entry_inc(iter)) {
4567 static ssize_t tracing_splice_read_pipe(struct file *filp,
4569 struct pipe_inode_info *pipe,
4573 struct page *pages_def[PIPE_DEF_BUFFERS];
4574 struct partial_page partial_def[PIPE_DEF_BUFFERS];
4575 struct trace_iterator *iter = filp->private_data;
4576 struct splice_pipe_desc spd = {
4578 .partial = partial_def,
4579 .nr_pages = 0, /* This gets updated below. */
4580 .nr_pages_max = PIPE_DEF_BUFFERS,
4582 .ops = &tracing_pipe_buf_ops,
4583 .spd_release = tracing_spd_release_pipe,
4585 struct trace_array *tr = iter->tr;
4590 if (splice_grow_spd(pipe, &spd))
4593 /* copy the tracer to avoid using a global lock all around */
4594 mutex_lock(&trace_types_lock);
4595 if (unlikely(iter->trace->name != tr->current_trace->name))
4596 *iter->trace = *tr->current_trace;
4597 mutex_unlock(&trace_types_lock);
4599 mutex_lock(&iter->mutex);
4601 if (iter->trace->splice_read) {
4602 ret = iter->trace->splice_read(iter, filp,
4603 ppos, pipe, len, flags);
4608 ret = tracing_wait_pipe(filp);
4612 if (!iter->ent && !trace_find_next_entry_inc(iter)) {
4617 trace_event_read_lock();
4618 trace_access_lock(iter->cpu_file);
4620 /* Fill as many pages as possible. */
4621 for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) {
4622 spd.pages[i] = alloc_page(GFP_KERNEL);
4626 rem = tracing_fill_pipe_page(rem, iter);
4628 /* Copy the data into the page, so we can start over. */
4629 ret = trace_seq_to_buffer(&iter->seq,
4630 page_address(spd.pages[i]),
4633 __free_page(spd.pages[i]);
4636 spd.partial[i].offset = 0;
4637 spd.partial[i].len = iter->seq.len;
4639 trace_seq_init(&iter->seq);
4642 trace_access_unlock(iter->cpu_file);
4643 trace_event_read_unlock();
4644 mutex_unlock(&iter->mutex);
4648 ret = splice_to_pipe(pipe, &spd);
4650 splice_shrink_spd(&spd);
4654 mutex_unlock(&iter->mutex);
4659 tracing_entries_read(struct file *filp, char __user *ubuf,
4660 size_t cnt, loff_t *ppos)
4662 struct inode *inode = file_inode(filp);
4663 struct trace_array *tr = inode->i_private;
4664 int cpu = tracing_get_cpu(inode);
4669 mutex_lock(&trace_types_lock);
4671 if (cpu == RING_BUFFER_ALL_CPUS) {
4672 int cpu, buf_size_same;
4677 /* check if all cpu sizes are same */
4678 for_each_tracing_cpu(cpu) {
4679 /* fill in the size from first enabled cpu */
4681 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries;
4682 if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) {
4688 if (buf_size_same) {
4689 if (!ring_buffer_expanded)
4690 r = sprintf(buf, "%lu (expanded: %lu)\n",
4692 trace_buf_size >> 10);
4694 r = sprintf(buf, "%lu\n", size >> 10);
4696 r = sprintf(buf, "X\n");
4698 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10);
4700 mutex_unlock(&trace_types_lock);
4702 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4707 tracing_entries_write(struct file *filp, const char __user *ubuf,
4708 size_t cnt, loff_t *ppos)
4710 struct inode *inode = file_inode(filp);
4711 struct trace_array *tr = inode->i_private;
4715 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4719 /* must have at least 1 entry */
4723 /* value is in KB */
4725 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
4735 tracing_total_entries_read(struct file *filp, char __user *ubuf,
4736 size_t cnt, loff_t *ppos)
4738 struct trace_array *tr = filp->private_data;
4741 unsigned long size = 0, expanded_size = 0;
4743 mutex_lock(&trace_types_lock);
4744 for_each_tracing_cpu(cpu) {
4745 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10;
4746 if (!ring_buffer_expanded)
4747 expanded_size += trace_buf_size >> 10;
4749 if (ring_buffer_expanded)
4750 r = sprintf(buf, "%lu\n", size);
4752 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
4753 mutex_unlock(&trace_types_lock);
4755 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4759 tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
4760 size_t cnt, loff_t *ppos)
4763 * There is no need to read what the user has written, this function
4764 * is just to make sure that there is no error when "echo" is used
4773 tracing_free_buffer_release(struct inode *inode, struct file *filp)
4775 struct trace_array *tr = inode->i_private;
4777 /* disable tracing ? */
4778 if (trace_flags & TRACE_ITER_STOP_ON_FREE)
4779 tracer_tracing_off(tr);
4780 /* resize the ring buffer to 0 */
4781 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
4783 trace_array_put(tr);
4789 tracing_mark_write(struct file *filp, const char __user *ubuf,
4790 size_t cnt, loff_t *fpos)
4792 unsigned long addr = (unsigned long)ubuf;
4793 struct trace_array *tr = filp->private_data;
4794 struct ring_buffer_event *event;
4795 struct ring_buffer *buffer;
4796 struct print_entry *entry;
4797 unsigned long irq_flags;
4798 struct page *pages[2];
4808 if (tracing_disabled)
4811 if (!(trace_flags & TRACE_ITER_MARKERS))
4814 if (cnt > TRACE_BUF_SIZE)
4815 cnt = TRACE_BUF_SIZE;
4818 * Userspace is injecting traces into the kernel trace buffer.
4819 * We want to be as non intrusive as possible.
4820 * To do so, we do not want to allocate any special buffers
4821 * or take any locks, but instead write the userspace data
4822 * straight into the ring buffer.
4824 * First we need to pin the userspace buffer into memory,
4825 * which, most likely it is, because it just referenced it.
4826 * But there's no guarantee that it is. By using get_user_pages_fast()
4827 * and kmap_atomic/kunmap_atomic() we can get access to the
4828 * pages directly. We then write the data directly into the
4831 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
4833 /* check if we cross pages */
4834 if ((addr & PAGE_MASK) != ((addr + cnt) & PAGE_MASK))
4837 offset = addr & (PAGE_SIZE - 1);
4840 ret = get_user_pages_fast(addr, nr_pages, 0, pages);
4841 if (ret < nr_pages) {
4843 put_page(pages[ret]);
4848 for (i = 0; i < nr_pages; i++)
4849 map_page[i] = kmap_atomic(pages[i]);
4851 local_save_flags(irq_flags);
4852 size = sizeof(*entry) + cnt + 2; /* possible \n added */
4853 buffer = tr->trace_buffer.buffer;
4854 event = trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
4855 irq_flags, preempt_count());
4857 /* Ring buffer disabled, return as if not open for write */
4862 entry = ring_buffer_event_data(event);
4863 entry->ip = _THIS_IP_;
4865 if (nr_pages == 2) {
4866 len = PAGE_SIZE - offset;
4867 memcpy(&entry->buf, map_page[0] + offset, len);
4868 memcpy(&entry->buf[len], map_page[1], cnt - len);
4870 memcpy(&entry->buf, map_page[0] + offset, cnt);
4872 if (entry->buf[cnt - 1] != '\n') {
4873 entry->buf[cnt] = '\n';
4874 entry->buf[cnt + 1] = '\0';
4876 entry->buf[cnt] = '\0';
4878 __buffer_unlock_commit(buffer, event);
4885 for (i = 0; i < nr_pages; i++){
4886 kunmap_atomic(map_page[i]);
4893 static int tracing_clock_show(struct seq_file *m, void *v)
4895 struct trace_array *tr = m->private;
4898 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++)
4900 "%s%s%s%s", i ? " " : "",
4901 i == tr->clock_id ? "[" : "", trace_clocks[i].name,
4902 i == tr->clock_id ? "]" : "");
4908 static int tracing_set_clock(struct trace_array *tr, const char *clockstr)
4912 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) {
4913 if (strcmp(trace_clocks[i].name, clockstr) == 0)
4916 if (i == ARRAY_SIZE(trace_clocks))
4919 mutex_lock(&trace_types_lock);
4923 ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func);
4926 * New clock may not be consistent with the previous clock.
4927 * Reset the buffer so that it doesn't have incomparable timestamps.
4929 tracing_reset_online_cpus(&tr->trace_buffer);
4931 #ifdef CONFIG_TRACER_MAX_TRACE
4932 if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer)
4933 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
4934 tracing_reset_online_cpus(&tr->max_buffer);
4937 mutex_unlock(&trace_types_lock);
4942 static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
4943 size_t cnt, loff_t *fpos)
4945 struct seq_file *m = filp->private_data;
4946 struct trace_array *tr = m->private;
4948 const char *clockstr;
4951 if (cnt >= sizeof(buf))
4954 if (copy_from_user(&buf, ubuf, cnt))
4959 clockstr = strstrip(buf);
4961 ret = tracing_set_clock(tr, clockstr);
4970 static int tracing_clock_open(struct inode *inode, struct file *file)
4972 struct trace_array *tr = inode->i_private;
4975 if (tracing_disabled)
4978 if (trace_array_get(tr))
4981 ret = single_open(file, tracing_clock_show, inode->i_private);
4983 trace_array_put(tr);
4988 struct ftrace_buffer_info {
4989 struct trace_iterator iter;
4994 #ifdef CONFIG_TRACER_SNAPSHOT
4995 static int tracing_snapshot_open(struct inode *inode, struct file *file)
4997 struct trace_array *tr = inode->i_private;
4998 struct trace_iterator *iter;
5002 if (trace_array_get(tr) < 0)
5005 if (file->f_mode & FMODE_READ) {
5006 iter = __tracing_open(inode, file, true);
5008 ret = PTR_ERR(iter);
5010 /* Writes still need the seq_file to hold the private data */
5012 m = kzalloc(sizeof(*m), GFP_KERNEL);
5015 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
5023 iter->trace_buffer = &tr->max_buffer;
5024 iter->cpu_file = tracing_get_cpu(inode);
5026 file->private_data = m;
5030 trace_array_put(tr);
5036 tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
5039 struct seq_file *m = filp->private_data;
5040 struct trace_iterator *iter = m->private;
5041 struct trace_array *tr = iter->tr;
5045 ret = tracing_update_buffers();
5049 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5053 mutex_lock(&trace_types_lock);
5055 if (tr->current_trace->use_max_tr) {
5062 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5066 if (tr->allocated_snapshot)
5070 /* Only allow per-cpu swap if the ring buffer supports it */
5071 #ifndef CONFIG_RING_BUFFER_ALLOW_SWAP
5072 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
5077 if (!tr->allocated_snapshot) {
5078 ret = alloc_snapshot(tr);
5082 local_irq_disable();
5083 /* Now, we're going to swap */
5084 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5085 update_max_tr(tr, current, smp_processor_id());
5087 update_max_tr_single(tr, current, iter->cpu_file);
5091 if (tr->allocated_snapshot) {
5092 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
5093 tracing_reset_online_cpus(&tr->max_buffer);
5095 tracing_reset(&tr->max_buffer, iter->cpu_file);
5105 mutex_unlock(&trace_types_lock);
5109 static int tracing_snapshot_release(struct inode *inode, struct file *file)
5111 struct seq_file *m = file->private_data;
5114 ret = tracing_release(inode, file);
5116 if (file->f_mode & FMODE_READ)
5119 /* If write only, the seq_file is just a stub */
5127 static int tracing_buffers_open(struct inode *inode, struct file *filp);
5128 static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
5129 size_t count, loff_t *ppos);
5130 static int tracing_buffers_release(struct inode *inode, struct file *file);
5131 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5132 struct pipe_inode_info *pipe, size_t len, unsigned int flags);
5134 static int snapshot_raw_open(struct inode *inode, struct file *filp)
5136 struct ftrace_buffer_info *info;
5139 ret = tracing_buffers_open(inode, filp);
5143 info = filp->private_data;
5145 if (info->iter.trace->use_max_tr) {
5146 tracing_buffers_release(inode, filp);
5150 info->iter.snapshot = true;
5151 info->iter.trace_buffer = &info->iter.tr->max_buffer;
5156 #endif /* CONFIG_TRACER_SNAPSHOT */
5159 static const struct file_operations tracing_max_lat_fops = {
5160 .open = tracing_open_generic,
5161 .read = tracing_max_lat_read,
5162 .write = tracing_max_lat_write,
5163 .llseek = generic_file_llseek,
5166 static const struct file_operations set_tracer_fops = {
5167 .open = tracing_open_generic,
5168 .read = tracing_set_trace_read,
5169 .write = tracing_set_trace_write,
5170 .llseek = generic_file_llseek,
5173 static const struct file_operations tracing_pipe_fops = {
5174 .open = tracing_open_pipe,
5175 .poll = tracing_poll_pipe,
5176 .read = tracing_read_pipe,
5177 .splice_read = tracing_splice_read_pipe,
5178 .release = tracing_release_pipe,
5179 .llseek = no_llseek,
5182 static const struct file_operations tracing_entries_fops = {
5183 .open = tracing_open_generic_tr,
5184 .read = tracing_entries_read,
5185 .write = tracing_entries_write,
5186 .llseek = generic_file_llseek,
5187 .release = tracing_release_generic_tr,
5190 static const struct file_operations tracing_total_entries_fops = {
5191 .open = tracing_open_generic_tr,
5192 .read = tracing_total_entries_read,
5193 .llseek = generic_file_llseek,
5194 .release = tracing_release_generic_tr,
5197 static const struct file_operations tracing_free_buffer_fops = {
5198 .open = tracing_open_generic_tr,
5199 .write = tracing_free_buffer_write,
5200 .release = tracing_free_buffer_release,
5203 static const struct file_operations tracing_mark_fops = {
5204 .open = tracing_open_generic_tr,
5205 .write = tracing_mark_write,
5206 .llseek = generic_file_llseek,
5207 .release = tracing_release_generic_tr,
5210 static const struct file_operations trace_clock_fops = {
5211 .open = tracing_clock_open,
5213 .llseek = seq_lseek,
5214 .release = tracing_single_release_tr,
5215 .write = tracing_clock_write,
5218 #ifdef CONFIG_TRACER_SNAPSHOT
5219 static const struct file_operations snapshot_fops = {
5220 .open = tracing_snapshot_open,
5222 .write = tracing_snapshot_write,
5223 .llseek = tracing_lseek,
5224 .release = tracing_snapshot_release,
5227 static const struct file_operations snapshot_raw_fops = {
5228 .open = snapshot_raw_open,
5229 .read = tracing_buffers_read,
5230 .release = tracing_buffers_release,
5231 .splice_read = tracing_buffers_splice_read,
5232 .llseek = no_llseek,
5235 #endif /* CONFIG_TRACER_SNAPSHOT */
5237 static int tracing_buffers_open(struct inode *inode, struct file *filp)
5239 struct trace_array *tr = inode->i_private;
5240 struct ftrace_buffer_info *info;
5243 if (tracing_disabled)
5246 if (trace_array_get(tr) < 0)
5249 info = kzalloc(sizeof(*info), GFP_KERNEL);
5251 trace_array_put(tr);
5255 mutex_lock(&trace_types_lock);
5258 info->iter.cpu_file = tracing_get_cpu(inode);
5259 info->iter.trace = tr->current_trace;
5260 info->iter.trace_buffer = &tr->trace_buffer;
5262 /* Force reading ring buffer for first read */
5263 info->read = (unsigned int)-1;
5265 filp->private_data = info;
5267 mutex_unlock(&trace_types_lock);
5269 ret = nonseekable_open(inode, filp);
5271 trace_array_put(tr);
5277 tracing_buffers_poll(struct file *filp, poll_table *poll_table)
5279 struct ftrace_buffer_info *info = filp->private_data;
5280 struct trace_iterator *iter = &info->iter;
5282 return trace_poll(iter, filp, poll_table);
5286 tracing_buffers_read(struct file *filp, char __user *ubuf,
5287 size_t count, loff_t *ppos)
5289 struct ftrace_buffer_info *info = filp->private_data;
5290 struct trace_iterator *iter = &info->iter;
5297 mutex_lock(&trace_types_lock);
5299 #ifdef CONFIG_TRACER_MAX_TRACE
5300 if (iter->snapshot && iter->tr->current_trace->use_max_tr) {
5307 info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer,
5313 /* Do we have previous read data to read? */
5314 if (info->read < PAGE_SIZE)
5318 trace_access_lock(iter->cpu_file);
5319 ret = ring_buffer_read_page(iter->trace_buffer->buffer,
5323 trace_access_unlock(iter->cpu_file);
5326 if (trace_empty(iter)) {
5327 if ((filp->f_flags & O_NONBLOCK)) {
5331 mutex_unlock(&trace_types_lock);
5332 ret = wait_on_pipe(iter);
5333 mutex_lock(&trace_types_lock);
5338 if (signal_pending(current)) {
5350 size = PAGE_SIZE - info->read;
5354 ret = copy_to_user(ubuf, info->spare + info->read, size);
5365 mutex_unlock(&trace_types_lock);
5370 static int tracing_buffers_release(struct inode *inode, struct file *file)
5372 struct ftrace_buffer_info *info = file->private_data;
5373 struct trace_iterator *iter = &info->iter;
5375 mutex_lock(&trace_types_lock);
5377 __trace_array_put(iter->tr);
5380 ring_buffer_free_read_page(iter->trace_buffer->buffer, info->spare);
5383 mutex_unlock(&trace_types_lock);
5389 struct ring_buffer *buffer;
5394 static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
5395 struct pipe_buffer *buf)
5397 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5402 ring_buffer_free_read_page(ref->buffer, ref->page);
5407 static void buffer_pipe_buf_get(struct pipe_inode_info *pipe,
5408 struct pipe_buffer *buf)
5410 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
5415 /* Pipe buffer operations for a buffer. */
5416 static const struct pipe_buf_operations buffer_pipe_buf_ops = {
5418 .confirm = generic_pipe_buf_confirm,
5419 .release = buffer_pipe_buf_release,
5420 .steal = generic_pipe_buf_steal,
5421 .get = buffer_pipe_buf_get,
5425 * Callback from splice_to_pipe(), if we need to release some pages
5426 * at the end of the spd in case we error'ed out in filling the pipe.
5428 static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i)
5430 struct buffer_ref *ref =
5431 (struct buffer_ref *)spd->partial[i].private;
5436 ring_buffer_free_read_page(ref->buffer, ref->page);
5438 spd->partial[i].private = 0;
5442 tracing_buffers_splice_read(struct file *file, loff_t *ppos,
5443 struct pipe_inode_info *pipe, size_t len,
5446 struct ftrace_buffer_info *info = file->private_data;
5447 struct trace_iterator *iter = &info->iter;
5448 struct partial_page partial_def[PIPE_DEF_BUFFERS];
5449 struct page *pages_def[PIPE_DEF_BUFFERS];
5450 struct splice_pipe_desc spd = {
5452 .partial = partial_def,
5453 .nr_pages_max = PIPE_DEF_BUFFERS,
5455 .ops = &buffer_pipe_buf_ops,
5456 .spd_release = buffer_spd_release,
5458 struct buffer_ref *ref;
5459 int entries, size, i;
5462 mutex_lock(&trace_types_lock);
5464 #ifdef CONFIG_TRACER_MAX_TRACE
5465 if (iter->snapshot && iter->tr->current_trace->use_max_tr) {
5471 if (splice_grow_spd(pipe, &spd)) {
5476 if (*ppos & (PAGE_SIZE - 1)) {
5481 if (len & (PAGE_SIZE - 1)) {
5482 if (len < PAGE_SIZE) {
5490 trace_access_lock(iter->cpu_file);
5491 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5493 for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) {
5497 ref = kzalloc(sizeof(*ref), GFP_KERNEL);
5502 ref->buffer = iter->trace_buffer->buffer;
5503 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
5509 r = ring_buffer_read_page(ref->buffer, &ref->page,
5510 len, iter->cpu_file, 1);
5512 ring_buffer_free_read_page(ref->buffer, ref->page);
5518 * zero out any left over data, this is going to
5521 size = ring_buffer_page_len(ref->page);
5522 if (size < PAGE_SIZE)
5523 memset(ref->page + size, 0, PAGE_SIZE - size);
5525 page = virt_to_page(ref->page);
5527 spd.pages[i] = page;
5528 spd.partial[i].len = PAGE_SIZE;
5529 spd.partial[i].offset = 0;
5530 spd.partial[i].private = (unsigned long)ref;
5534 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
5537 trace_access_unlock(iter->cpu_file);
5540 /* did we read anything? */
5541 if (!spd.nr_pages) {
5542 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK)) {
5546 mutex_unlock(&trace_types_lock);
5547 ret = wait_on_pipe(iter);
5548 mutex_lock(&trace_types_lock);
5551 if (signal_pending(current)) {
5558 ret = splice_to_pipe(pipe, &spd);
5559 splice_shrink_spd(&spd);
5561 mutex_unlock(&trace_types_lock);
5566 static const struct file_operations tracing_buffers_fops = {
5567 .open = tracing_buffers_open,
5568 .read = tracing_buffers_read,
5569 .poll = tracing_buffers_poll,
5570 .release = tracing_buffers_release,
5571 .splice_read = tracing_buffers_splice_read,
5572 .llseek = no_llseek,
5576 tracing_stats_read(struct file *filp, char __user *ubuf,
5577 size_t count, loff_t *ppos)
5579 struct inode *inode = file_inode(filp);
5580 struct trace_array *tr = inode->i_private;
5581 struct trace_buffer *trace_buf = &tr->trace_buffer;
5582 int cpu = tracing_get_cpu(inode);
5583 struct trace_seq *s;
5585 unsigned long long t;
5586 unsigned long usec_rem;
5588 s = kmalloc(sizeof(*s), GFP_KERNEL);
5594 cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu);
5595 trace_seq_printf(s, "entries: %ld\n", cnt);
5597 cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu);
5598 trace_seq_printf(s, "overrun: %ld\n", cnt);
5600 cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu);
5601 trace_seq_printf(s, "commit overrun: %ld\n", cnt);
5603 cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu);
5604 trace_seq_printf(s, "bytes: %ld\n", cnt);
5606 if (trace_clocks[tr->clock_id].in_ns) {
5607 /* local or global for trace_clock */
5608 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5609 usec_rem = do_div(t, USEC_PER_SEC);
5610 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n",
5613 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu));
5614 usec_rem = do_div(t, USEC_PER_SEC);
5615 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem);
5617 /* counter or tsc mode for trace_clock */
5618 trace_seq_printf(s, "oldest event ts: %llu\n",
5619 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
5621 trace_seq_printf(s, "now ts: %llu\n",
5622 ring_buffer_time_stamp(trace_buf->buffer, cpu));
5625 cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu);
5626 trace_seq_printf(s, "dropped events: %ld\n", cnt);
5628 cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
5629 trace_seq_printf(s, "read events: %ld\n", cnt);
5631 count = simple_read_from_buffer(ubuf, count, ppos, s->buffer, s->len);
5638 static const struct file_operations tracing_stats_fops = {
5639 .open = tracing_open_generic_tr,
5640 .read = tracing_stats_read,
5641 .llseek = generic_file_llseek,
5642 .release = tracing_release_generic_tr,
5645 #ifdef CONFIG_DYNAMIC_FTRACE
5647 int __weak ftrace_arch_read_dyn_info(char *buf, int size)
5653 tracing_read_dyn_info(struct file *filp, char __user *ubuf,
5654 size_t cnt, loff_t *ppos)
5656 static char ftrace_dyn_info_buffer[1024];
5657 static DEFINE_MUTEX(dyn_info_mutex);
5658 unsigned long *p = filp->private_data;
5659 char *buf = ftrace_dyn_info_buffer;
5660 int size = ARRAY_SIZE(ftrace_dyn_info_buffer);
5663 mutex_lock(&dyn_info_mutex);
5664 r = sprintf(buf, "%ld ", *p);
5666 r += ftrace_arch_read_dyn_info(buf+r, (size-1)-r);
5669 r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5671 mutex_unlock(&dyn_info_mutex);
5676 static const struct file_operations tracing_dyn_info_fops = {
5677 .open = tracing_open_generic,
5678 .read = tracing_read_dyn_info,
5679 .llseek = generic_file_llseek,
5681 #endif /* CONFIG_DYNAMIC_FTRACE */
5683 #if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE)
5685 ftrace_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
5691 ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip, void **data)
5693 unsigned long *count = (long *)data;
5705 ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
5706 struct ftrace_probe_ops *ops, void *data)
5708 long count = (long)data;
5710 seq_printf(m, "%ps:", (void *)ip);
5712 seq_printf(m, "snapshot");
5715 seq_printf(m, ":unlimited\n");
5717 seq_printf(m, ":count=%ld\n", count);
5722 static struct ftrace_probe_ops snapshot_probe_ops = {
5723 .func = ftrace_snapshot,
5724 .print = ftrace_snapshot_print,
5727 static struct ftrace_probe_ops snapshot_count_probe_ops = {
5728 .func = ftrace_count_snapshot,
5729 .print = ftrace_snapshot_print,
5733 ftrace_trace_snapshot_callback(struct ftrace_hash *hash,
5734 char *glob, char *cmd, char *param, int enable)
5736 struct ftrace_probe_ops *ops;
5737 void *count = (void *)-1;
5741 /* hash funcs only work with set_ftrace_filter */
5745 ops = param ? &snapshot_count_probe_ops : &snapshot_probe_ops;
5747 if (glob[0] == '!') {
5748 unregister_ftrace_function_probe_func(glob+1, ops);
5755 number = strsep(¶m, ":");
5757 if (!strlen(number))
5761 * We use the callback data field (which is a pointer)
5764 ret = kstrtoul(number, 0, (unsigned long *)&count);
5769 ret = register_ftrace_function_probe(glob, ops, count);
5772 alloc_snapshot(&global_trace);
5774 return ret < 0 ? ret : 0;
5777 static struct ftrace_func_command ftrace_snapshot_cmd = {
5779 .func = ftrace_trace_snapshot_callback,
5782 static __init int register_snapshot_cmd(void)
5784 return register_ftrace_command(&ftrace_snapshot_cmd);
5787 static inline __init int register_snapshot_cmd(void) { return 0; }
5788 #endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */
5790 struct dentry *tracing_init_dentry_tr(struct trace_array *tr)
5795 if (!debugfs_initialized())
5798 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
5799 tr->dir = debugfs_create_dir("tracing", NULL);
5802 pr_warn_once("Could not create debugfs directory 'tracing'\n");
5807 struct dentry *tracing_init_dentry(void)
5809 return tracing_init_dentry_tr(&global_trace);
5812 static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
5814 struct dentry *d_tracer;
5817 return tr->percpu_dir;
5819 d_tracer = tracing_init_dentry_tr(tr);
5823 tr->percpu_dir = debugfs_create_dir("per_cpu", d_tracer);
5825 WARN_ONCE(!tr->percpu_dir,
5826 "Could not create debugfs directory 'per_cpu/%d'\n", cpu);
5828 return tr->percpu_dir;
5831 static struct dentry *
5832 trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
5833 void *data, long cpu, const struct file_operations *fops)
5835 struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
5837 if (ret) /* See tracing_get_cpu() */
5838 ret->d_inode->i_cdev = (void *)(cpu + 1);
5843 tracing_init_debugfs_percpu(struct trace_array *tr, long cpu)
5845 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
5846 struct dentry *d_cpu;
5847 char cpu_dir[30]; /* 30 characters should be more than enough */
5852 snprintf(cpu_dir, 30, "cpu%ld", cpu);
5853 d_cpu = debugfs_create_dir(cpu_dir, d_percpu);
5855 pr_warning("Could not create debugfs '%s' entry\n", cpu_dir);
5859 /* per cpu trace_pipe */
5860 trace_create_cpu_file("trace_pipe", 0444, d_cpu,
5861 tr, cpu, &tracing_pipe_fops);
5864 trace_create_cpu_file("trace", 0644, d_cpu,
5865 tr, cpu, &tracing_fops);
5867 trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
5868 tr, cpu, &tracing_buffers_fops);
5870 trace_create_cpu_file("stats", 0444, d_cpu,
5871 tr, cpu, &tracing_stats_fops);
5873 trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
5874 tr, cpu, &tracing_entries_fops);
5876 #ifdef CONFIG_TRACER_SNAPSHOT
5877 trace_create_cpu_file("snapshot", 0644, d_cpu,
5878 tr, cpu, &snapshot_fops);
5880 trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
5881 tr, cpu, &snapshot_raw_fops);
5885 #ifdef CONFIG_FTRACE_SELFTEST
5886 /* Let selftest have access to static functions in this file */
5887 #include "trace_selftest.c"
5890 struct trace_option_dentry {
5891 struct tracer_opt *opt;
5892 struct tracer_flags *flags;
5893 struct trace_array *tr;
5894 struct dentry *entry;
5898 trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
5901 struct trace_option_dentry *topt = filp->private_data;
5904 if (topt->flags->val & topt->opt->bit)
5909 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
5913 trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
5916 struct trace_option_dentry *topt = filp->private_data;
5920 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5924 if (val != 0 && val != 1)
5927 if (!!(topt->flags->val & topt->opt->bit) != val) {
5928 mutex_lock(&trace_types_lock);
5929 ret = __set_tracer_option(topt->tr, topt->flags,
5931 mutex_unlock(&trace_types_lock);
5942 static const struct file_operations trace_options_fops = {
5943 .open = tracing_open_generic,
5944 .read = trace_options_read,
5945 .write = trace_options_write,
5946 .llseek = generic_file_llseek,
5950 trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
5953 long index = (long)filp->private_data;
5956 if (trace_flags & (1 << index))
5961 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
5965 trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
5968 struct trace_array *tr = &global_trace;
5969 long index = (long)filp->private_data;
5973 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5977 if (val != 0 && val != 1)
5980 mutex_lock(&trace_types_lock);
5981 ret = set_tracer_flag(tr, 1 << index, val);
5982 mutex_unlock(&trace_types_lock);
5992 static const struct file_operations trace_options_core_fops = {
5993 .open = tracing_open_generic,
5994 .read = trace_options_core_read,
5995 .write = trace_options_core_write,
5996 .llseek = generic_file_llseek,
5999 struct dentry *trace_create_file(const char *name,
6001 struct dentry *parent,
6003 const struct file_operations *fops)
6007 ret = debugfs_create_file(name, mode, parent, data, fops);
6009 pr_warning("Could not create debugfs '%s' entry\n", name);
6015 static struct dentry *trace_options_init_dentry(struct trace_array *tr)
6017 struct dentry *d_tracer;
6022 d_tracer = tracing_init_dentry_tr(tr);
6026 tr->options = debugfs_create_dir("options", d_tracer);
6028 pr_warning("Could not create debugfs directory 'options'\n");
6036 create_trace_option_file(struct trace_array *tr,
6037 struct trace_option_dentry *topt,
6038 struct tracer_flags *flags,
6039 struct tracer_opt *opt)
6041 struct dentry *t_options;
6043 t_options = trace_options_init_dentry(tr);
6047 topt->flags = flags;
6051 topt->entry = trace_create_file(opt->name, 0644, t_options, topt,
6052 &trace_options_fops);
6056 static struct trace_option_dentry *
6057 create_trace_option_files(struct trace_array *tr, struct tracer *tracer)
6059 struct trace_option_dentry *topts;
6060 struct tracer_flags *flags;
6061 struct tracer_opt *opts;
6067 flags = tracer->flags;
6069 if (!flags || !flags->opts)
6074 for (cnt = 0; opts[cnt].name; cnt++)
6077 topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
6081 for (cnt = 0; opts[cnt].name; cnt++)
6082 create_trace_option_file(tr, &topts[cnt], flags,
6089 destroy_trace_option_files(struct trace_option_dentry *topts)
6096 for (cnt = 0; topts[cnt].opt; cnt++) {
6097 if (topts[cnt].entry)
6098 debugfs_remove(topts[cnt].entry);
6104 static struct dentry *
6105 create_trace_option_core_file(struct trace_array *tr,
6106 const char *option, long index)
6108 struct dentry *t_options;
6110 t_options = trace_options_init_dentry(tr);
6114 return trace_create_file(option, 0644, t_options, (void *)index,
6115 &trace_options_core_fops);
6118 static __init void create_trace_options_dir(struct trace_array *tr)
6120 struct dentry *t_options;
6123 t_options = trace_options_init_dentry(tr);
6127 for (i = 0; trace_options[i]; i++)
6128 create_trace_option_core_file(tr, trace_options[i], i);
6132 rb_simple_read(struct file *filp, char __user *ubuf,
6133 size_t cnt, loff_t *ppos)
6135 struct trace_array *tr = filp->private_data;
6139 r = tracer_tracing_is_on(tr);
6140 r = sprintf(buf, "%d\n", r);
6142 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6146 rb_simple_write(struct file *filp, const char __user *ubuf,
6147 size_t cnt, loff_t *ppos)
6149 struct trace_array *tr = filp->private_data;
6150 struct ring_buffer *buffer = tr->trace_buffer.buffer;
6154 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6159 mutex_lock(&trace_types_lock);
6161 tracer_tracing_on(tr);
6162 if (tr->current_trace->start)
6163 tr->current_trace->start(tr);
6165 tracer_tracing_off(tr);
6166 if (tr->current_trace->stop)
6167 tr->current_trace->stop(tr);
6169 mutex_unlock(&trace_types_lock);
6177 static const struct file_operations rb_simple_fops = {
6178 .open = tracing_open_generic_tr,
6179 .read = rb_simple_read,
6180 .write = rb_simple_write,
6181 .release = tracing_release_generic_tr,
6182 .llseek = default_llseek,
6185 struct dentry *trace_instance_dir;
6188 init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer);
6191 allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
6193 enum ring_buffer_flags rb_flags;
6195 rb_flags = trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0;
6199 buf->buffer = ring_buffer_alloc(size, rb_flags);
6203 buf->data = alloc_percpu(struct trace_array_cpu);
6205 ring_buffer_free(buf->buffer);
6209 /* Allocate the first page for all buffers */
6210 set_buffer_entries(&tr->trace_buffer,
6211 ring_buffer_size(tr->trace_buffer.buffer, 0));
6216 static int allocate_trace_buffers(struct trace_array *tr, int size)
6220 ret = allocate_trace_buffer(tr, &tr->trace_buffer, size);
6224 #ifdef CONFIG_TRACER_MAX_TRACE
6225 ret = allocate_trace_buffer(tr, &tr->max_buffer,
6226 allocate_snapshot ? size : 1);
6228 ring_buffer_free(tr->trace_buffer.buffer);
6229 free_percpu(tr->trace_buffer.data);
6232 tr->allocated_snapshot = allocate_snapshot;
6235 * Only the top level trace array gets its snapshot allocated
6236 * from the kernel command line.
6238 allocate_snapshot = false;
6243 static void free_trace_buffer(struct trace_buffer *buf)
6246 ring_buffer_free(buf->buffer);
6248 free_percpu(buf->data);
6253 static void free_trace_buffers(struct trace_array *tr)
6258 free_trace_buffer(&tr->trace_buffer);
6260 #ifdef CONFIG_TRACER_MAX_TRACE
6261 free_trace_buffer(&tr->max_buffer);
6265 static int new_instance_create(const char *name)
6267 struct trace_array *tr;
6270 mutex_lock(&trace_types_lock);
6273 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6274 if (tr->name && strcmp(tr->name, name) == 0)
6279 tr = kzalloc(sizeof(*tr), GFP_KERNEL);
6283 tr->name = kstrdup(name, GFP_KERNEL);
6287 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
6290 cpumask_copy(tr->tracing_cpumask, cpu_all_mask);
6292 raw_spin_lock_init(&tr->start_lock);
6294 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
6296 tr->current_trace = &nop_trace;
6298 INIT_LIST_HEAD(&tr->systems);
6299 INIT_LIST_HEAD(&tr->events);
6301 if (allocate_trace_buffers(tr, trace_buf_size) < 0)
6304 tr->dir = debugfs_create_dir(name, trace_instance_dir);
6308 ret = event_trace_add_tracer(tr->dir, tr);
6310 debugfs_remove_recursive(tr->dir);
6314 init_tracer_debugfs(tr, tr->dir);
6316 list_add(&tr->list, &ftrace_trace_arrays);
6318 mutex_unlock(&trace_types_lock);
6323 free_trace_buffers(tr);
6324 free_cpumask_var(tr->tracing_cpumask);
6329 mutex_unlock(&trace_types_lock);
6335 static int instance_delete(const char *name)
6337 struct trace_array *tr;
6341 mutex_lock(&trace_types_lock);
6344 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
6345 if (tr->name && strcmp(tr->name, name) == 0) {
6357 list_del(&tr->list);
6359 tracing_set_nop(tr);
6360 event_trace_del_tracer(tr);
6361 ftrace_destroy_function_files(tr);
6362 debugfs_remove_recursive(tr->dir);
6363 free_trace_buffers(tr);
6371 mutex_unlock(&trace_types_lock);
6376 static int instance_mkdir (struct inode *inode, struct dentry *dentry, umode_t mode)
6378 struct dentry *parent;
6381 /* Paranoid: Make sure the parent is the "instances" directory */
6382 parent = hlist_entry(inode->i_dentry.first, struct dentry, d_alias);
6383 if (WARN_ON_ONCE(parent != trace_instance_dir))
6387 * The inode mutex is locked, but debugfs_create_dir() will also
6388 * take the mutex. As the instances directory can not be destroyed
6389 * or changed in any other way, it is safe to unlock it, and
6390 * let the dentry try. If two users try to make the same dir at
6391 * the same time, then the new_instance_create() will determine the
6394 mutex_unlock(&inode->i_mutex);
6396 ret = new_instance_create(dentry->d_iname);
6398 mutex_lock(&inode->i_mutex);
6403 static int instance_rmdir(struct inode *inode, struct dentry *dentry)
6405 struct dentry *parent;
6408 /* Paranoid: Make sure the parent is the "instances" directory */
6409 parent = hlist_entry(inode->i_dentry.first, struct dentry, d_alias);
6410 if (WARN_ON_ONCE(parent != trace_instance_dir))
6413 /* The caller did a dget() on dentry */
6414 mutex_unlock(&dentry->d_inode->i_mutex);
6417 * The inode mutex is locked, but debugfs_create_dir() will also
6418 * take the mutex. As the instances directory can not be destroyed
6419 * or changed in any other way, it is safe to unlock it, and
6420 * let the dentry try. If two users try to make the same dir at
6421 * the same time, then the instance_delete() will determine the
6424 mutex_unlock(&inode->i_mutex);
6426 ret = instance_delete(dentry->d_iname);
6428 mutex_lock_nested(&inode->i_mutex, I_MUTEX_PARENT);
6429 mutex_lock(&dentry->d_inode->i_mutex);
6434 static const struct inode_operations instance_dir_inode_operations = {
6435 .lookup = simple_lookup,
6436 .mkdir = instance_mkdir,
6437 .rmdir = instance_rmdir,
6440 static __init void create_trace_instances(struct dentry *d_tracer)
6442 trace_instance_dir = debugfs_create_dir("instances", d_tracer);
6443 if (WARN_ON(!trace_instance_dir))
6446 /* Hijack the dir inode operations, to allow mkdir */
6447 trace_instance_dir->d_inode->i_op = &instance_dir_inode_operations;
6451 init_tracer_debugfs(struct trace_array *tr, struct dentry *d_tracer)
6455 trace_create_file("available_tracers", 0444, d_tracer,
6456 tr, &show_traces_fops);
6458 trace_create_file("current_tracer", 0644, d_tracer,
6459 tr, &set_tracer_fops);
6461 trace_create_file("tracing_cpumask", 0644, d_tracer,
6462 tr, &tracing_cpumask_fops);
6464 trace_create_file("trace_options", 0644, d_tracer,
6465 tr, &tracing_iter_fops);
6467 trace_create_file("trace", 0644, d_tracer,
6470 trace_create_file("trace_pipe", 0444, d_tracer,
6471 tr, &tracing_pipe_fops);
6473 trace_create_file("buffer_size_kb", 0644, d_tracer,
6474 tr, &tracing_entries_fops);
6476 trace_create_file("buffer_total_size_kb", 0444, d_tracer,
6477 tr, &tracing_total_entries_fops);
6479 trace_create_file("free_buffer", 0200, d_tracer,
6480 tr, &tracing_free_buffer_fops);
6482 trace_create_file("trace_marker", 0220, d_tracer,
6483 tr, &tracing_mark_fops);
6485 trace_create_file("trace_clock", 0644, d_tracer, tr,
6488 trace_create_file("tracing_on", 0644, d_tracer,
6489 tr, &rb_simple_fops);
6491 #ifdef CONFIG_TRACER_MAX_TRACE
6492 trace_create_file("tracing_max_latency", 0644, d_tracer,
6493 &tr->max_latency, &tracing_max_lat_fops);
6496 if (ftrace_create_function_files(tr, d_tracer))
6497 WARN(1, "Could not allocate function filter files");
6499 #ifdef CONFIG_TRACER_SNAPSHOT
6500 trace_create_file("snapshot", 0644, d_tracer,
6501 tr, &snapshot_fops);
6504 for_each_tracing_cpu(cpu)
6505 tracing_init_debugfs_percpu(tr, cpu);
6509 static __init int tracer_init_debugfs(void)
6511 struct dentry *d_tracer;
6513 trace_access_lock_init();
6515 d_tracer = tracing_init_dentry();
6519 init_tracer_debugfs(&global_trace, d_tracer);
6521 trace_create_file("tracing_thresh", 0644, d_tracer,
6522 &tracing_thresh, &tracing_max_lat_fops);
6524 trace_create_file("README", 0444, d_tracer,
6525 NULL, &tracing_readme_fops);
6527 trace_create_file("saved_cmdlines", 0444, d_tracer,
6528 NULL, &tracing_saved_cmdlines_fops);
6530 trace_create_file("saved_cmdlines_size", 0644, d_tracer,
6531 NULL, &tracing_saved_cmdlines_size_fops);
6533 #ifdef CONFIG_DYNAMIC_FTRACE
6534 trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
6535 &ftrace_update_tot_cnt, &tracing_dyn_info_fops);
6538 create_trace_instances(d_tracer);
6540 create_trace_options_dir(&global_trace);
6545 static int trace_panic_handler(struct notifier_block *this,
6546 unsigned long event, void *unused)
6548 if (ftrace_dump_on_oops)
6549 ftrace_dump(ftrace_dump_on_oops);
6553 static struct notifier_block trace_panic_notifier = {
6554 .notifier_call = trace_panic_handler,
6556 .priority = 150 /* priority: INT_MAX >= x >= 0 */
6559 static int trace_die_handler(struct notifier_block *self,
6565 if (ftrace_dump_on_oops)
6566 ftrace_dump(ftrace_dump_on_oops);
6574 static struct notifier_block trace_die_notifier = {
6575 .notifier_call = trace_die_handler,
6580 * printk is set to max of 1024, we really don't need it that big.
6581 * Nothing should be printing 1000 characters anyway.
6583 #define TRACE_MAX_PRINT 1000
6586 * Define here KERN_TRACE so that we have one place to modify
6587 * it if we decide to change what log level the ftrace dump
6590 #define KERN_TRACE KERN_EMERG
6593 trace_printk_seq(struct trace_seq *s)
6595 /* Probably should print a warning here. */
6596 if (s->len >= TRACE_MAX_PRINT)
6597 s->len = TRACE_MAX_PRINT;
6599 /* should be zero ended, but we are paranoid. */
6600 s->buffer[s->len] = 0;
6602 printk(KERN_TRACE "%s", s->buffer);
6607 void trace_init_global_iter(struct trace_iterator *iter)
6609 iter->tr = &global_trace;
6610 iter->trace = iter->tr->current_trace;
6611 iter->cpu_file = RING_BUFFER_ALL_CPUS;
6612 iter->trace_buffer = &global_trace.trace_buffer;
6614 if (iter->trace && iter->trace->open)
6615 iter->trace->open(iter);
6617 /* Annotate start of buffers if we had overruns */
6618 if (ring_buffer_overruns(iter->trace_buffer->buffer))
6619 iter->iter_flags |= TRACE_FILE_ANNOTATE;
6621 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
6622 if (trace_clocks[iter->tr->clock_id].in_ns)
6623 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
6626 void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
6628 /* use static because iter can be a bit big for the stack */
6629 static struct trace_iterator iter;
6630 static atomic_t dump_running;
6631 unsigned int old_userobj;
6632 unsigned long flags;
6635 /* Only allow one dump user at a time. */
6636 if (atomic_inc_return(&dump_running) != 1) {
6637 atomic_dec(&dump_running);
6642 * Always turn off tracing when we dump.
6643 * We don't need to show trace output of what happens
6644 * between multiple crashes.
6646 * If the user does a sysrq-z, then they can re-enable
6647 * tracing with echo 1 > tracing_on.
6651 local_irq_save(flags);
6653 /* Simulate the iterator */
6654 trace_init_global_iter(&iter);
6656 for_each_tracing_cpu(cpu) {
6657 atomic_inc(&per_cpu_ptr(iter.tr->trace_buffer.data, cpu)->disabled);
6660 old_userobj = trace_flags & TRACE_ITER_SYM_USEROBJ;
6662 /* don't look at user memory in panic mode */
6663 trace_flags &= ~TRACE_ITER_SYM_USEROBJ;
6665 switch (oops_dump_mode) {
6667 iter.cpu_file = RING_BUFFER_ALL_CPUS;
6670 iter.cpu_file = raw_smp_processor_id();
6675 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n");
6676 iter.cpu_file = RING_BUFFER_ALL_CPUS;
6679 printk(KERN_TRACE "Dumping ftrace buffer:\n");
6681 /* Did function tracer already get disabled? */
6682 if (ftrace_is_dead()) {
6683 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
6684 printk("# MAY BE MISSING FUNCTION EVENTS\n");
6688 * We need to stop all tracing on all CPUS to read the
6689 * the next buffer. This is a bit expensive, but is
6690 * not done often. We fill all what we can read,
6691 * and then release the locks again.
6694 while (!trace_empty(&iter)) {
6697 printk(KERN_TRACE "---------------------------------\n");
6701 /* reset all but tr, trace, and overruns */
6702 memset(&iter.seq, 0,
6703 sizeof(struct trace_iterator) -
6704 offsetof(struct trace_iterator, seq));
6705 iter.iter_flags |= TRACE_FILE_LAT_FMT;
6708 if (trace_find_next_entry_inc(&iter) != NULL) {
6711 ret = print_trace_line(&iter);
6712 if (ret != TRACE_TYPE_NO_CONSUME)
6713 trace_consume(&iter);
6715 touch_nmi_watchdog();
6717 trace_printk_seq(&iter.seq);
6721 printk(KERN_TRACE " (ftrace buffer empty)\n");
6723 printk(KERN_TRACE "---------------------------------\n");
6726 trace_flags |= old_userobj;
6728 for_each_tracing_cpu(cpu) {
6729 atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
6731 atomic_dec(&dump_running);
6732 local_irq_restore(flags);
6734 EXPORT_SYMBOL_GPL(ftrace_dump);
6736 __init static int tracer_alloc_buffers(void)
6742 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL))
6745 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL))
6746 goto out_free_buffer_mask;
6748 /* Only allocate trace_printk buffers if a trace_printk exists */
6749 if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt)
6750 /* Must be called before global_trace.buffer is allocated */
6751 trace_printk_init_buffers();
6753 /* To save memory, keep the ring buffer size to its minimum */
6754 if (ring_buffer_expanded)
6755 ring_buf_size = trace_buf_size;
6759 cpumask_copy(tracing_buffer_mask, cpu_possible_mask);
6760 cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask);
6762 raw_spin_lock_init(&global_trace.start_lock);
6764 /* Used for event triggers */
6765 temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE);
6767 goto out_free_cpumask;
6769 if (trace_create_savedcmd() < 0)
6770 goto out_free_temp_buffer;
6772 /* TODO: make the number of buffers hot pluggable with CPUS */
6773 if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) {
6774 printk(KERN_ERR "tracer: failed to allocate ring buffer!\n");
6776 goto out_free_savedcmd;
6779 if (global_trace.buffer_disabled)
6782 if (trace_boot_clock) {
6783 ret = tracing_set_clock(&global_trace, trace_boot_clock);
6785 pr_warning("Trace clock %s not defined, going back to default\n",
6790 * register_tracer() might reference current_trace, so it
6791 * needs to be set before we register anything. This is
6792 * just a bootstrap of current_trace anyway.
6794 global_trace.current_trace = &nop_trace;
6796 global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
6798 ftrace_init_global_array_ops(&global_trace);
6800 register_tracer(&nop_trace);
6802 /* All seems OK, enable tracing */
6803 tracing_disabled = 0;
6805 atomic_notifier_chain_register(&panic_notifier_list,
6806 &trace_panic_notifier);
6808 register_die_notifier(&trace_die_notifier);
6810 global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
6812 INIT_LIST_HEAD(&global_trace.systems);
6813 INIT_LIST_HEAD(&global_trace.events);
6814 list_add(&global_trace.list, &ftrace_trace_arrays);
6816 while (trace_boot_options) {
6819 option = strsep(&trace_boot_options, ",");
6820 trace_set_options(&global_trace, option);
6823 register_snapshot_cmd();
6828 free_saved_cmdlines_buffer(savedcmd);
6829 out_free_temp_buffer:
6830 ring_buffer_free(temp_buffer);
6832 free_cpumask_var(global_trace.tracing_cpumask);
6833 out_free_buffer_mask:
6834 free_cpumask_var(tracing_buffer_mask);
6839 __init static int clear_boot_tracer(void)
6842 * The default tracer at boot buffer is an init section.
6843 * This function is called in lateinit. If we did not
6844 * find the boot tracer, then clear it out, to prevent
6845 * later registration from accessing the buffer that is
6846 * about to be freed.
6848 if (!default_bootup_tracer)
6851 printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n",
6852 default_bootup_tracer);
6853 default_bootup_tracer = NULL;
6858 early_initcall(tracer_alloc_buffers);
6859 fs_initcall(tracer_init_debugfs);
6860 late_initcall(clear_boot_tracer);