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