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