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