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