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