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