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