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