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