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