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