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