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