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