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