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