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