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