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