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