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