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