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