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