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