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