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