]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - kernel/trace/trace.c
ipv4: convert dst_metrics.refcnt from atomic_t to refcount_t
[mirror_ubuntu-artful-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{
29b1a8ad
JF
2040 bool done;
2041
d914ba37
JF
2042 if (tracing_record_taskinfo_skip(flags))
2043 return;
29b1a8ad
JF
2044
2045 /*
2046 * Record as much task information as possible. If some fail, continue
2047 * to try to record the others.
2048 */
2049 done = !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(task);
2050 done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(task);
2051
2052 /* If recording any information failed, retry again soon. */
2053 if (!done)
d914ba37
JF
2054 return;
2055
2056 __this_cpu_write(trace_taskinfo_save, false);
2057}
2058
2059/**
2060 * tracing_record_taskinfo_sched_switch - record task info for sched_switch
2061 *
2062 * @prev - previous task during sched_switch
2063 * @next - next task during sched_switch
2064 * @flags - TRACE_RECORD_CMDLINE for recording comm
2065 * TRACE_RECORD_TGID for recording tgid
2066 */
2067void tracing_record_taskinfo_sched_switch(struct task_struct *prev,
2068 struct task_struct *next, int flags)
bc0c38d1 2069{
29b1a8ad
JF
2070 bool done;
2071
d914ba37
JF
2072 if (tracing_record_taskinfo_skip(flags))
2073 return;
2074
29b1a8ad
JF
2075 /*
2076 * Record as much task information as possible. If some fail, continue
2077 * to try to record the others.
2078 */
2079 done = !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(prev);
2080 done &= !(flags & TRACE_RECORD_CMDLINE) || trace_save_cmdline(next);
2081 done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(prev);
2082 done &= !(flags & TRACE_RECORD_TGID) || trace_save_tgid(next);
bc0c38d1 2083
29b1a8ad
JF
2084 /* If recording any information failed, retry again soon. */
2085 if (!done)
7ffbd48d
SR
2086 return;
2087
d914ba37
JF
2088 __this_cpu_write(trace_taskinfo_save, false);
2089}
2090
2091/* Helpers to record a specific task information */
2092void tracing_record_cmdline(struct task_struct *task)
2093{
2094 tracing_record_taskinfo(task, TRACE_RECORD_CMDLINE);
2095}
2096
2097void tracing_record_tgid(struct task_struct *task)
2098{
2099 tracing_record_taskinfo(task, TRACE_RECORD_TGID);
bc0c38d1
SR
2100}
2101
af0009fc
SRV
2102/*
2103 * Several functions return TRACE_TYPE_PARTIAL_LINE if the trace_seq
2104 * overflowed, and TRACE_TYPE_HANDLED otherwise. This helper function
2105 * simplifies those functions and keeps them in sync.
2106 */
2107enum print_line_t trace_handle_return(struct trace_seq *s)
2108{
2109 return trace_seq_has_overflowed(s) ?
2110 TRACE_TYPE_PARTIAL_LINE : TRACE_TYPE_HANDLED;
2111}
2112EXPORT_SYMBOL_GPL(trace_handle_return);
2113
45dcd8b8 2114void
38697053
SR
2115tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags,
2116 int pc)
bc0c38d1
SR
2117{
2118 struct task_struct *tsk = current;
bc0c38d1 2119
777e208d
SR
2120 entry->preempt_count = pc & 0xff;
2121 entry->pid = (tsk) ? tsk->pid : 0;
2122 entry->flags =
9244489a 2123#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
2e2ca155 2124 (irqs_disabled_flags(flags) ? TRACE_FLAG_IRQS_OFF : 0) |
9244489a
SR
2125#else
2126 TRACE_FLAG_IRQS_NOSUPPORT |
2127#endif
7e6867bf 2128 ((pc & NMI_MASK ) ? TRACE_FLAG_NMI : 0) |
bc0c38d1 2129 ((pc & HARDIRQ_MASK) ? TRACE_FLAG_HARDIRQ : 0) |
c59f29cb 2130 ((pc & SOFTIRQ_OFFSET) ? TRACE_FLAG_SOFTIRQ : 0) |
e5137b50
PZ
2131 (tif_need_resched() ? TRACE_FLAG_NEED_RESCHED : 0) |
2132 (test_preempt_need_resched() ? TRACE_FLAG_PREEMPT_RESCHED : 0);
bc0c38d1 2133}
f413cdb8 2134EXPORT_SYMBOL_GPL(tracing_generic_entry_update);
bc0c38d1 2135
e77405ad
SR
2136struct ring_buffer_event *
2137trace_buffer_lock_reserve(struct ring_buffer *buffer,
2138 int type,
2139 unsigned long len,
2140 unsigned long flags, int pc)
51a763dd 2141{
3e9a8aad 2142 return __trace_buffer_lock_reserve(buffer, type, len, flags, pc);
0fc1b09f
SRRH
2143}
2144
2145DEFINE_PER_CPU(struct ring_buffer_event *, trace_buffered_event);
2146DEFINE_PER_CPU(int, trace_buffered_event_cnt);
2147static int trace_buffered_event_ref;
2148
2149/**
2150 * trace_buffered_event_enable - enable buffering events
2151 *
2152 * When events are being filtered, it is quicker to use a temporary
2153 * buffer to write the event data into if there's a likely chance
2154 * that it will not be committed. The discard of the ring buffer
2155 * is not as fast as committing, and is much slower than copying
2156 * a commit.
2157 *
2158 * When an event is to be filtered, allocate per cpu buffers to
2159 * write the event data into, and if the event is filtered and discarded
2160 * it is simply dropped, otherwise, the entire data is to be committed
2161 * in one shot.
2162 */
2163void trace_buffered_event_enable(void)
2164{
2165 struct ring_buffer_event *event;
2166 struct page *page;
2167 int cpu;
51a763dd 2168
0fc1b09f
SRRH
2169 WARN_ON_ONCE(!mutex_is_locked(&event_mutex));
2170
2171 if (trace_buffered_event_ref++)
2172 return;
2173
2174 for_each_tracing_cpu(cpu) {
2175 page = alloc_pages_node(cpu_to_node(cpu),
2176 GFP_KERNEL | __GFP_NORETRY, 0);
2177 if (!page)
2178 goto failed;
2179
2180 event = page_address(page);
2181 memset(event, 0, sizeof(*event));
2182
2183 per_cpu(trace_buffered_event, cpu) = event;
2184
2185 preempt_disable();
2186 if (cpu == smp_processor_id() &&
2187 this_cpu_read(trace_buffered_event) !=
2188 per_cpu(trace_buffered_event, cpu))
2189 WARN_ON_ONCE(1);
2190 preempt_enable();
51a763dd
ACM
2191 }
2192
0fc1b09f
SRRH
2193 return;
2194 failed:
2195 trace_buffered_event_disable();
2196}
2197
2198static void enable_trace_buffered_event(void *data)
2199{
2200 /* Probably not needed, but do it anyway */
2201 smp_rmb();
2202 this_cpu_dec(trace_buffered_event_cnt);
2203}
2204
2205static void disable_trace_buffered_event(void *data)
2206{
2207 this_cpu_inc(trace_buffered_event_cnt);
2208}
2209
2210/**
2211 * trace_buffered_event_disable - disable buffering events
2212 *
2213 * When a filter is removed, it is faster to not use the buffered
2214 * events, and to commit directly into the ring buffer. Free up
2215 * the temp buffers when there are no more users. This requires
2216 * special synchronization with current events.
2217 */
2218void trace_buffered_event_disable(void)
2219{
2220 int cpu;
2221
2222 WARN_ON_ONCE(!mutex_is_locked(&event_mutex));
2223
2224 if (WARN_ON_ONCE(!trace_buffered_event_ref))
2225 return;
2226
2227 if (--trace_buffered_event_ref)
2228 return;
2229
2230 preempt_disable();
2231 /* For each CPU, set the buffer as used. */
2232 smp_call_function_many(tracing_buffer_mask,
2233 disable_trace_buffered_event, NULL, 1);
2234 preempt_enable();
2235
2236 /* Wait for all current users to finish */
2237 synchronize_sched();
2238
2239 for_each_tracing_cpu(cpu) {
2240 free_page((unsigned long)per_cpu(trace_buffered_event, cpu));
2241 per_cpu(trace_buffered_event, cpu) = NULL;
2242 }
2243 /*
2244 * Make sure trace_buffered_event is NULL before clearing
2245 * trace_buffered_event_cnt.
2246 */
2247 smp_wmb();
2248
2249 preempt_disable();
2250 /* Do the work on each cpu */
2251 smp_call_function_many(tracing_buffer_mask,
2252 enable_trace_buffered_event, NULL, 1);
2253 preempt_enable();
51a763dd 2254}
51a763dd 2255
2c4a33ab
SRRH
2256static struct ring_buffer *temp_buffer;
2257
ccb469a1
SR
2258struct ring_buffer_event *
2259trace_event_buffer_lock_reserve(struct ring_buffer **current_rb,
7f1d2f82 2260 struct trace_event_file *trace_file,
ccb469a1
SR
2261 int type, unsigned long len,
2262 unsigned long flags, int pc)
2263{
2c4a33ab 2264 struct ring_buffer_event *entry;
0fc1b09f 2265 int val;
2c4a33ab 2266
7f1d2f82 2267 *current_rb = trace_file->tr->trace_buffer.buffer;
0fc1b09f
SRRH
2268
2269 if ((trace_file->flags &
2270 (EVENT_FILE_FL_SOFT_DISABLED | EVENT_FILE_FL_FILTERED)) &&
2271 (entry = this_cpu_read(trace_buffered_event))) {
2272 /* Try to use the per cpu buffer first */
2273 val = this_cpu_inc_return(trace_buffered_event_cnt);
2274 if (val == 1) {
2275 trace_event_setup(entry, type, flags, pc);
2276 entry->array[0] = len;
2277 return entry;
2278 }
2279 this_cpu_dec(trace_buffered_event_cnt);
2280 }
2281
3e9a8aad
SRRH
2282 entry = __trace_buffer_lock_reserve(*current_rb,
2283 type, len, flags, pc);
2c4a33ab
SRRH
2284 /*
2285 * If tracing is off, but we have triggers enabled
2286 * we still need to look at the event data. Use the temp_buffer
2287 * to store the trace event for the tigger to use. It's recusive
2288 * safe and will not be recorded anywhere.
2289 */
5d6ad960 2290 if (!entry && trace_file->flags & EVENT_FILE_FL_TRIGGER_COND) {
2c4a33ab 2291 *current_rb = temp_buffer;
3e9a8aad
SRRH
2292 entry = __trace_buffer_lock_reserve(*current_rb,
2293 type, len, flags, pc);
2c4a33ab
SRRH
2294 }
2295 return entry;
ccb469a1
SR
2296}
2297EXPORT_SYMBOL_GPL(trace_event_buffer_lock_reserve);
2298
42391745
SRRH
2299static DEFINE_SPINLOCK(tracepoint_iter_lock);
2300static DEFINE_MUTEX(tracepoint_printk_mutex);
2301
2302static void output_printk(struct trace_event_buffer *fbuffer)
2303{
2304 struct trace_event_call *event_call;
2305 struct trace_event *event;
2306 unsigned long flags;
2307 struct trace_iterator *iter = tracepoint_print_iter;
2308
2309 /* We should never get here if iter is NULL */
2310 if (WARN_ON_ONCE(!iter))
2311 return;
2312
2313 event_call = fbuffer->trace_file->event_call;
2314 if (!event_call || !event_call->event.funcs ||
2315 !event_call->event.funcs->trace)
2316 return;
2317
2318 event = &fbuffer->trace_file->event_call->event;
2319
2320 spin_lock_irqsave(&tracepoint_iter_lock, flags);
2321 trace_seq_init(&iter->seq);
2322 iter->ent = fbuffer->entry;
2323 event_call->event.funcs->trace(iter, 0, event);
2324 trace_seq_putc(&iter->seq, 0);
2325 printk("%s", iter->seq.buffer);
2326
2327 spin_unlock_irqrestore(&tracepoint_iter_lock, flags);
2328}
2329
2330int tracepoint_printk_sysctl(struct ctl_table *table, int write,
2331 void __user *buffer, size_t *lenp,
2332 loff_t *ppos)
2333{
2334 int save_tracepoint_printk;
2335 int ret;
2336
2337 mutex_lock(&tracepoint_printk_mutex);
2338 save_tracepoint_printk = tracepoint_printk;
2339
2340 ret = proc_dointvec(table, write, buffer, lenp, ppos);
2341
2342 /*
2343 * This will force exiting early, as tracepoint_printk
2344 * is always zero when tracepoint_printk_iter is not allocated
2345 */
2346 if (!tracepoint_print_iter)
2347 tracepoint_printk = 0;
2348
2349 if (save_tracepoint_printk == tracepoint_printk)
2350 goto out;
2351
2352 if (tracepoint_printk)
2353 static_key_enable(&tracepoint_printk_key.key);
2354 else
2355 static_key_disable(&tracepoint_printk_key.key);
2356
2357 out:
2358 mutex_unlock(&tracepoint_printk_mutex);
2359
2360 return ret;
2361}
2362
2363void trace_event_buffer_commit(struct trace_event_buffer *fbuffer)
2364{
2365 if (static_key_false(&tracepoint_printk_key.key))
2366 output_printk(fbuffer);
2367
2368 event_trigger_unlock_commit(fbuffer->trace_file, fbuffer->buffer,
2369 fbuffer->event, fbuffer->entry,
2370 fbuffer->flags, fbuffer->pc);
2371}
2372EXPORT_SYMBOL_GPL(trace_event_buffer_commit);
2373
b7f0c959
SRRH
2374void trace_buffer_unlock_commit_regs(struct trace_array *tr,
2375 struct ring_buffer *buffer,
0d5c6e1c
SR
2376 struct ring_buffer_event *event,
2377 unsigned long flags, int pc,
2378 struct pt_regs *regs)
1fd8df2c 2379{
7ffbd48d 2380 __buffer_unlock_commit(buffer, event);
1fd8df2c 2381
be54f69c
SRRH
2382 /*
2383 * If regs is not set, then skip the following callers:
2384 * trace_buffer_unlock_commit_regs
2385 * event_trigger_unlock_commit
2386 * trace_event_buffer_commit
2387 * trace_event_raw_event_sched_switch
2388 * Note, we can still get here via blktrace, wakeup tracer
2389 * and mmiotrace, but that's ok if they lose a function or
2390 * two. They are that meaningful.
2391 */
2392 ftrace_trace_stack(tr, buffer, flags, regs ? 0 : 4, pc, regs);
1fd8df2c
MH
2393 ftrace_trace_userstack(buffer, flags, pc);
2394}
1fd8df2c 2395
52ffabe3
SRRH
2396/*
2397 * Similar to trace_buffer_unlock_commit_regs() but do not dump stack.
2398 */
2399void
2400trace_buffer_unlock_commit_nostack(struct ring_buffer *buffer,
2401 struct ring_buffer_event *event)
2402{
2403 __buffer_unlock_commit(buffer, event);
2404}
2405
478409dd
CZ
2406static void
2407trace_process_export(struct trace_export *export,
2408 struct ring_buffer_event *event)
2409{
2410 struct trace_entry *entry;
2411 unsigned int size = 0;
2412
2413 entry = ring_buffer_event_data(event);
2414 size = ring_buffer_event_length(event);
2415 export->write(entry, size);
2416}
2417
2418static DEFINE_MUTEX(ftrace_export_lock);
2419
2420static struct trace_export __rcu *ftrace_exports_list __read_mostly;
2421
2422static DEFINE_STATIC_KEY_FALSE(ftrace_exports_enabled);
2423
2424static inline void ftrace_exports_enable(void)
2425{
2426 static_branch_enable(&ftrace_exports_enabled);
2427}
2428
2429static inline void ftrace_exports_disable(void)
2430{
2431 static_branch_disable(&ftrace_exports_enabled);
2432}
2433
2434void ftrace_exports(struct ring_buffer_event *event)
2435{
2436 struct trace_export *export;
2437
2438 preempt_disable_notrace();
2439
2440 export = rcu_dereference_raw_notrace(ftrace_exports_list);
2441 while (export) {
2442 trace_process_export(export, event);
2443 export = rcu_dereference_raw_notrace(export->next);
2444 }
2445
2446 preempt_enable_notrace();
2447}
2448
2449static inline void
2450add_trace_export(struct trace_export **list, struct trace_export *export)
2451{
2452 rcu_assign_pointer(export->next, *list);
2453 /*
2454 * We are entering export into the list but another
2455 * CPU might be walking that list. We need to make sure
2456 * the export->next pointer is valid before another CPU sees
2457 * the export pointer included into the list.
2458 */
2459 rcu_assign_pointer(*list, export);
2460}
2461
2462static inline int
2463rm_trace_export(struct trace_export **list, struct trace_export *export)
2464{
2465 struct trace_export **p;
2466
2467 for (p = list; *p != NULL; p = &(*p)->next)
2468 if (*p == export)
2469 break;
2470
2471 if (*p != export)
2472 return -1;
2473
2474 rcu_assign_pointer(*p, (*p)->next);
2475
2476 return 0;
2477}
2478
2479static inline void
2480add_ftrace_export(struct trace_export **list, struct trace_export *export)
2481{
2482 if (*list == NULL)
2483 ftrace_exports_enable();
2484
2485 add_trace_export(list, export);
2486}
2487
2488static inline int
2489rm_ftrace_export(struct trace_export **list, struct trace_export *export)
2490{
2491 int ret;
2492
2493 ret = rm_trace_export(list, export);
2494 if (*list == NULL)
2495 ftrace_exports_disable();
2496
2497 return ret;
2498}
2499
2500int register_ftrace_export(struct trace_export *export)
2501{
2502 if (WARN_ON_ONCE(!export->write))
2503 return -1;
2504
2505 mutex_lock(&ftrace_export_lock);
2506
2507 add_ftrace_export(&ftrace_exports_list, export);
2508
2509 mutex_unlock(&ftrace_export_lock);
2510
2511 return 0;
2512}
2513EXPORT_SYMBOL_GPL(register_ftrace_export);
2514
2515int unregister_ftrace_export(struct trace_export *export)
2516{
2517 int ret;
2518
2519 mutex_lock(&ftrace_export_lock);
2520
2521 ret = rm_ftrace_export(&ftrace_exports_list, export);
2522
2523 mutex_unlock(&ftrace_export_lock);
2524
2525 return ret;
2526}
2527EXPORT_SYMBOL_GPL(unregister_ftrace_export);
2528
e309b41d 2529void
7be42151 2530trace_function(struct trace_array *tr,
38697053
SR
2531 unsigned long ip, unsigned long parent_ip, unsigned long flags,
2532 int pc)
bc0c38d1 2533{
2425bcb9 2534 struct trace_event_call *call = &event_function;
12883efb 2535 struct ring_buffer *buffer = tr->trace_buffer.buffer;
3928a8a2 2536 struct ring_buffer_event *event;
777e208d 2537 struct ftrace_entry *entry;
bc0c38d1 2538
3e9a8aad
SRRH
2539 event = __trace_buffer_lock_reserve(buffer, TRACE_FN, sizeof(*entry),
2540 flags, pc);
3928a8a2
SR
2541 if (!event)
2542 return;
2543 entry = ring_buffer_event_data(event);
777e208d
SR
2544 entry->ip = ip;
2545 entry->parent_ip = parent_ip;
e1112b4d 2546
478409dd
CZ
2547 if (!call_filter_check_discard(call, entry, buffer, event)) {
2548 if (static_branch_unlikely(&ftrace_exports_enabled))
2549 ftrace_exports(event);
7ffbd48d 2550 __buffer_unlock_commit(buffer, event);
478409dd 2551 }
bc0c38d1
SR
2552}
2553
c0a0d0d3 2554#ifdef CONFIG_STACKTRACE
4a9bd3f1
SR
2555
2556#define FTRACE_STACK_MAX_ENTRIES (PAGE_SIZE / sizeof(unsigned long))
2557struct ftrace_stack {
2558 unsigned long calls[FTRACE_STACK_MAX_ENTRIES];
2559};
2560
2561static DEFINE_PER_CPU(struct ftrace_stack, ftrace_stack);
2562static DEFINE_PER_CPU(int, ftrace_stack_reserve);
2563
e77405ad 2564static void __ftrace_trace_stack(struct ring_buffer *buffer,
53614991 2565 unsigned long flags,
1fd8df2c 2566 int skip, int pc, struct pt_regs *regs)
86387f7e 2567{
2425bcb9 2568 struct trace_event_call *call = &event_kernel_stack;
3928a8a2 2569 struct ring_buffer_event *event;
777e208d 2570 struct stack_entry *entry;
86387f7e 2571 struct stack_trace trace;
4a9bd3f1
SR
2572 int use_stack;
2573 int size = FTRACE_STACK_ENTRIES;
2574
2575 trace.nr_entries = 0;
2576 trace.skip = skip;
2577
be54f69c
SRRH
2578 /*
2579 * Add two, for this function and the call to save_stack_trace()
2580 * If regs is set, then these functions will not be in the way.
2581 */
2582 if (!regs)
2583 trace.skip += 2;
2584
4a9bd3f1
SR
2585 /*
2586 * Since events can happen in NMIs there's no safe way to
2587 * use the per cpu ftrace_stacks. We reserve it and if an interrupt
2588 * or NMI comes in, it will just have to use the default
2589 * FTRACE_STACK_SIZE.
2590 */
2591 preempt_disable_notrace();
2592
82146529 2593 use_stack = __this_cpu_inc_return(ftrace_stack_reserve);
4a9bd3f1
SR
2594 /*
2595 * We don't need any atomic variables, just a barrier.
2596 * If an interrupt comes in, we don't care, because it would
2597 * have exited and put the counter back to what we want.
2598 * We just need a barrier to keep gcc from moving things
2599 * around.
2600 */
2601 barrier();
2602 if (use_stack == 1) {
bdffd893 2603 trace.entries = this_cpu_ptr(ftrace_stack.calls);
4a9bd3f1
SR
2604 trace.max_entries = FTRACE_STACK_MAX_ENTRIES;
2605
2606 if (regs)
2607 save_stack_trace_regs(regs, &trace);
2608 else
2609 save_stack_trace(&trace);
2610
2611 if (trace.nr_entries > size)
2612 size = trace.nr_entries;
2613 } else
2614 /* From now on, use_stack is a boolean */
2615 use_stack = 0;
2616
2617 size *= sizeof(unsigned long);
86387f7e 2618
3e9a8aad
SRRH
2619 event = __trace_buffer_lock_reserve(buffer, TRACE_STACK,
2620 sizeof(*entry) + size, flags, pc);
3928a8a2 2621 if (!event)
4a9bd3f1
SR
2622 goto out;
2623 entry = ring_buffer_event_data(event);
86387f7e 2624
4a9bd3f1
SR
2625 memset(&entry->caller, 0, size);
2626
2627 if (use_stack)
2628 memcpy(&entry->caller, trace.entries,
2629 trace.nr_entries * sizeof(unsigned long));
2630 else {
2631 trace.max_entries = FTRACE_STACK_ENTRIES;
2632 trace.entries = entry->caller;
2633 if (regs)
2634 save_stack_trace_regs(regs, &trace);
2635 else
2636 save_stack_trace(&trace);
2637 }
2638
2639 entry->size = trace.nr_entries;
86387f7e 2640
f306cc82 2641 if (!call_filter_check_discard(call, entry, buffer, event))
7ffbd48d 2642 __buffer_unlock_commit(buffer, event);
4a9bd3f1
SR
2643
2644 out:
2645 /* Again, don't let gcc optimize things here */
2646 barrier();
82146529 2647 __this_cpu_dec(ftrace_stack_reserve);
4a9bd3f1
SR
2648 preempt_enable_notrace();
2649
f0a920d5
IM
2650}
2651
2d34f489
SRRH
2652static inline void ftrace_trace_stack(struct trace_array *tr,
2653 struct ring_buffer *buffer,
73dddbb5
SRRH
2654 unsigned long flags,
2655 int skip, int pc, struct pt_regs *regs)
53614991 2656{
2d34f489 2657 if (!(tr->trace_flags & TRACE_ITER_STACKTRACE))
53614991
SR
2658 return;
2659
73dddbb5 2660 __ftrace_trace_stack(buffer, flags, skip, pc, regs);
53614991
SR
2661}
2662
c0a0d0d3
FW
2663void __trace_stack(struct trace_array *tr, unsigned long flags, int skip,
2664 int pc)
38697053 2665{
a33d7d94
SRV
2666 struct ring_buffer *buffer = tr->trace_buffer.buffer;
2667
2668 if (rcu_is_watching()) {
2669 __ftrace_trace_stack(buffer, flags, skip, pc, NULL);
2670 return;
2671 }
2672
2673 /*
2674 * When an NMI triggers, RCU is enabled via rcu_nmi_enter(),
2675 * but if the above rcu_is_watching() failed, then the NMI
2676 * triggered someplace critical, and rcu_irq_enter() should
2677 * not be called from NMI.
2678 */
2679 if (unlikely(in_nmi()))
2680 return;
2681
2682 /*
2683 * It is possible that a function is being traced in a
2684 * location that RCU is not watching. A call to
2685 * rcu_irq_enter() will make sure that it is, but there's
2686 * a few internal rcu functions that could be traced
2687 * where that wont work either. In those cases, we just
2688 * do nothing.
2689 */
2690 if (unlikely(rcu_irq_enter_disabled()))
2691 return;
2692
2693 rcu_irq_enter_irqson();
2694 __ftrace_trace_stack(buffer, flags, skip, pc, NULL);
2695 rcu_irq_exit_irqson();
38697053
SR
2696}
2697
03889384
SR
2698/**
2699 * trace_dump_stack - record a stack back trace in the trace buffer
c142be8e 2700 * @skip: Number of functions to skip (helper handlers)
03889384 2701 */
c142be8e 2702void trace_dump_stack(int skip)
03889384
SR
2703{
2704 unsigned long flags;
2705
2706 if (tracing_disabled || tracing_selftest_running)
e36c5458 2707 return;
03889384
SR
2708
2709 local_save_flags(flags);
2710
c142be8e
SRRH
2711 /*
2712 * Skip 3 more, seems to get us at the caller of
2713 * this function.
2714 */
2715 skip += 3;
2716 __ftrace_trace_stack(global_trace.trace_buffer.buffer,
2717 flags, skip, preempt_count(), NULL);
03889384
SR
2718}
2719
91e86e56
SR
2720static DEFINE_PER_CPU(int, user_stack_count);
2721
e77405ad
SR
2722void
2723ftrace_trace_userstack(struct ring_buffer *buffer, unsigned long flags, int pc)
02b67518 2724{
2425bcb9 2725 struct trace_event_call *call = &event_user_stack;
8d7c6a96 2726 struct ring_buffer_event *event;
02b67518
TE
2727 struct userstack_entry *entry;
2728 struct stack_trace trace;
02b67518 2729
983f938a 2730 if (!(global_trace.trace_flags & TRACE_ITER_USERSTACKTRACE))
02b67518
TE
2731 return;
2732
b6345879
SR
2733 /*
2734 * NMIs can not handle page faults, even with fix ups.
2735 * The save user stack can (and often does) fault.
2736 */
2737 if (unlikely(in_nmi()))
2738 return;
02b67518 2739
91e86e56
SR
2740 /*
2741 * prevent recursion, since the user stack tracing may
2742 * trigger other kernel events.
2743 */
2744 preempt_disable();
2745 if (__this_cpu_read(user_stack_count))
2746 goto out;
2747
2748 __this_cpu_inc(user_stack_count);
2749
3e9a8aad
SRRH
2750 event = __trace_buffer_lock_reserve(buffer, TRACE_USER_STACK,
2751 sizeof(*entry), flags, pc);
02b67518 2752 if (!event)
1dbd1951 2753 goto out_drop_count;
02b67518 2754 entry = ring_buffer_event_data(event);
02b67518 2755
48659d31 2756 entry->tgid = current->tgid;
02b67518
TE
2757 memset(&entry->caller, 0, sizeof(entry->caller));
2758
2759 trace.nr_entries = 0;
2760 trace.max_entries = FTRACE_STACK_ENTRIES;
2761 trace.skip = 0;
2762 trace.entries = entry->caller;
2763
2764 save_stack_trace_user(&trace);
f306cc82 2765 if (!call_filter_check_discard(call, entry, buffer, event))
7ffbd48d 2766 __buffer_unlock_commit(buffer, event);
91e86e56 2767
1dbd1951 2768 out_drop_count:
91e86e56 2769 __this_cpu_dec(user_stack_count);
91e86e56
SR
2770 out:
2771 preempt_enable();
02b67518
TE
2772}
2773
4fd27358
HE
2774#ifdef UNUSED
2775static void __trace_userstack(struct trace_array *tr, unsigned long flags)
02b67518 2776{
7be42151 2777 ftrace_trace_userstack(tr, flags, preempt_count());
02b67518 2778}
4fd27358 2779#endif /* UNUSED */
02b67518 2780
c0a0d0d3
FW
2781#endif /* CONFIG_STACKTRACE */
2782
07d777fe
SR
2783/* created for use with alloc_percpu */
2784struct trace_buffer_struct {
e2ace001
AL
2785 int nesting;
2786 char buffer[4][TRACE_BUF_SIZE];
07d777fe
SR
2787};
2788
2789static struct trace_buffer_struct *trace_percpu_buffer;
07d777fe
SR
2790
2791/*
e2ace001
AL
2792 * Thise allows for lockless recording. If we're nested too deeply, then
2793 * this returns NULL.
07d777fe
SR
2794 */
2795static char *get_trace_buf(void)
2796{
e2ace001 2797 struct trace_buffer_struct *buffer = this_cpu_ptr(trace_percpu_buffer);
07d777fe 2798
e2ace001 2799 if (!buffer || buffer->nesting >= 4)
07d777fe
SR
2800 return NULL;
2801
6f722e82
SRV
2802 buffer->nesting++;
2803
2804 /* Interrupts must see nesting incremented before we use the buffer */
2805 barrier();
2806 return &buffer->buffer[buffer->nesting][0];
e2ace001
AL
2807}
2808
2809static void put_trace_buf(void)
2810{
6f722e82
SRV
2811 /* Don't let the decrement of nesting leak before this */
2812 barrier();
e2ace001 2813 this_cpu_dec(trace_percpu_buffer->nesting);
07d777fe
SR
2814}
2815
2816static int alloc_percpu_trace_buffer(void)
2817{
2818 struct trace_buffer_struct *buffers;
07d777fe
SR
2819
2820 buffers = alloc_percpu(struct trace_buffer_struct);
e2ace001
AL
2821 if (WARN(!buffers, "Could not allocate percpu trace_printk buffer"))
2822 return -ENOMEM;
07d777fe
SR
2823
2824 trace_percpu_buffer = buffers;
07d777fe 2825 return 0;
07d777fe
SR
2826}
2827
81698831
SR
2828static int buffers_allocated;
2829
07d777fe
SR
2830void trace_printk_init_buffers(void)
2831{
07d777fe
SR
2832 if (buffers_allocated)
2833 return;
2834
2835 if (alloc_percpu_trace_buffer())
2836 return;
2837
2184db46
SR
2838 /* trace_printk() is for debug use only. Don't use it in production. */
2839
a395d6a7
JP
2840 pr_warn("\n");
2841 pr_warn("**********************************************************\n");
2842 pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
2843 pr_warn("** **\n");
2844 pr_warn("** trace_printk() being used. Allocating extra memory. **\n");
2845 pr_warn("** **\n");
2846 pr_warn("** This means that this is a DEBUG kernel and it is **\n");
2847 pr_warn("** unsafe for production use. **\n");
2848 pr_warn("** **\n");
2849 pr_warn("** If you see this message and you are not debugging **\n");
2850 pr_warn("** the kernel, report this immediately to your vendor! **\n");
2851 pr_warn("** **\n");
2852 pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n");
2853 pr_warn("**********************************************************\n");
07d777fe 2854
b382ede6
SR
2855 /* Expand the buffers to set size */
2856 tracing_update_buffers();
2857
07d777fe 2858 buffers_allocated = 1;
81698831
SR
2859
2860 /*
2861 * trace_printk_init_buffers() can be called by modules.
2862 * If that happens, then we need to start cmdline recording
2863 * directly here. If the global_trace.buffer is already
2864 * allocated here, then this was called by module code.
2865 */
12883efb 2866 if (global_trace.trace_buffer.buffer)
81698831
SR
2867 tracing_start_cmdline_record();
2868}
2869
2870void trace_printk_start_comm(void)
2871{
2872 /* Start tracing comms if trace printk is set */
2873 if (!buffers_allocated)
2874 return;
2875 tracing_start_cmdline_record();
2876}
2877
2878static void trace_printk_start_stop_comm(int enabled)
2879{
2880 if (!buffers_allocated)
2881 return;
2882
2883 if (enabled)
2884 tracing_start_cmdline_record();
2885 else
2886 tracing_stop_cmdline_record();
07d777fe
SR
2887}
2888
769b0441 2889/**
48ead020 2890 * trace_vbprintk - write binary msg to tracing buffer
769b0441
FW
2891 *
2892 */
40ce74f1 2893int trace_vbprintk(unsigned long ip, const char *fmt, va_list args)
769b0441 2894{
2425bcb9 2895 struct trace_event_call *call = &event_bprint;
769b0441 2896 struct ring_buffer_event *event;
e77405ad 2897 struct ring_buffer *buffer;
769b0441 2898 struct trace_array *tr = &global_trace;
48ead020 2899 struct bprint_entry *entry;
769b0441 2900 unsigned long flags;
07d777fe
SR
2901 char *tbuffer;
2902 int len = 0, size, pc;
769b0441
FW
2903
2904 if (unlikely(tracing_selftest_running || tracing_disabled))
2905 return 0;
2906
2907 /* Don't pollute graph traces with trace_vprintk internals */
2908 pause_graph_tracing();
2909
2910 pc = preempt_count();
5168ae50 2911 preempt_disable_notrace();
769b0441 2912
07d777fe
SR
2913 tbuffer = get_trace_buf();
2914 if (!tbuffer) {
2915 len = 0;
e2ace001 2916 goto out_nobuffer;
07d777fe 2917 }
769b0441 2918
07d777fe 2919 len = vbin_printf((u32 *)tbuffer, TRACE_BUF_SIZE/sizeof(int), fmt, args);
769b0441 2920
07d777fe
SR
2921 if (len > TRACE_BUF_SIZE/sizeof(int) || len < 0)
2922 goto out;
769b0441 2923
07d777fe 2924 local_save_flags(flags);
769b0441 2925 size = sizeof(*entry) + sizeof(u32) * len;
12883efb 2926 buffer = tr->trace_buffer.buffer;
3e9a8aad
SRRH
2927 event = __trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size,
2928 flags, pc);
769b0441 2929 if (!event)
07d777fe 2930 goto out;
769b0441
FW
2931 entry = ring_buffer_event_data(event);
2932 entry->ip = ip;
769b0441
FW
2933 entry->fmt = fmt;
2934
07d777fe 2935 memcpy(entry->buf, tbuffer, sizeof(u32) * len);
f306cc82 2936 if (!call_filter_check_discard(call, entry, buffer, event)) {
7ffbd48d 2937 __buffer_unlock_commit(buffer, event);
2d34f489 2938 ftrace_trace_stack(tr, buffer, flags, 6, pc, NULL);
d931369b 2939 }
769b0441 2940
769b0441 2941out:
e2ace001
AL
2942 put_trace_buf();
2943
2944out_nobuffer:
5168ae50 2945 preempt_enable_notrace();
769b0441
FW
2946 unpause_graph_tracing();
2947
2948 return len;
2949}
48ead020
FW
2950EXPORT_SYMBOL_GPL(trace_vbprintk);
2951
12883efb
SRRH
2952static int
2953__trace_array_vprintk(struct ring_buffer *buffer,
2954 unsigned long ip, const char *fmt, va_list args)
48ead020 2955{
2425bcb9 2956 struct trace_event_call *call = &event_print;
48ead020 2957 struct ring_buffer_event *event;
07d777fe 2958 int len = 0, size, pc;
48ead020 2959 struct print_entry *entry;
07d777fe
SR
2960 unsigned long flags;
2961 char *tbuffer;
48ead020
FW
2962
2963 if (tracing_disabled || tracing_selftest_running)
2964 return 0;
2965
07d777fe
SR
2966 /* Don't pollute graph traces with trace_vprintk internals */
2967 pause_graph_tracing();
2968
48ead020
FW
2969 pc = preempt_count();
2970 preempt_disable_notrace();
48ead020 2971
07d777fe
SR
2972
2973 tbuffer = get_trace_buf();
2974 if (!tbuffer) {
2975 len = 0;
e2ace001 2976 goto out_nobuffer;
07d777fe 2977 }
48ead020 2978
3558a5ac 2979 len = vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args);
48ead020 2980
07d777fe 2981 local_save_flags(flags);
48ead020 2982 size = sizeof(*entry) + len + 1;
3e9a8aad
SRRH
2983 event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
2984 flags, pc);
48ead020 2985 if (!event)
07d777fe 2986 goto out;
48ead020 2987 entry = ring_buffer_event_data(event);
c13d2f7c 2988 entry->ip = ip;
48ead020 2989
3558a5ac 2990 memcpy(&entry->buf, tbuffer, len + 1);
f306cc82 2991 if (!call_filter_check_discard(call, entry, buffer, event)) {
7ffbd48d 2992 __buffer_unlock_commit(buffer, event);
2d34f489 2993 ftrace_trace_stack(&global_trace, buffer, flags, 6, pc, NULL);
d931369b 2994 }
e2ace001
AL
2995
2996out:
2997 put_trace_buf();
2998
2999out_nobuffer:
48ead020 3000 preempt_enable_notrace();
07d777fe 3001 unpause_graph_tracing();
48ead020
FW
3002
3003 return len;
3004}
659372d3 3005
12883efb
SRRH
3006int trace_array_vprintk(struct trace_array *tr,
3007 unsigned long ip, const char *fmt, va_list args)
3008{
3009 return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
3010}
3011
3012int trace_array_printk(struct trace_array *tr,
3013 unsigned long ip, const char *fmt, ...)
3014{
3015 int ret;
3016 va_list ap;
3017
983f938a 3018 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
12883efb
SRRH
3019 return 0;
3020
3021 va_start(ap, fmt);
3022 ret = trace_array_vprintk(tr, ip, fmt, ap);
3023 va_end(ap);
3024 return ret;
3025}
3026
3027int trace_array_printk_buf(struct ring_buffer *buffer,
3028 unsigned long ip, const char *fmt, ...)
3029{
3030 int ret;
3031 va_list ap;
3032
983f938a 3033 if (!(global_trace.trace_flags & TRACE_ITER_PRINTK))
12883efb
SRRH
3034 return 0;
3035
3036 va_start(ap, fmt);
3037 ret = __trace_array_vprintk(buffer, ip, fmt, ap);
3038 va_end(ap);
3039 return ret;
3040}
3041
659372d3
SR
3042int trace_vprintk(unsigned long ip, const char *fmt, va_list args)
3043{
a813a159 3044 return trace_array_vprintk(&global_trace, ip, fmt, args);
659372d3 3045}
769b0441
FW
3046EXPORT_SYMBOL_GPL(trace_vprintk);
3047
e2ac8ef5 3048static void trace_iterator_increment(struct trace_iterator *iter)
5a90f577 3049{
6d158a81
SR
3050 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, iter->cpu);
3051
5a90f577 3052 iter->idx++;
6d158a81
SR
3053 if (buf_iter)
3054 ring_buffer_read(buf_iter, NULL);
5a90f577
SR
3055}
3056
e309b41d 3057static struct trace_entry *
bc21b478
SR
3058peek_next_entry(struct trace_iterator *iter, int cpu, u64 *ts,
3059 unsigned long *lost_events)
dd0e545f 3060{
3928a8a2 3061 struct ring_buffer_event *event;
6d158a81 3062 struct ring_buffer_iter *buf_iter = trace_buffer_iter(iter, cpu);
dd0e545f 3063
d769041f
SR
3064 if (buf_iter)
3065 event = ring_buffer_iter_peek(buf_iter, ts);
3066 else
12883efb 3067 event = ring_buffer_peek(iter->trace_buffer->buffer, cpu, ts,
bc21b478 3068 lost_events);
d769041f 3069
4a9bd3f1
SR
3070 if (event) {
3071 iter->ent_size = ring_buffer_event_length(event);
3072 return ring_buffer_event_data(event);
3073 }
3074 iter->ent_size = 0;
3075 return NULL;
dd0e545f 3076}
d769041f 3077
dd0e545f 3078static struct trace_entry *
bc21b478
SR
3079__find_next_entry(struct trace_iterator *iter, int *ent_cpu,
3080 unsigned long *missing_events, u64 *ent_ts)
bc0c38d1 3081{
12883efb 3082 struct ring_buffer *buffer = iter->trace_buffer->buffer;
bc0c38d1 3083 struct trace_entry *ent, *next = NULL;
aa27497c 3084 unsigned long lost_events = 0, next_lost = 0;
b04cc6b1 3085 int cpu_file = iter->cpu_file;
3928a8a2 3086 u64 next_ts = 0, ts;
bc0c38d1 3087 int next_cpu = -1;
12b5da34 3088 int next_size = 0;
bc0c38d1
SR
3089 int cpu;
3090
b04cc6b1
FW
3091 /*
3092 * If we are in a per_cpu trace file, don't bother by iterating over
3093 * all cpu and peek directly.
3094 */
ae3b5093 3095 if (cpu_file > RING_BUFFER_ALL_CPUS) {
b04cc6b1
FW
3096 if (ring_buffer_empty_cpu(buffer, cpu_file))
3097 return NULL;
bc21b478 3098 ent = peek_next_entry(iter, cpu_file, ent_ts, missing_events);
b04cc6b1
FW
3099 if (ent_cpu)
3100 *ent_cpu = cpu_file;
3101
3102 return ent;
3103 }
3104
ab46428c 3105 for_each_tracing_cpu(cpu) {
dd0e545f 3106
3928a8a2
SR
3107 if (ring_buffer_empty_cpu(buffer, cpu))
3108 continue;
dd0e545f 3109
bc21b478 3110 ent = peek_next_entry(iter, cpu, &ts, &lost_events);
dd0e545f 3111
cdd31cd2
IM
3112 /*
3113 * Pick the entry with the smallest timestamp:
3114 */
3928a8a2 3115 if (ent && (!next || ts < next_ts)) {
bc0c38d1
SR
3116 next = ent;
3117 next_cpu = cpu;
3928a8a2 3118 next_ts = ts;
bc21b478 3119 next_lost = lost_events;
12b5da34 3120 next_size = iter->ent_size;
bc0c38d1
SR
3121 }
3122 }
3123
12b5da34
SR
3124 iter->ent_size = next_size;
3125
bc0c38d1
SR
3126 if (ent_cpu)
3127 *ent_cpu = next_cpu;
3128
3928a8a2
SR
3129 if (ent_ts)
3130 *ent_ts = next_ts;
3131
bc21b478
SR
3132 if (missing_events)
3133 *missing_events = next_lost;
3134
bc0c38d1
SR
3135 return next;
3136}
3137
dd0e545f 3138/* Find the next real entry, without updating the iterator itself */
c4a8e8be
FW
3139struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
3140 int *ent_cpu, u64 *ent_ts)
bc0c38d1 3141{
bc21b478 3142 return __find_next_entry(iter, ent_cpu, NULL, ent_ts);
dd0e545f
SR
3143}
3144
3145/* Find the next real entry, and increment the iterator to the next entry */
955b61e5 3146void *trace_find_next_entry_inc(struct trace_iterator *iter)
dd0e545f 3147{
bc21b478
SR
3148 iter->ent = __find_next_entry(iter, &iter->cpu,
3149 &iter->lost_events, &iter->ts);
dd0e545f 3150
3928a8a2 3151 if (iter->ent)
e2ac8ef5 3152 trace_iterator_increment(iter);
dd0e545f 3153
3928a8a2 3154 return iter->ent ? iter : NULL;
b3806b43 3155}
bc0c38d1 3156
e309b41d 3157static void trace_consume(struct trace_iterator *iter)
b3806b43 3158{
12883efb 3159 ring_buffer_consume(iter->trace_buffer->buffer, iter->cpu, &iter->ts,
bc21b478 3160 &iter->lost_events);
bc0c38d1
SR
3161}
3162
e309b41d 3163static void *s_next(struct seq_file *m, void *v, loff_t *pos)
bc0c38d1
SR
3164{
3165 struct trace_iterator *iter = m->private;
bc0c38d1 3166 int i = (int)*pos;
4e3c3333 3167 void *ent;
bc0c38d1 3168
a63ce5b3
SR
3169 WARN_ON_ONCE(iter->leftover);
3170
bc0c38d1
SR
3171 (*pos)++;
3172
3173 /* can't go backwards */
3174 if (iter->idx > i)
3175 return NULL;
3176
3177 if (iter->idx < 0)
955b61e5 3178 ent = trace_find_next_entry_inc(iter);
bc0c38d1
SR
3179 else
3180 ent = iter;
3181
3182 while (ent && iter->idx < i)
955b61e5 3183 ent = trace_find_next_entry_inc(iter);
bc0c38d1
SR
3184
3185 iter->pos = *pos;
3186
bc0c38d1
SR
3187 return ent;
3188}
3189
955b61e5 3190void tracing_iter_reset(struct trace_iterator *iter, int cpu)
2f26ebd5 3191{
2f26ebd5
SR
3192 struct ring_buffer_event *event;
3193 struct ring_buffer_iter *buf_iter;
3194 unsigned long entries = 0;
3195 u64 ts;
3196
12883efb 3197 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = 0;
2f26ebd5 3198
6d158a81
SR
3199 buf_iter = trace_buffer_iter(iter, cpu);
3200 if (!buf_iter)
2f26ebd5
SR
3201 return;
3202
2f26ebd5
SR
3203 ring_buffer_iter_reset(buf_iter);
3204
3205 /*
3206 * We could have the case with the max latency tracers
3207 * that a reset never took place on a cpu. This is evident
3208 * by the timestamp being before the start of the buffer.
3209 */
3210 while ((event = ring_buffer_iter_peek(buf_iter, &ts))) {
12883efb 3211 if (ts >= iter->trace_buffer->time_start)
2f26ebd5
SR
3212 break;
3213 entries++;
3214 ring_buffer_read(buf_iter, NULL);
3215 }
3216
12883efb 3217 per_cpu_ptr(iter->trace_buffer->data, cpu)->skipped_entries = entries;
2f26ebd5
SR
3218}
3219
d7350c3f 3220/*
d7350c3f
FW
3221 * The current tracer is copied to avoid a global locking
3222 * all around.
3223 */
bc0c38d1
SR
3224static void *s_start(struct seq_file *m, loff_t *pos)
3225{
3226 struct trace_iterator *iter = m->private;
2b6080f2 3227 struct trace_array *tr = iter->tr;
b04cc6b1 3228 int cpu_file = iter->cpu_file;
bc0c38d1
SR
3229 void *p = NULL;
3230 loff_t l = 0;
3928a8a2 3231 int cpu;
bc0c38d1 3232
2fd196ec
HT
3233 /*
3234 * copy the tracer to avoid using a global lock all around.
3235 * iter->trace is a copy of current_trace, the pointer to the
3236 * name may be used instead of a strcmp(), as iter->trace->name
3237 * will point to the same string as current_trace->name.
3238 */
bc0c38d1 3239 mutex_lock(&trace_types_lock);
2b6080f2
SR
3240 if (unlikely(tr->current_trace && iter->trace->name != tr->current_trace->name))
3241 *iter->trace = *tr->current_trace;
d7350c3f 3242 mutex_unlock(&trace_types_lock);
bc0c38d1 3243
12883efb 3244#ifdef CONFIG_TRACER_MAX_TRACE
debdd57f
HT
3245 if (iter->snapshot && iter->trace->use_max_tr)
3246 return ERR_PTR(-EBUSY);
12883efb 3247#endif
debdd57f
HT
3248
3249 if (!iter->snapshot)
d914ba37 3250 atomic_inc(&trace_record_taskinfo_disabled);
bc0c38d1 3251
bc0c38d1
SR
3252 if (*pos != iter->pos) {
3253 iter->ent = NULL;
3254 iter->cpu = 0;
3255 iter->idx = -1;
3256
ae3b5093 3257 if (cpu_file == RING_BUFFER_ALL_CPUS) {
b04cc6b1 3258 for_each_tracing_cpu(cpu)
2f26ebd5 3259 tracing_iter_reset(iter, cpu);
b04cc6b1 3260 } else
2f26ebd5 3261 tracing_iter_reset(iter, cpu_file);
bc0c38d1 3262
ac91d854 3263 iter->leftover = 0;
bc0c38d1
SR
3264 for (p = iter; p && l < *pos; p = s_next(m, p, &l))
3265 ;
3266
3267 } else {
a63ce5b3
SR
3268 /*
3269 * If we overflowed the seq_file before, then we want
3270 * to just reuse the trace_seq buffer again.
3271 */
3272 if (iter->leftover)
3273 p = iter;
3274 else {
3275 l = *pos - 1;
3276 p = s_next(m, p, &l);
3277 }
bc0c38d1
SR
3278 }
3279
4f535968 3280 trace_event_read_lock();
7e53bd42 3281 trace_access_lock(cpu_file);
bc0c38d1
SR
3282 return p;
3283}
3284
3285static void s_stop(struct seq_file *m, void *p)
3286{
7e53bd42
LJ
3287 struct trace_iterator *iter = m->private;
3288
12883efb 3289#ifdef CONFIG_TRACER_MAX_TRACE
debdd57f
HT
3290 if (iter->snapshot && iter->trace->use_max_tr)
3291 return;
12883efb 3292#endif
debdd57f
HT
3293
3294 if (!iter->snapshot)
d914ba37 3295 atomic_dec(&trace_record_taskinfo_disabled);
12883efb 3296
7e53bd42 3297 trace_access_unlock(iter->cpu_file);
4f535968 3298 trace_event_read_unlock();
bc0c38d1
SR
3299}
3300
39eaf7ef 3301static void
12883efb
SRRH
3302get_total_entries(struct trace_buffer *buf,
3303 unsigned long *total, unsigned long *entries)
39eaf7ef
SR
3304{
3305 unsigned long count;
3306 int cpu;
3307
3308 *total = 0;
3309 *entries = 0;
3310
3311 for_each_tracing_cpu(cpu) {
12883efb 3312 count = ring_buffer_entries_cpu(buf->buffer, cpu);
39eaf7ef
SR
3313 /*
3314 * If this buffer has skipped entries, then we hold all
3315 * entries for the trace and we need to ignore the
3316 * ones before the time stamp.
3317 */
12883efb
SRRH
3318 if (per_cpu_ptr(buf->data, cpu)->skipped_entries) {
3319 count -= per_cpu_ptr(buf->data, cpu)->skipped_entries;
39eaf7ef
SR
3320 /* total is the same as the entries */
3321 *total += count;
3322 } else
3323 *total += count +
12883efb 3324 ring_buffer_overrun_cpu(buf->buffer, cpu);
39eaf7ef
SR
3325 *entries += count;
3326 }
3327}
3328
e309b41d 3329static void print_lat_help_header(struct seq_file *m)
bc0c38d1 3330{
d79ac28f
RV
3331 seq_puts(m, "# _------=> CPU# \n"
3332 "# / _-----=> irqs-off \n"
3333 "# | / _----=> need-resched \n"
3334 "# || / _---=> hardirq/softirq \n"
3335 "# ||| / _--=> preempt-depth \n"
3336 "# |||| / delay \n"
3337 "# cmd pid ||||| time | caller \n"
3338 "# \\ / ||||| \\ | / \n");
bc0c38d1
SR
3339}
3340
12883efb 3341static void print_event_info(struct trace_buffer *buf, struct seq_file *m)
bc0c38d1 3342{
39eaf7ef
SR
3343 unsigned long total;
3344 unsigned long entries;
3345
12883efb 3346 get_total_entries(buf, &total, &entries);
39eaf7ef
SR
3347 seq_printf(m, "# entries-in-buffer/entries-written: %lu/%lu #P:%d\n",
3348 entries, total, num_online_cpus());
3349 seq_puts(m, "#\n");
3350}
3351
441dae8f
JF
3352static void print_func_help_header(struct trace_buffer *buf, struct seq_file *m,
3353 unsigned int flags)
39eaf7ef 3354{
441dae8f
JF
3355 bool tgid = flags & TRACE_ITER_RECORD_TGID;
3356
12883efb 3357 print_event_info(buf, m);
441dae8f
JF
3358
3359 seq_printf(m, "# TASK-PID CPU# %s TIMESTAMP FUNCTION\n", tgid ? "TGID " : "");
3360 seq_printf(m, "# | | | %s | |\n", tgid ? " | " : "");
bc0c38d1
SR
3361}
3362
441dae8f
JF
3363static void print_func_help_header_irq(struct trace_buffer *buf, struct seq_file *m,
3364 unsigned int flags)
77271ce4 3365{
441dae8f 3366 bool tgid = flags & TRACE_ITER_RECORD_TGID;
b11fb737
SRV
3367 const char tgid_space[] = " ";
3368 const char space[] = " ";
3369
3370 seq_printf(m, "# %s _-----=> irqs-off\n",
3371 tgid ? tgid_space : space);
3372 seq_printf(m, "# %s / _----=> need-resched\n",
3373 tgid ? tgid_space : space);
3374 seq_printf(m, "# %s| / _---=> hardirq/softirq\n",
3375 tgid ? tgid_space : space);
3376 seq_printf(m, "# %s|| / _--=> preempt-depth\n",
3377 tgid ? tgid_space : space);
3378 seq_printf(m, "# %s||| / delay\n",
3379 tgid ? tgid_space : space);
3380 seq_printf(m, "# TASK-PID CPU#%s|||| TIMESTAMP FUNCTION\n",
3381 tgid ? " TGID " : space);
3382 seq_printf(m, "# | | | %s|||| | |\n",
3383 tgid ? " | " : space);
77271ce4 3384}
bc0c38d1 3385
62b915f1 3386void
bc0c38d1
SR
3387print_trace_header(struct seq_file *m, struct trace_iterator *iter)
3388{
983f938a 3389 unsigned long sym_flags = (global_trace.trace_flags & TRACE_ITER_SYM_MASK);
12883efb
SRRH
3390 struct trace_buffer *buf = iter->trace_buffer;
3391 struct trace_array_cpu *data = per_cpu_ptr(buf->data, buf->cpu);
2b6080f2 3392 struct tracer *type = iter->trace;
39eaf7ef
SR
3393 unsigned long entries;
3394 unsigned long total;
bc0c38d1
SR
3395 const char *name = "preemption";
3396
d840f718 3397 name = type->name;
bc0c38d1 3398
12883efb 3399 get_total_entries(buf, &total, &entries);
bc0c38d1 3400
888b55dc 3401 seq_printf(m, "# %s latency trace v1.1.5 on %s\n",
bc0c38d1 3402 name, UTS_RELEASE);
888b55dc 3403 seq_puts(m, "# -----------------------------------"
bc0c38d1 3404 "---------------------------------\n");
888b55dc 3405 seq_printf(m, "# latency: %lu us, #%lu/%lu, CPU#%d |"
bc0c38d1 3406 " (M:%s VP:%d, KP:%d, SP:%d HP:%d",
57f50be1 3407 nsecs_to_usecs(data->saved_latency),
bc0c38d1 3408 entries,
4c11d7ae 3409 total,
12883efb 3410 buf->cpu,
bc0c38d1
SR
3411#if defined(CONFIG_PREEMPT_NONE)
3412 "server",
3413#elif defined(CONFIG_PREEMPT_VOLUNTARY)
3414 "desktop",
b5c21b45 3415#elif defined(CONFIG_PREEMPT)
bc0c38d1
SR
3416 "preempt",
3417#else
3418 "unknown",
3419#endif
3420 /* These are reserved for later use */
3421 0, 0, 0, 0);
3422#ifdef CONFIG_SMP
3423 seq_printf(m, " #P:%d)\n", num_online_cpus());
3424#else
3425 seq_puts(m, ")\n");
3426#endif
888b55dc
KM
3427 seq_puts(m, "# -----------------\n");
3428 seq_printf(m, "# | task: %.16s-%d "
bc0c38d1 3429 "(uid:%d nice:%ld policy:%ld rt_prio:%ld)\n",
d20b92ab
EB
3430 data->comm, data->pid,
3431 from_kuid_munged(seq_user_ns(m), data->uid), data->nice,
bc0c38d1 3432 data->policy, data->rt_priority);
888b55dc 3433 seq_puts(m, "# -----------------\n");
bc0c38d1
SR
3434
3435 if (data->critical_start) {
888b55dc 3436 seq_puts(m, "# => started at: ");
214023c3
SR
3437 seq_print_ip_sym(&iter->seq, data->critical_start, sym_flags);
3438 trace_print_seq(m, &iter->seq);
888b55dc 3439 seq_puts(m, "\n# => ended at: ");
214023c3
SR
3440 seq_print_ip_sym(&iter->seq, data->critical_end, sym_flags);
3441 trace_print_seq(m, &iter->seq);
8248ac05 3442 seq_puts(m, "\n#\n");
bc0c38d1
SR
3443 }
3444
888b55dc 3445 seq_puts(m, "#\n");
bc0c38d1
SR
3446}
3447
a309720c
SR
3448static void test_cpu_buff_start(struct trace_iterator *iter)
3449{
3450 struct trace_seq *s = &iter->seq;
983f938a 3451 struct trace_array *tr = iter->tr;
a309720c 3452
983f938a 3453 if (!(tr->trace_flags & TRACE_ITER_ANNOTATE))
12ef7d44
SR
3454 return;
3455
3456 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
3457 return;
3458
4dbbe2d8
MK
3459 if (cpumask_available(iter->started) &&
3460 cpumask_test_cpu(iter->cpu, iter->started))
a309720c
SR
3461 return;
3462
12883efb 3463 if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries)
2f26ebd5
SR
3464 return;
3465
4dbbe2d8 3466 if (cpumask_available(iter->started))
919cd979 3467 cpumask_set_cpu(iter->cpu, iter->started);
b0dfa978
FW
3468
3469 /* Don't print started cpu buffer for the first entry of the trace */
3470 if (iter->idx > 1)
3471 trace_seq_printf(s, "##### CPU %u buffer started ####\n",
3472 iter->cpu);
a309720c
SR
3473}
3474
2c4f035f 3475static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
bc0c38d1 3476{
983f938a 3477 struct trace_array *tr = iter->tr;
214023c3 3478 struct trace_seq *s = &iter->seq;
983f938a 3479 unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
4e3c3333 3480 struct trace_entry *entry;
f633cef0 3481 struct trace_event *event;
bc0c38d1 3482
4e3c3333 3483 entry = iter->ent;
dd0e545f 3484
a309720c
SR
3485 test_cpu_buff_start(iter);
3486
c4a8e8be 3487 event = ftrace_find_event(entry->type);
bc0c38d1 3488
983f938a 3489 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
19a7fe20
SRRH
3490 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
3491 trace_print_lat_context(iter);
3492 else
3493 trace_print_context(iter);
c4a8e8be 3494 }
bc0c38d1 3495
19a7fe20
SRRH
3496 if (trace_seq_has_overflowed(s))
3497 return TRACE_TYPE_PARTIAL_LINE;
3498
268ccda0 3499 if (event)
a9a57763 3500 return event->funcs->trace(iter, sym_flags, event);
d9793bd8 3501
19a7fe20 3502 trace_seq_printf(s, "Unknown type %d\n", entry->type);
02b67518 3503
19a7fe20 3504 return trace_handle_return(s);
bc0c38d1
SR
3505}
3506
2c4f035f 3507static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
f9896bf3 3508{
983f938a 3509 struct trace_array *tr = iter->tr;
f9896bf3
IM
3510 struct trace_seq *s = &iter->seq;
3511 struct trace_entry *entry;
f633cef0 3512 struct trace_event *event;
f9896bf3
IM
3513
3514 entry = iter->ent;
dd0e545f 3515
983f938a 3516 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO)
19a7fe20
SRRH
3517 trace_seq_printf(s, "%d %d %llu ",
3518 entry->pid, iter->cpu, iter->ts);
3519
3520 if (trace_seq_has_overflowed(s))
3521 return TRACE_TYPE_PARTIAL_LINE;
f9896bf3 3522
f633cef0 3523 event = ftrace_find_event(entry->type);
268ccda0 3524 if (event)
a9a57763 3525 return event->funcs->raw(iter, 0, event);
d9793bd8 3526
19a7fe20 3527 trace_seq_printf(s, "%d ?\n", entry->type);
777e208d 3528
19a7fe20 3529 return trace_handle_return(s);
f9896bf3
IM
3530}
3531
2c4f035f 3532static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
5e3ca0ec 3533{
983f938a 3534 struct trace_array *tr = iter->tr;
5e3ca0ec
IM
3535 struct trace_seq *s = &iter->seq;
3536 unsigned char newline = '\n';
3537 struct trace_entry *entry;
f633cef0 3538 struct trace_event *event;
5e3ca0ec
IM
3539
3540 entry = iter->ent;
dd0e545f 3541
983f938a 3542 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
19a7fe20
SRRH
3543 SEQ_PUT_HEX_FIELD(s, entry->pid);
3544 SEQ_PUT_HEX_FIELD(s, iter->cpu);
3545 SEQ_PUT_HEX_FIELD(s, iter->ts);
3546 if (trace_seq_has_overflowed(s))
3547 return TRACE_TYPE_PARTIAL_LINE;
c4a8e8be 3548 }
5e3ca0ec 3549
f633cef0 3550 event = ftrace_find_event(entry->type);
268ccda0 3551 if (event) {
a9a57763 3552 enum print_line_t ret = event->funcs->hex(iter, 0, event);
d9793bd8
ACM
3553 if (ret != TRACE_TYPE_HANDLED)
3554 return ret;
3555 }
7104f300 3556
19a7fe20 3557 SEQ_PUT_FIELD(s, newline);
5e3ca0ec 3558
19a7fe20 3559 return trace_handle_return(s);
5e3ca0ec
IM
3560}
3561
2c4f035f 3562static enum print_line_t print_bin_fmt(struct trace_iterator *iter)
cb0f12aa 3563{
983f938a 3564 struct trace_array *tr = iter->tr;
cb0f12aa
IM
3565 struct trace_seq *s = &iter->seq;
3566 struct trace_entry *entry;
f633cef0 3567 struct trace_event *event;
cb0f12aa
IM
3568
3569 entry = iter->ent;
dd0e545f 3570
983f938a 3571 if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
19a7fe20
SRRH
3572 SEQ_PUT_FIELD(s, entry->pid);
3573 SEQ_PUT_FIELD(s, iter->cpu);
3574 SEQ_PUT_FIELD(s, iter->ts);
3575 if (trace_seq_has_overflowed(s))
3576 return TRACE_TYPE_PARTIAL_LINE;
c4a8e8be 3577 }
cb0f12aa 3578
f633cef0 3579 event = ftrace_find_event(entry->type);
a9a57763
SR
3580 return event ? event->funcs->binary(iter, 0, event) :
3581 TRACE_TYPE_HANDLED;
cb0f12aa
IM
3582}
3583
62b915f1 3584int trace_empty(struct trace_iterator *iter)
bc0c38d1 3585{
6d158a81 3586 struct ring_buffer_iter *buf_iter;
bc0c38d1
SR
3587 int cpu;
3588
9aba60fe 3589 /* If we are looking at one CPU buffer, only check that one */
ae3b5093 3590 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
9aba60fe 3591 cpu = iter->cpu_file;
6d158a81
SR
3592 buf_iter = trace_buffer_iter(iter, cpu);
3593 if (buf_iter) {
3594 if (!ring_buffer_iter_empty(buf_iter))
9aba60fe
SR
3595 return 0;
3596 } else {
12883efb 3597 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
9aba60fe
SR
3598 return 0;
3599 }
3600 return 1;
3601 }
3602
ab46428c 3603 for_each_tracing_cpu(cpu) {
6d158a81
SR
3604 buf_iter = trace_buffer_iter(iter, cpu);
3605 if (buf_iter) {
3606 if (!ring_buffer_iter_empty(buf_iter))
d769041f
SR
3607 return 0;
3608 } else {
12883efb 3609 if (!ring_buffer_empty_cpu(iter->trace_buffer->buffer, cpu))
d769041f
SR
3610 return 0;
3611 }
bc0c38d1 3612 }
d769041f 3613
797d3712 3614 return 1;
bc0c38d1
SR
3615}
3616
4f535968 3617/* Called with trace_event_read_lock() held. */
955b61e5 3618enum print_line_t print_trace_line(struct trace_iterator *iter)
f9896bf3 3619{
983f938a
SRRH
3620 struct trace_array *tr = iter->tr;
3621 unsigned long trace_flags = tr->trace_flags;
2c4f035f
FW
3622 enum print_line_t ret;
3623
19a7fe20
SRRH
3624 if (iter->lost_events) {
3625 trace_seq_printf(&iter->seq, "CPU:%d [LOST %lu EVENTS]\n",
3626 iter->cpu, iter->lost_events);
3627 if (trace_seq_has_overflowed(&iter->seq))
3628 return TRACE_TYPE_PARTIAL_LINE;
3629 }
bc21b478 3630
2c4f035f
FW
3631 if (iter->trace && iter->trace->print_line) {
3632 ret = iter->trace->print_line(iter);
3633 if (ret != TRACE_TYPE_UNHANDLED)
3634 return ret;
3635 }
72829bc3 3636
09ae7234
SRRH
3637 if (iter->ent->type == TRACE_BPUTS &&
3638 trace_flags & TRACE_ITER_PRINTK &&
3639 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
3640 return trace_print_bputs_msg_only(iter);
3641
48ead020
FW
3642 if (iter->ent->type == TRACE_BPRINT &&
3643 trace_flags & TRACE_ITER_PRINTK &&
3644 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
5ef841f6 3645 return trace_print_bprintk_msg_only(iter);
48ead020 3646
66896a85
FW
3647 if (iter->ent->type == TRACE_PRINT &&
3648 trace_flags & TRACE_ITER_PRINTK &&
3649 trace_flags & TRACE_ITER_PRINTK_MSGONLY)
5ef841f6 3650 return trace_print_printk_msg_only(iter);
66896a85 3651
cb0f12aa
IM
3652 if (trace_flags & TRACE_ITER_BIN)
3653 return print_bin_fmt(iter);
3654
5e3ca0ec
IM
3655 if (trace_flags & TRACE_ITER_HEX)
3656 return print_hex_fmt(iter);
3657
f9896bf3
IM
3658 if (trace_flags & TRACE_ITER_RAW)
3659 return print_raw_fmt(iter);
3660
f9896bf3
IM
3661 return print_trace_fmt(iter);
3662}
3663
7e9a49ef
JO
3664void trace_latency_header(struct seq_file *m)
3665{
3666 struct trace_iterator *iter = m->private;
983f938a 3667 struct trace_array *tr = iter->tr;
7e9a49ef
JO
3668
3669 /* print nothing if the buffers are empty */
3670 if (trace_empty(iter))
3671 return;
3672
3673 if (iter->iter_flags & TRACE_FILE_LAT_FMT)
3674 print_trace_header(m, iter);
3675
983f938a 3676 if (!(tr->trace_flags & TRACE_ITER_VERBOSE))
7e9a49ef
JO
3677 print_lat_help_header(m);
3678}
3679
62b915f1
JO
3680void trace_default_header(struct seq_file *m)
3681{
3682 struct trace_iterator *iter = m->private;
983f938a
SRRH
3683 struct trace_array *tr = iter->tr;
3684 unsigned long trace_flags = tr->trace_flags;
62b915f1 3685
f56e7f8e
JO
3686 if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
3687 return;
3688
62b915f1
JO
3689 if (iter->iter_flags & TRACE_FILE_LAT_FMT) {
3690 /* print nothing if the buffers are empty */
3691 if (trace_empty(iter))
3692 return;
3693 print_trace_header(m, iter);
3694 if (!(trace_flags & TRACE_ITER_VERBOSE))
3695 print_lat_help_header(m);
3696 } else {
77271ce4
SR
3697 if (!(trace_flags & TRACE_ITER_VERBOSE)) {
3698 if (trace_flags & TRACE_ITER_IRQ_INFO)
441dae8f
JF
3699 print_func_help_header_irq(iter->trace_buffer,
3700 m, trace_flags);
77271ce4 3701 else
441dae8f
JF
3702 print_func_help_header(iter->trace_buffer, m,
3703 trace_flags);
77271ce4 3704 }
62b915f1
JO
3705 }
3706}
3707
e0a413f6
SR
3708static void test_ftrace_alive(struct seq_file *m)
3709{
3710 if (!ftrace_is_dead())
3711 return;
d79ac28f
RV
3712 seq_puts(m, "# WARNING: FUNCTION TRACING IS CORRUPTED\n"
3713 "# MAY BE MISSING FUNCTION EVENTS\n");
e0a413f6
SR
3714}
3715
d8741e2e 3716#ifdef CONFIG_TRACER_MAX_TRACE
f1affcaa 3717static void show_snapshot_main_help(struct seq_file *m)
d8741e2e 3718{
d79ac28f
RV
3719 seq_puts(m, "# echo 0 > snapshot : Clears and frees snapshot buffer\n"
3720 "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
3721 "# Takes a snapshot of the main buffer.\n"
3722 "# echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)\n"
3723 "# (Doesn't have to be '2' works with any number that\n"
3724 "# is not a '0' or '1')\n");
d8741e2e 3725}
f1affcaa
SRRH
3726
3727static void show_snapshot_percpu_help(struct seq_file *m)
3728{
fa6f0cc7 3729 seq_puts(m, "# echo 0 > snapshot : Invalid for per_cpu snapshot file.\n");
f1affcaa 3730#ifdef CONFIG_RING_BUFFER_ALLOW_SWAP
d79ac28f
RV
3731 seq_puts(m, "# echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.\n"
3732 "# Takes a snapshot of the main buffer for this cpu.\n");
f1affcaa 3733#else
d79ac28f
RV
3734 seq_puts(m, "# echo 1 > snapshot : Not supported with this kernel.\n"
3735 "# Must use main snapshot file to allocate.\n");
f1affcaa 3736#endif
d79ac28f
RV
3737 seq_puts(m, "# echo 2 > snapshot : Clears this cpu's snapshot buffer (but does not allocate)\n"
3738 "# (Doesn't have to be '2' works with any number that\n"
3739 "# is not a '0' or '1')\n");
f1affcaa
SRRH
3740}
3741
d8741e2e
SRRH
3742static void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter)
3743{
45ad21ca 3744 if (iter->tr->allocated_snapshot)
fa6f0cc7 3745 seq_puts(m, "#\n# * Snapshot is allocated *\n#\n");
d8741e2e 3746 else
fa6f0cc7 3747 seq_puts(m, "#\n# * Snapshot is freed *\n#\n");
d8741e2e 3748
fa6f0cc7 3749 seq_puts(m, "# Snapshot commands:\n");
f1affcaa
SRRH
3750 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
3751 show_snapshot_main_help(m);
3752 else
3753 show_snapshot_percpu_help(m);
d8741e2e
SRRH
3754}
3755#else
3756/* Should never be called */
3757static inline void print_snapshot_help(struct seq_file *m, struct trace_iterator *iter) { }
3758#endif
3759
bc0c38d1
SR
3760static int s_show(struct seq_file *m, void *v)
3761{
3762 struct trace_iterator *iter = v;
a63ce5b3 3763 int ret;
bc0c38d1
SR
3764
3765 if (iter->ent == NULL) {
3766 if (iter->tr) {
3767 seq_printf(m, "# tracer: %s\n", iter->trace->name);
3768 seq_puts(m, "#\n");
e0a413f6 3769 test_ftrace_alive(m);
bc0c38d1 3770 }
d8741e2e
SRRH
3771 if (iter->snapshot && trace_empty(iter))
3772 print_snapshot_help(m, iter);
3773 else if (iter->trace && iter->trace->print_header)
8bba1bf5 3774 iter->trace->print_header(m);
62b915f1
JO
3775 else
3776 trace_default_header(m);
3777
a63ce5b3
SR
3778 } else if (iter->leftover) {
3779 /*
3780 * If we filled the seq_file buffer earlier, we
3781 * want to just show it now.
3782 */
3783 ret = trace_print_seq(m, &iter->seq);
3784
3785 /* ret should this time be zero, but you never know */
3786 iter->leftover = ret;
3787
bc0c38d1 3788 } else {
f9896bf3 3789 print_trace_line(iter);
a63ce5b3
SR
3790 ret = trace_print_seq(m, &iter->seq);
3791 /*
3792 * If we overflow the seq_file buffer, then it will
3793 * ask us for this data again at start up.
3794 * Use that instead.
3795 * ret is 0 if seq_file write succeeded.
3796 * -1 otherwise.
3797 */
3798 iter->leftover = ret;
bc0c38d1
SR
3799 }
3800
3801 return 0;
3802}
3803
649e9c70
ON
3804/*
3805 * Should be used after trace_array_get(), trace_types_lock
3806 * ensures that i_cdev was already initialized.
3807 */
3808static inline int tracing_get_cpu(struct inode *inode)
3809{
3810 if (inode->i_cdev) /* See trace_create_cpu_file() */
3811 return (long)inode->i_cdev - 1;
3812 return RING_BUFFER_ALL_CPUS;
3813}
3814
88e9d34c 3815static const struct seq_operations tracer_seq_ops = {
4bf39a94
IM
3816 .start = s_start,
3817 .next = s_next,
3818 .stop = s_stop,
3819 .show = s_show,
bc0c38d1
SR
3820};
3821
e309b41d 3822static struct trace_iterator *
6484c71c 3823__tracing_open(struct inode *inode, struct file *file, bool snapshot)
bc0c38d1 3824{
6484c71c 3825 struct trace_array *tr = inode->i_private;
bc0c38d1 3826 struct trace_iterator *iter;
50e18b94 3827 int cpu;
bc0c38d1 3828
85a2f9b4
SR
3829 if (tracing_disabled)
3830 return ERR_PTR(-ENODEV);
60a11774 3831
50e18b94 3832 iter = __seq_open_private(file, &tracer_seq_ops, sizeof(*iter));
85a2f9b4
SR
3833 if (!iter)
3834 return ERR_PTR(-ENOMEM);
bc0c38d1 3835
72917235 3836 iter->buffer_iter = kcalloc(nr_cpu_ids, sizeof(*iter->buffer_iter),
6d158a81 3837 GFP_KERNEL);
93574fcc
DC
3838 if (!iter->buffer_iter)
3839 goto release;
3840
d7350c3f
FW
3841 /*
3842 * We make a copy of the current tracer to avoid concurrent
3843 * changes on it while we are reading.
3844 */
bc0c38d1 3845 mutex_lock(&trace_types_lock);
d7350c3f 3846 iter->trace = kzalloc(sizeof(*iter->trace), GFP_KERNEL);
85a2f9b4 3847 if (!iter->trace)
d7350c3f 3848 goto fail;
85a2f9b4 3849
2b6080f2 3850 *iter->trace = *tr->current_trace;
d7350c3f 3851
79f55997 3852 if (!zalloc_cpumask_var(&iter->started, GFP_KERNEL))
b0dfa978
FW
3853 goto fail;
3854
12883efb
SRRH
3855 iter->tr = tr;
3856
3857#ifdef CONFIG_TRACER_MAX_TRACE
2b6080f2
SR
3858 /* Currently only the top directory has a snapshot */
3859 if (tr->current_trace->print_max || snapshot)
12883efb 3860 iter->trace_buffer = &tr->max_buffer;
bc0c38d1 3861 else
12883efb
SRRH
3862#endif
3863 iter->trace_buffer = &tr->trace_buffer;
debdd57f 3864 iter->snapshot = snapshot;
bc0c38d1 3865 iter->pos = -1;
6484c71c 3866 iter->cpu_file = tracing_get_cpu(inode);
d7350c3f 3867 mutex_init(&iter->mutex);
bc0c38d1 3868
8bba1bf5
MM
3869 /* Notify the tracer early; before we stop tracing. */
3870 if (iter->trace && iter->trace->open)
a93751ca 3871 iter->trace->open(iter);
8bba1bf5 3872
12ef7d44 3873 /* Annotate start of buffers if we had overruns */
12883efb 3874 if (ring_buffer_overruns(iter->trace_buffer->buffer))
12ef7d44
SR
3875 iter->iter_flags |= TRACE_FILE_ANNOTATE;
3876
8be0709f 3877 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
58e8eedf 3878 if (trace_clocks[tr->clock_id].in_ns)
8be0709f
DS
3879 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
3880
debdd57f
HT
3881 /* stop the trace while dumping if we are not opening "snapshot" */
3882 if (!iter->snapshot)
2b6080f2 3883 tracing_stop_tr(tr);
2f26ebd5 3884
ae3b5093 3885 if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
b04cc6b1 3886 for_each_tracing_cpu(cpu) {
b04cc6b1 3887 iter->buffer_iter[cpu] =
12883efb 3888 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
72c9ddfd
DM
3889 }
3890 ring_buffer_read_prepare_sync();
3891 for_each_tracing_cpu(cpu) {
3892 ring_buffer_read_start(iter->buffer_iter[cpu]);
2f26ebd5 3893 tracing_iter_reset(iter, cpu);
b04cc6b1
FW
3894 }
3895 } else {
3896 cpu = iter->cpu_file;
3928a8a2 3897 iter->buffer_iter[cpu] =
12883efb 3898 ring_buffer_read_prepare(iter->trace_buffer->buffer, cpu);
72c9ddfd
DM
3899 ring_buffer_read_prepare_sync();
3900 ring_buffer_read_start(iter->buffer_iter[cpu]);
2f26ebd5 3901 tracing_iter_reset(iter, cpu);
3928a8a2
SR
3902 }
3903
bc0c38d1
SR
3904 mutex_unlock(&trace_types_lock);
3905
bc0c38d1 3906 return iter;
3928a8a2 3907
d7350c3f 3908 fail:
3928a8a2 3909 mutex_unlock(&trace_types_lock);
d7350c3f 3910 kfree(iter->trace);
6d158a81 3911 kfree(iter->buffer_iter);
93574fcc 3912release:
50e18b94
JO
3913 seq_release_private(inode, file);
3914 return ERR_PTR(-ENOMEM);
bc0c38d1
SR
3915}
3916
3917int tracing_open_generic(struct inode *inode, struct file *filp)
3918{
60a11774
SR
3919 if (tracing_disabled)
3920 return -ENODEV;
3921
bc0c38d1
SR
3922 filp->private_data = inode->i_private;
3923 return 0;
3924}
3925
2e86421d
GB
3926bool tracing_is_disabled(void)
3927{
3928 return (tracing_disabled) ? true: false;
3929}
3930
7b85af63
SRRH
3931/*
3932 * Open and update trace_array ref count.
3933 * Must have the current trace_array passed to it.
3934 */
dcc30223 3935static int tracing_open_generic_tr(struct inode *inode, struct file *filp)
7b85af63
SRRH
3936{
3937 struct trace_array *tr = inode->i_private;
3938
3939 if (tracing_disabled)
3940 return -ENODEV;
3941
3942 if (trace_array_get(tr) < 0)
3943 return -ENODEV;
3944
3945 filp->private_data = inode->i_private;
3946
3947 return 0;
7b85af63
SRRH
3948}
3949
4fd27358 3950static int tracing_release(struct inode *inode, struct file *file)
bc0c38d1 3951{
6484c71c 3952 struct trace_array *tr = inode->i_private;
907f2784 3953 struct seq_file *m = file->private_data;
4acd4d00 3954 struct trace_iterator *iter;
3928a8a2 3955 int cpu;
bc0c38d1 3956
ff451961 3957 if (!(file->f_mode & FMODE_READ)) {
6484c71c 3958 trace_array_put(tr);
4acd4d00 3959 return 0;
ff451961 3960 }
4acd4d00 3961
6484c71c 3962 /* Writes do not use seq_file */
4acd4d00 3963 iter = m->private;
bc0c38d1 3964 mutex_lock(&trace_types_lock);
a695cb58 3965
3928a8a2
SR
3966 for_each_tracing_cpu(cpu) {
3967 if (iter->buffer_iter[cpu])
3968 ring_buffer_read_finish(iter->buffer_iter[cpu]);
3969 }
3970
bc0c38d1
SR
3971 if (iter->trace && iter->trace->close)
3972 iter->trace->close(iter);
3973
debdd57f
HT
3974 if (!iter->snapshot)
3975 /* reenable tracing if it was previously enabled */
2b6080f2 3976 tracing_start_tr(tr);
f77d09a3
AL
3977
3978 __trace_array_put(tr);
3979
bc0c38d1
SR
3980 mutex_unlock(&trace_types_lock);
3981
d7350c3f 3982 mutex_destroy(&iter->mutex);
b0dfa978 3983 free_cpumask_var(iter->started);
d7350c3f 3984 kfree(iter->trace);
6d158a81 3985 kfree(iter->buffer_iter);
50e18b94 3986 seq_release_private(inode, file);
ff451961 3987
bc0c38d1
SR
3988 return 0;
3989}
3990
7b85af63
SRRH
3991static int tracing_release_generic_tr(struct inode *inode, struct file *file)
3992{
3993 struct trace_array *tr = inode->i_private;
3994
3995 trace_array_put(tr);
bc0c38d1
SR
3996 return 0;
3997}
3998
7b85af63
SRRH
3999static int tracing_single_release_tr(struct inode *inode, struct file *file)
4000{
4001 struct trace_array *tr = inode->i_private;
4002
4003 trace_array_put(tr);
4004
4005 return single_release(inode, file);
4006}
4007
bc0c38d1
SR
4008static int tracing_open(struct inode *inode, struct file *file)
4009{
6484c71c 4010 struct trace_array *tr = inode->i_private;
85a2f9b4
SR
4011 struct trace_iterator *iter;
4012 int ret = 0;
bc0c38d1 4013
ff451961
SRRH
4014 if (trace_array_get(tr) < 0)
4015 return -ENODEV;
4016
4acd4d00 4017 /* If this file was open for write, then erase contents */
6484c71c
ON
4018 if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
4019 int cpu = tracing_get_cpu(inode);
4a8cc91d
BY
4020 struct trace_buffer *trace_buf = &tr->trace_buffer;
4021
4022#ifdef CONFIG_TRACER_MAX_TRACE
4023 if (tr->current_trace->print_max)
4024 trace_buf = &tr->max_buffer;
4025#endif
6484c71c
ON
4026
4027 if (cpu == RING_BUFFER_ALL_CPUS)
4a8cc91d 4028 tracing_reset_online_cpus(trace_buf);
4acd4d00 4029 else
4a8cc91d 4030 tracing_reset(trace_buf, cpu);
4acd4d00 4031 }
bc0c38d1 4032
4acd4d00 4033 if (file->f_mode & FMODE_READ) {
6484c71c 4034 iter = __tracing_open(inode, file, false);
4acd4d00
SR
4035 if (IS_ERR(iter))
4036 ret = PTR_ERR(iter);
983f938a 4037 else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
4acd4d00
SR
4038 iter->iter_flags |= TRACE_FILE_LAT_FMT;
4039 }
ff451961
SRRH
4040
4041 if (ret < 0)
4042 trace_array_put(tr);
4043
bc0c38d1
SR
4044 return ret;
4045}
4046
607e2ea1
SRRH
4047/*
4048 * Some tracers are not suitable for instance buffers.
4049 * A tracer is always available for the global array (toplevel)
4050 * or if it explicitly states that it is.
4051 */
4052static bool
4053trace_ok_for_array(struct tracer *t, struct trace_array *tr)
4054{
4055 return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances;
4056}
4057
4058/* Find the next tracer that this trace array may use */
4059static struct tracer *
4060get_tracer_for_array(struct trace_array *tr, struct tracer *t)
4061{
4062 while (t && !trace_ok_for_array(t, tr))
4063 t = t->next;
4064
4065 return t;
4066}
4067
e309b41d 4068static void *
bc0c38d1
SR
4069t_next(struct seq_file *m, void *v, loff_t *pos)
4070{
607e2ea1 4071 struct trace_array *tr = m->private;
f129e965 4072 struct tracer *t = v;
bc0c38d1
SR
4073
4074 (*pos)++;
4075
4076 if (t)
607e2ea1 4077 t = get_tracer_for_array(tr, t->next);
bc0c38d1 4078
bc0c38d1
SR
4079 return t;
4080}
4081
4082static void *t_start(struct seq_file *m, loff_t *pos)
4083{
607e2ea1 4084 struct trace_array *tr = m->private;
f129e965 4085 struct tracer *t;
bc0c38d1
SR
4086 loff_t l = 0;
4087
4088 mutex_lock(&trace_types_lock);
607e2ea1
SRRH
4089
4090 t = get_tracer_for_array(tr, trace_types);
4091 for (; t && l < *pos; t = t_next(m, t, &l))
4092 ;
bc0c38d1
SR
4093
4094 return t;
4095}
4096
4097static void t_stop(struct seq_file *m, void *p)
4098{
4099 mutex_unlock(&trace_types_lock);
4100}
4101
4102static int t_show(struct seq_file *m, void *v)
4103{
4104 struct tracer *t = v;
4105
4106 if (!t)
4107 return 0;
4108
fa6f0cc7 4109 seq_puts(m, t->name);
bc0c38d1
SR
4110 if (t->next)
4111 seq_putc(m, ' ');
4112 else
4113 seq_putc(m, '\n');
4114
4115 return 0;
4116}
4117
88e9d34c 4118static const struct seq_operations show_traces_seq_ops = {
4bf39a94
IM
4119 .start = t_start,
4120 .next = t_next,
4121 .stop = t_stop,
4122 .show = t_show,
bc0c38d1
SR
4123};
4124
4125static int show_traces_open(struct inode *inode, struct file *file)
4126{
607e2ea1
SRRH
4127 struct trace_array *tr = inode->i_private;
4128 struct seq_file *m;
4129 int ret;
4130
60a11774
SR
4131 if (tracing_disabled)
4132 return -ENODEV;
4133
607e2ea1
SRRH
4134 ret = seq_open(file, &show_traces_seq_ops);
4135 if (ret)
4136 return ret;
4137
4138 m = file->private_data;
4139 m->private = tr;
4140
4141 return 0;
bc0c38d1
SR
4142}
4143
4acd4d00
SR
4144static ssize_t
4145tracing_write_stub(struct file *filp, const char __user *ubuf,
4146 size_t count, loff_t *ppos)
4147{
4148 return count;
4149}
4150
098c879e 4151loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
364829b1 4152{
098c879e
SRRH
4153 int ret;
4154
364829b1 4155 if (file->f_mode & FMODE_READ)
098c879e 4156 ret = seq_lseek(file, offset, whence);
364829b1 4157 else
098c879e
SRRH
4158 file->f_pos = ret = 0;
4159
4160 return ret;
364829b1
SP
4161}
4162
5e2336a0 4163static const struct file_operations tracing_fops = {
4bf39a94
IM
4164 .open = tracing_open,
4165 .read = seq_read,
4acd4d00 4166 .write = tracing_write_stub,
098c879e 4167 .llseek = tracing_lseek,
4bf39a94 4168 .release = tracing_release,
bc0c38d1
SR
4169};
4170
5e2336a0 4171static const struct file_operations show_traces_fops = {
c7078de1
IM
4172 .open = show_traces_open,
4173 .read = seq_read,
4174 .release = seq_release,
b444786f 4175 .llseek = seq_lseek,
c7078de1
IM
4176};
4177
36dfe925
IM
4178/*
4179 * The tracer itself will not take this lock, but still we want
4180 * to provide a consistent cpumask to user-space:
4181 */
4182static DEFINE_MUTEX(tracing_cpumask_update_lock);
4183
4184/*
4185 * Temporary storage for the character representation of the
4186 * CPU bitmask (and one more byte for the newline):
4187 */
4188static char mask_str[NR_CPUS + 1];
4189
c7078de1
IM
4190static ssize_t
4191tracing_cpumask_read(struct file *filp, char __user *ubuf,
4192 size_t count, loff_t *ppos)
4193{
ccfe9e42 4194 struct trace_array *tr = file_inode(filp)->i_private;
36dfe925 4195 int len;
c7078de1
IM
4196
4197 mutex_lock(&tracing_cpumask_update_lock);
36dfe925 4198
1a40243b
TH
4199 len = snprintf(mask_str, count, "%*pb\n",
4200 cpumask_pr_args(tr->tracing_cpumask));
4201 if (len >= count) {
36dfe925
IM
4202 count = -EINVAL;
4203 goto out_err;
4204 }
36dfe925
IM
4205 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, NR_CPUS+1);
4206
4207out_err:
c7078de1
IM
4208 mutex_unlock(&tracing_cpumask_update_lock);
4209
4210 return count;
4211}
4212
4213static ssize_t
4214tracing_cpumask_write(struct file *filp, const char __user *ubuf,
4215 size_t count, loff_t *ppos)
4216{
ccfe9e42 4217 struct trace_array *tr = file_inode(filp)->i_private;
9e01c1b7 4218 cpumask_var_t tracing_cpumask_new;
2b6080f2 4219 int err, cpu;
9e01c1b7
RR
4220
4221 if (!alloc_cpumask_var(&tracing_cpumask_new, GFP_KERNEL))
4222 return -ENOMEM;
c7078de1 4223
9e01c1b7 4224 err = cpumask_parse_user(ubuf, count, tracing_cpumask_new);
c7078de1 4225 if (err)
36dfe925
IM
4226 goto err_unlock;
4227
215368e8
LZ
4228 mutex_lock(&tracing_cpumask_update_lock);
4229
a5e25883 4230 local_irq_disable();
0b9b12c1 4231 arch_spin_lock(&tr->max_lock);
ab46428c 4232 for_each_tracing_cpu(cpu) {
36dfe925
IM
4233 /*
4234 * Increase/decrease the disabled counter if we are
4235 * about to flip a bit in the cpumask:
4236 */
ccfe9e42 4237 if (cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
9e01c1b7 4238 !cpumask_test_cpu(cpu, tracing_cpumask_new)) {
12883efb
SRRH
4239 atomic_inc(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
4240 ring_buffer_record_disable_cpu(tr->trace_buffer.buffer, cpu);
36dfe925 4241 }
ccfe9e42 4242 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask) &&
9e01c1b7 4243 cpumask_test_cpu(cpu, tracing_cpumask_new)) {
12883efb
SRRH
4244 atomic_dec(&per_cpu_ptr(tr->trace_buffer.data, cpu)->disabled);
4245 ring_buffer_record_enable_cpu(tr->trace_buffer.buffer, cpu);
36dfe925
IM
4246 }
4247 }
0b9b12c1 4248 arch_spin_unlock(&tr->max_lock);
a5e25883 4249 local_irq_enable();
36dfe925 4250
ccfe9e42 4251 cpumask_copy(tr->tracing_cpumask, tracing_cpumask_new);
36dfe925
IM
4252
4253 mutex_unlock(&tracing_cpumask_update_lock);
9e01c1b7 4254 free_cpumask_var(tracing_cpumask_new);
c7078de1
IM
4255
4256 return count;
36dfe925
IM
4257
4258err_unlock:
215368e8 4259 free_cpumask_var(tracing_cpumask_new);
36dfe925
IM
4260
4261 return err;
c7078de1
IM
4262}
4263
5e2336a0 4264static const struct file_operations tracing_cpumask_fops = {
ccfe9e42 4265 .open = tracing_open_generic_tr,
c7078de1
IM
4266 .read = tracing_cpumask_read,
4267 .write = tracing_cpumask_write,
ccfe9e42 4268 .release = tracing_release_generic_tr,
b444786f 4269 .llseek = generic_file_llseek,
bc0c38d1
SR
4270};
4271
fdb372ed 4272static int tracing_trace_options_show(struct seq_file *m, void *v)
bc0c38d1 4273{
d8e83d26 4274 struct tracer_opt *trace_opts;
2b6080f2 4275 struct trace_array *tr = m->private;
d8e83d26 4276 u32 tracer_flags;
d8e83d26 4277 int i;
adf9f195 4278
d8e83d26 4279 mutex_lock(&trace_types_lock);
2b6080f2
SR
4280 tracer_flags = tr->current_trace->flags->val;
4281 trace_opts = tr->current_trace->flags->opts;
d8e83d26 4282
bc0c38d1 4283 for (i = 0; trace_options[i]; i++) {
983f938a 4284 if (tr->trace_flags & (1 << i))
fdb372ed 4285 seq_printf(m, "%s\n", trace_options[i]);
bc0c38d1 4286 else
fdb372ed 4287 seq_printf(m, "no%s\n", trace_options[i]);
bc0c38d1
SR
4288 }
4289
adf9f195
FW
4290 for (i = 0; trace_opts[i].name; i++) {
4291 if (tracer_flags & trace_opts[i].bit)
fdb372ed 4292 seq_printf(m, "%s\n", trace_opts[i].name);
adf9f195 4293 else
fdb372ed 4294 seq_printf(m, "no%s\n", trace_opts[i].name);
adf9f195 4295 }
d8e83d26 4296 mutex_unlock(&trace_types_lock);
adf9f195 4297
fdb372ed 4298 return 0;
bc0c38d1 4299}
bc0c38d1 4300
8c1a49ae 4301static int __set_tracer_option(struct trace_array *tr,
8d18eaaf
LZ
4302 struct tracer_flags *tracer_flags,
4303 struct tracer_opt *opts, int neg)
4304{
d39cdd20 4305 struct tracer *trace = tracer_flags->trace;
8d18eaaf 4306 int ret;
bc0c38d1 4307
8c1a49ae 4308 ret = trace->set_flag(tr, tracer_flags->val, opts->bit, !neg);
8d18eaaf
LZ
4309 if (ret)
4310 return ret;
4311
4312 if (neg)
4313 tracer_flags->val &= ~opts->bit;
4314 else
4315 tracer_flags->val |= opts->bit;
4316 return 0;
bc0c38d1
SR
4317}
4318
adf9f195 4319/* Try to assign a tracer specific option */
8c1a49ae 4320static int set_tracer_option(struct trace_array *tr, char *cmp, int neg)
adf9f195 4321{
8c1a49ae 4322 struct tracer *trace = tr->current_trace;
7770841e 4323 struct tracer_flags *tracer_flags = trace->flags;
adf9f195 4324 struct tracer_opt *opts = NULL;
8d18eaaf 4325 int i;
adf9f195 4326
7770841e
Z
4327 for (i = 0; tracer_flags->opts[i].name; i++) {
4328 opts = &tracer_flags->opts[i];
adf9f195 4329
8d18eaaf 4330 if (strcmp(cmp, opts->name) == 0)
8c1a49ae 4331 return __set_tracer_option(tr, trace->flags, opts, neg);
adf9f195 4332 }
adf9f195 4333
8d18eaaf 4334 return -EINVAL;
adf9f195
FW
4335}
4336
613f04a0
SRRH
4337/* Some tracers require overwrite to stay enabled */
4338int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
4339{
4340 if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set)
4341 return -1;
4342
4343 return 0;
4344}
4345
2b6080f2 4346int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled)
af4617bd
SR
4347{
4348 /* do nothing if flag is already set */
983f938a 4349 if (!!(tr->trace_flags & mask) == !!enabled)
613f04a0
SRRH
4350 return 0;
4351
4352 /* Give the tracer a chance to approve the change */
2b6080f2 4353 if (tr->current_trace->flag_changed)
bf6065b5 4354 if (tr->current_trace->flag_changed(tr, mask, !!enabled))
613f04a0 4355 return -EINVAL;
af4617bd
SR
4356
4357 if (enabled)
983f938a 4358 tr->trace_flags |= mask;
af4617bd 4359 else
983f938a 4360 tr->trace_flags &= ~mask;
e870e9a1
LZ
4361
4362 if (mask == TRACE_ITER_RECORD_CMD)
4363 trace_event_enable_cmd_record(enabled);
750912fa 4364
d914ba37
JF
4365 if (mask == TRACE_ITER_RECORD_TGID) {
4366 if (!tgid_map)
4367 tgid_map = kzalloc((PID_MAX_DEFAULT + 1) * sizeof(*tgid_map),
4368 GFP_KERNEL);
4369 if (!tgid_map) {
4370 tr->trace_flags &= ~TRACE_ITER_RECORD_TGID;
4371 return -ENOMEM;
4372 }
4373
4374 trace_event_enable_tgid_record(enabled);
4375 }
4376
c37775d5
SR
4377 if (mask == TRACE_ITER_EVENT_FORK)
4378 trace_event_follow_fork(tr, enabled);
4379
1e10486f
NK
4380 if (mask == TRACE_ITER_FUNC_FORK)
4381 ftrace_pid_follow_fork(tr, enabled);
4382
80902822 4383 if (mask == TRACE_ITER_OVERWRITE) {
12883efb 4384 ring_buffer_change_overwrite(tr->trace_buffer.buffer, enabled);
80902822 4385#ifdef CONFIG_TRACER_MAX_TRACE
12883efb 4386 ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled);
80902822
SRRH
4387#endif
4388 }
81698831 4389
b9f9108c 4390 if (mask == TRACE_ITER_PRINTK) {
81698831 4391 trace_printk_start_stop_comm(enabled);
b9f9108c
SRRH
4392 trace_printk_control(enabled);
4393 }
613f04a0
SRRH
4394
4395 return 0;
af4617bd
SR
4396}
4397
2b6080f2 4398static int trace_set_options(struct trace_array *tr, char *option)
bc0c38d1 4399{
8d18eaaf 4400 char *cmp;
bc0c38d1 4401 int neg = 0;
613f04a0 4402 int ret = -ENODEV;
bc0c38d1 4403 int i;
a4d1e688 4404 size_t orig_len = strlen(option);
bc0c38d1 4405
7bcfaf54 4406 cmp = strstrip(option);
bc0c38d1 4407
8d18eaaf 4408 if (strncmp(cmp, "no", 2) == 0) {
bc0c38d1
SR
4409 neg = 1;
4410 cmp += 2;
4411 }
4412
69d34da2
SRRH
4413 mutex_lock(&trace_types_lock);
4414
bc0c38d1 4415 for (i = 0; trace_options[i]; i++) {
8d18eaaf 4416 if (strcmp(cmp, trace_options[i]) == 0) {
2b6080f2 4417 ret = set_tracer_flag(tr, 1 << i, !neg);
bc0c38d1
SR
4418 break;
4419 }
4420 }
adf9f195
FW
4421
4422 /* If no option could be set, test the specific tracer options */
69d34da2 4423 if (!trace_options[i])
8c1a49ae 4424 ret = set_tracer_option(tr, cmp, neg);
69d34da2
SRRH
4425
4426 mutex_unlock(&trace_types_lock);
bc0c38d1 4427
a4d1e688
JW
4428 /*
4429 * If the first trailing whitespace is replaced with '\0' by strstrip,
4430 * turn it back into a space.
4431 */
4432 if (orig_len > strlen(option))
4433 option[strlen(option)] = ' ';
4434
7bcfaf54
SR
4435 return ret;
4436}
4437
a4d1e688
JW
4438static void __init apply_trace_boot_options(void)
4439{
4440 char *buf = trace_boot_options_buf;
4441 char *option;
4442
4443 while (true) {
4444 option = strsep(&buf, ",");
4445
4446 if (!option)
4447 break;
a4d1e688 4448
43ed3843
SRRH
4449 if (*option)
4450 trace_set_options(&global_trace, option);
a4d1e688
JW
4451
4452 /* Put back the comma to allow this to be called again */
4453 if (buf)
4454 *(buf - 1) = ',';
4455 }
4456}
4457
7bcfaf54
SR
4458static ssize_t
4459tracing_trace_options_write(struct file *filp, const char __user *ubuf,
4460 size_t cnt, loff_t *ppos)
4461{
2b6080f2
SR
4462 struct seq_file *m = filp->private_data;
4463 struct trace_array *tr = m->private;
7bcfaf54 4464 char buf[64];
613f04a0 4465 int ret;
7bcfaf54
SR
4466
4467 if (cnt >= sizeof(buf))
4468 return -EINVAL;
4469
4afe6495 4470 if (copy_from_user(buf, ubuf, cnt))
7bcfaf54
SR
4471 return -EFAULT;
4472
a8dd2176
SR
4473 buf[cnt] = 0;
4474
2b6080f2 4475 ret = trace_set_options(tr, buf);
613f04a0
SRRH
4476 if (ret < 0)
4477 return ret;
7bcfaf54 4478
cf8517cf 4479 *ppos += cnt;
bc0c38d1
SR
4480
4481 return cnt;
4482}
4483
fdb372ed
LZ
4484static int tracing_trace_options_open(struct inode *inode, struct file *file)
4485{
7b85af63 4486 struct trace_array *tr = inode->i_private;
f77d09a3 4487 int ret;
7b85af63 4488
fdb372ed
LZ
4489 if (tracing_disabled)
4490 return -ENODEV;
2b6080f2 4491
7b85af63
SRRH
4492 if (trace_array_get(tr) < 0)
4493 return -ENODEV;
4494
f77d09a3
AL
4495 ret = single_open(file, tracing_trace_options_show, inode->i_private);
4496 if (ret < 0)
4497 trace_array_put(tr);
4498
4499 return ret;
fdb372ed
LZ
4500}
4501
5e2336a0 4502static const struct file_operations tracing_iter_fops = {
fdb372ed
LZ
4503 .open = tracing_trace_options_open,
4504 .read = seq_read,
4505 .llseek = seq_lseek,
7b85af63 4506 .release = tracing_single_release_tr,
ee6bce52 4507 .write = tracing_trace_options_write,
bc0c38d1
SR
4508};
4509
7bd2f24c
IM
4510static const char readme_msg[] =
4511 "tracing mini-HOWTO:\n\n"
22f45649
SRRH
4512 "# echo 0 > tracing_on : quick way to disable tracing\n"
4513 "# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
4514 " Important files:\n"
4515 " trace\t\t\t- The static contents of the buffer\n"
4516 "\t\t\t To clear the buffer write into this file: echo > trace\n"
4517 " trace_pipe\t\t- A consuming read to see the contents of the buffer\n"
4518 " current_tracer\t- function and latency tracers\n"
4519 " available_tracers\t- list of configured tracers for current_tracer\n"
4520 " buffer_size_kb\t- view and modify size of per cpu buffer\n"
4521 " buffer_total_size_kb - view total size of all cpu buffers\n\n"
4522 " trace_clock\t\t-change the clock used to order events\n"
4523 " local: Per cpu clock but may not be synced across CPUs\n"
4524 " global: Synced across CPUs but slows tracing down.\n"
4525 " counter: Not a clock, but just an increment\n"
4526 " uptime: Jiffy counter from time of boot\n"
4527 " perf: Same clock that perf events use\n"
4528#ifdef CONFIG_X86_64
4529 " x86-tsc: TSC cycle counter\n"
4530#endif
4531 "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n"
fa32e855 4532 "\n trace_marker_raw\t\t- Writes into this file writes binary data into the kernel buffer\n"
22f45649
SRRH
4533 " tracing_cpumask\t- Limit which CPUs to trace\n"
4534 " instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
4535 "\t\t\t Remove sub-buffer with rmdir\n"
4536 " trace_options\t\t- Set format or modify how tracing happens\n"
71485c45
SRRH
4537 "\t\t\t Disable an option by adding a suffix 'no' to the\n"
4538 "\t\t\t option name\n"
939c7a4f 4539 " saved_cmdlines_size\t- echo command number in here to store comm-pid list\n"
22f45649
SRRH
4540#ifdef CONFIG_DYNAMIC_FTRACE
4541 "\n available_filter_functions - list of functions that can be filtered on\n"
71485c45
SRRH
4542 " set_ftrace_filter\t- echo function name in here to only trace these\n"
4543 "\t\t\t functions\n"
60f1d5e3 4544 "\t accepts: func_full_name or glob-matching-pattern\n"
71485c45
SRRH
4545 "\t modules: Can select a group via module\n"
4546 "\t Format: :mod:<module-name>\n"
4547 "\t example: echo :mod:ext3 > set_ftrace_filter\n"
4548 "\t triggers: a command to perform when function is hit\n"
4549 "\t Format: <function>:<trigger>[:count]\n"
4550 "\t trigger: traceon, traceoff\n"
4551 "\t\t enable_event:<system>:<event>\n"
4552 "\t\t disable_event:<system>:<event>\n"
22f45649 4553#ifdef CONFIG_STACKTRACE
71485c45 4554 "\t\t stacktrace\n"
22f45649
SRRH
4555#endif
4556#ifdef CONFIG_TRACER_SNAPSHOT
71485c45 4557 "\t\t snapshot\n"
22f45649 4558#endif
17a280ea
SRRH
4559 "\t\t dump\n"
4560 "\t\t cpudump\n"
71485c45
SRRH
4561 "\t example: echo do_fault:traceoff > set_ftrace_filter\n"
4562 "\t echo do_trap:traceoff:3 > set_ftrace_filter\n"
4563 "\t The first one will disable tracing every time do_fault is hit\n"
4564 "\t The second will disable tracing at most 3 times when do_trap is hit\n"
4565 "\t The first time do trap is hit and it disables tracing, the\n"
4566 "\t counter will decrement to 2. If tracing is already disabled,\n"
4567 "\t the counter will not decrement. It only decrements when the\n"
4568 "\t trigger did work\n"
4569 "\t To remove trigger without count:\n"
4570 "\t echo '!<function>:<trigger> > set_ftrace_filter\n"
4571 "\t To remove trigger with a count:\n"
4572 "\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
22f45649 4573 " set_ftrace_notrace\t- echo function name in here to never trace.\n"
71485c45
SRRH
4574 "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
4575 "\t modules: Can select a group via module command :mod:\n"
4576 "\t Does not accept triggers\n"
22f45649
SRRH
4577#endif /* CONFIG_DYNAMIC_FTRACE */
4578#ifdef CONFIG_FUNCTION_TRACER
71485c45
SRRH
4579 " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
4580 "\t\t (function)\n"
22f45649
SRRH
4581#endif
4582#ifdef CONFIG_FUNCTION_GRAPH_TRACER
4583 " set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
d048a8c7 4584 " set_graph_notrace\t- Do not trace the nested calls of a function (function_graph)\n"
22f45649
SRRH
4585 " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
4586#endif
4587#ifdef CONFIG_TRACER_SNAPSHOT
71485c45
SRRH
4588 "\n snapshot\t\t- Like 'trace' but shows the content of the static\n"
4589 "\t\t\t snapshot buffer. Read the contents for more\n"
4590 "\t\t\t information\n"
22f45649 4591#endif
991821c8 4592#ifdef CONFIG_STACK_TRACER
22f45649
SRRH
4593 " stack_trace\t\t- Shows the max stack trace when active\n"
4594 " stack_max_size\t- Shows current max stack size that was traced\n"
71485c45
SRRH
4595 "\t\t\t Write into this file to reset the max size (trigger a\n"
4596 "\t\t\t new trace)\n"
22f45649 4597#ifdef CONFIG_DYNAMIC_FTRACE
71485c45
SRRH
4598 " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
4599 "\t\t\t traces\n"
22f45649 4600#endif
991821c8 4601#endif /* CONFIG_STACK_TRACER */
6b0b7551 4602#ifdef CONFIG_KPROBE_EVENTS
86425625
MH
4603 " kprobe_events\t\t- Add/remove/show the kernel dynamic events\n"
4604 "\t\t\t Write into this file to define/undefine new trace events.\n"
4605#endif
6b0b7551 4606#ifdef CONFIG_UPROBE_EVENTS
86425625
MH
4607 " uprobe_events\t\t- Add/remove/show the userspace dynamic events\n"
4608 "\t\t\t Write into this file to define/undefine new trace events.\n"
4609#endif
6b0b7551 4610#if defined(CONFIG_KPROBE_EVENTS) || defined(CONFIG_UPROBE_EVENTS)
86425625 4611 "\t accepts: event-definitions (one definition per line)\n"
c3ca46ef
MH
4612 "\t Format: p[:[<group>/]<event>] <place> [<args>]\n"
4613 "\t r[maxactive][:[<group>/]<event>] <place> [<args>]\n"
86425625 4614 "\t -:[<group>/]<event>\n"
6b0b7551 4615#ifdef CONFIG_KPROBE_EVENTS
86425625 4616 "\t place: [<module>:]<symbol>[+<offset>]|<memaddr>\n"
35b6f55a 4617 "place (kretprobe): [<module>:]<symbol>[+<offset>]|<memaddr>\n"
86425625 4618#endif
6b0b7551 4619#ifdef CONFIG_UPROBE_EVENTS
86425625
MH
4620 "\t place: <path>:<offset>\n"
4621#endif
4622 "\t args: <name>=fetcharg[:type]\n"
4623 "\t fetcharg: %<register>, @<address>, @<symbol>[+|-<offset>],\n"
4624 "\t $stack<index>, $stack, $retval, $comm\n"
4625 "\t type: s8/16/32/64, u8/16/32/64, x8/16/32/64, string,\n"
4626 "\t b<bit-width>@<bit-offset>/<container-size>\n"
4627#endif
26f25564
TZ
4628 " events/\t\t- Directory containing all trace event subsystems:\n"
4629 " enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
4630 " events/<system>/\t- Directory containing all trace events for <system>:\n"
71485c45
SRRH
4631 " enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
4632 "\t\t\t events\n"
26f25564 4633 " filter\t\t- If set, only events passing filter are traced\n"
71485c45
SRRH
4634 " events/<system>/<event>/\t- Directory containing control files for\n"
4635 "\t\t\t <event>:\n"
26f25564
TZ
4636 " enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
4637 " filter\t\t- If set, only events passing filter are traced\n"
4638 " trigger\t\t- If set, a command to perform when event is hit\n"
71485c45
SRRH
4639 "\t Format: <trigger>[:count][if <filter>]\n"
4640 "\t trigger: traceon, traceoff\n"
4641 "\t enable_event:<system>:<event>\n"
4642 "\t disable_event:<system>:<event>\n"
d0bad49b
TZ
4643#ifdef CONFIG_HIST_TRIGGERS
4644 "\t enable_hist:<system>:<event>\n"
4645 "\t disable_hist:<system>:<event>\n"
4646#endif
26f25564 4647#ifdef CONFIG_STACKTRACE
71485c45 4648 "\t\t stacktrace\n"
26f25564
TZ
4649#endif
4650#ifdef CONFIG_TRACER_SNAPSHOT
71485c45 4651 "\t\t snapshot\n"
7ef224d1
TZ
4652#endif
4653#ifdef CONFIG_HIST_TRIGGERS
4654 "\t\t hist (see below)\n"
26f25564 4655#endif
71485c45
SRRH
4656 "\t example: echo traceoff > events/block/block_unplug/trigger\n"
4657 "\t echo traceoff:3 > events/block/block_unplug/trigger\n"
4658 "\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
4659 "\t events/block/block_unplug/trigger\n"
4660 "\t The first disables tracing every time block_unplug is hit.\n"
4661 "\t The second disables tracing the first 3 times block_unplug is hit.\n"
4662 "\t The third enables the kmalloc event the first 3 times block_unplug\n"
4663 "\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
4664 "\t Like function triggers, the counter is only decremented if it\n"
4665 "\t enabled or disabled tracing.\n"
4666 "\t To remove a trigger without a count:\n"
4667 "\t echo '!<trigger> > <system>/<event>/trigger\n"
4668 "\t To remove a trigger with a count:\n"
4669 "\t echo '!<trigger>:0 > <system>/<event>/trigger\n"
4670 "\t Filters can be ignored when removing a trigger.\n"
7ef224d1
TZ
4671#ifdef CONFIG_HIST_TRIGGERS
4672 " hist trigger\t- If set, event hits are aggregated into a hash table\n"
76a3b0c8 4673 "\t Format: hist:keys=<field1[,field2,...]>\n"
f2606835 4674 "\t [:values=<field1[,field2,...]>]\n"
e62347d2 4675 "\t [:sort=<field1[,field2,...]>]\n"
7ef224d1 4676 "\t [:size=#entries]\n"
e86ae9ba 4677 "\t [:pause][:continue][:clear]\n"
5463bfda 4678 "\t [:name=histname1]\n"
7ef224d1
TZ
4679 "\t [if <filter>]\n\n"
4680 "\t When a matching event is hit, an entry is added to a hash\n"
f2606835
TZ
4681 "\t table using the key(s) and value(s) named, and the value of a\n"
4682 "\t sum called 'hitcount' is incremented. Keys and values\n"
4683 "\t correspond to fields in the event's format description. Keys\n"
69a0200c
TZ
4684 "\t can be any field, or the special string 'stacktrace'.\n"
4685 "\t Compound keys consisting of up to two fields can be specified\n"
4686 "\t by the 'keys' keyword. Values must correspond to numeric\n"
4687 "\t fields. Sort keys consisting of up to two fields can be\n"
4688 "\t specified using the 'sort' keyword. The sort direction can\n"
4689 "\t be modified by appending '.descending' or '.ascending' to a\n"
4690 "\t sort field. The 'size' parameter can be used to specify more\n"
5463bfda
TZ
4691 "\t or fewer than the default 2048 entries for the hashtable size.\n"
4692 "\t If a hist trigger is given a name using the 'name' parameter,\n"
4693 "\t its histogram data will be shared with other triggers of the\n"
4694 "\t same name, and trigger hits will update this common data.\n\n"
7ef224d1 4695 "\t Reading the 'hist' file for the event will dump the hash\n"
52a7f16d
TZ
4696 "\t table in its entirety to stdout. If there are multiple hist\n"
4697 "\t triggers attached to an event, there will be a table for each\n"
5463bfda
TZ
4698 "\t trigger in the output. The table displayed for a named\n"
4699 "\t trigger will be the same as any other instance having the\n"
4700 "\t same name. The default format used to display a given field\n"
4701 "\t can be modified by appending any of the following modifiers\n"
4702 "\t to the field name, as applicable:\n\n"
c6afad49
TZ
4703 "\t .hex display a number as a hex value\n"
4704 "\t .sym display an address as a symbol\n"
6b4827ad 4705 "\t .sym-offset display an address as a symbol and offset\n"
31696198
TZ
4706 "\t .execname display a common_pid as a program name\n"
4707 "\t .syscall display a syscall id as a syscall name\n\n"
4b94f5b7 4708 "\t .log2 display log2 value rather than raw number\n\n"
83e99914
TZ
4709 "\t The 'pause' parameter can be used to pause an existing hist\n"
4710 "\t trigger or to start a hist trigger but not log any events\n"
4711 "\t until told to do so. 'continue' can be used to start or\n"
4712 "\t restart a paused hist trigger.\n\n"
e86ae9ba
TZ
4713 "\t The 'clear' parameter will clear the contents of a running\n"
4714 "\t hist trigger and leave its current paused/active state\n"
4715 "\t unchanged.\n\n"
d0bad49b
TZ
4716 "\t The enable_hist and disable_hist triggers can be used to\n"
4717 "\t have one event conditionally start and stop another event's\n"
4718 "\t already-attached hist trigger. The syntax is analagous to\n"
4719 "\t the enable_event and disable_event triggers.\n"
7ef224d1 4720#endif
7bd2f24c
IM
4721;
4722
4723static ssize_t
4724tracing_readme_read(struct file *filp, char __user *ubuf,
4725 size_t cnt, loff_t *ppos)
4726{
4727 return simple_read_from_buffer(ubuf, cnt, ppos,
4728 readme_msg, strlen(readme_msg));
4729}
4730
5e2336a0 4731static const struct file_operations tracing_readme_fops = {
c7078de1
IM
4732 .open = tracing_open_generic,
4733 .read = tracing_readme_read,
b444786f 4734 .llseek = generic_file_llseek,
7bd2f24c
IM
4735};
4736
99c621d7
MS
4737static void *saved_tgids_next(struct seq_file *m, void *v, loff_t *pos)
4738{
4739 int *ptr = v;
4740
4741 if (*pos || m->count)
4742 ptr++;
4743
4744 (*pos)++;
4745
4746 for (; ptr <= &tgid_map[PID_MAX_DEFAULT]; ptr++) {
4747 if (trace_find_tgid(*ptr))
4748 return ptr;
4749 }
4750
4751 return NULL;
4752}
4753
4754static void *saved_tgids_start(struct seq_file *m, loff_t *pos)
4755{
4756 void *v;
4757 loff_t l = 0;
4758
4759 if (!tgid_map)
4760 return NULL;
4761
4762 v = &tgid_map[0];
4763 while (l <= *pos) {
4764 v = saved_tgids_next(m, v, &l);
4765 if (!v)
4766 return NULL;
4767 }
4768
4769 return v;
4770}
4771
4772static void saved_tgids_stop(struct seq_file *m, void *v)
4773{
4774}
4775
4776static int saved_tgids_show(struct seq_file *m, void *v)
4777{
4778 int pid = (int *)v - tgid_map;
4779
4780 seq_printf(m, "%d %d\n", pid, trace_find_tgid(pid));
4781 return 0;
4782}
4783
4784static const struct seq_operations tracing_saved_tgids_seq_ops = {
4785 .start = saved_tgids_start,
4786 .stop = saved_tgids_stop,
4787 .next = saved_tgids_next,
4788 .show = saved_tgids_show,
4789};
4790
4791static int tracing_saved_tgids_open(struct inode *inode, struct file *filp)
4792{
4793 if (tracing_disabled)
4794 return -ENODEV;
4795
4796 return seq_open(filp, &tracing_saved_tgids_seq_ops);
4797}
4798
4799
4800static const struct file_operations tracing_saved_tgids_fops = {
4801 .open = tracing_saved_tgids_open,
4802 .read = seq_read,
4803 .llseek = seq_lseek,
4804 .release = seq_release,
4805};
4806
42584c81
YY
4807static void *saved_cmdlines_next(struct seq_file *m, void *v, loff_t *pos)
4808{
4809 unsigned int *ptr = v;
69abe6a5 4810
42584c81
YY
4811 if (*pos || m->count)
4812 ptr++;
69abe6a5 4813
42584c81 4814 (*pos)++;
69abe6a5 4815
939c7a4f
YY
4816 for (; ptr < &savedcmd->map_cmdline_to_pid[savedcmd->cmdline_num];
4817 ptr++) {
42584c81
YY
4818 if (*ptr == -1 || *ptr == NO_CMDLINE_MAP)
4819 continue;
69abe6a5 4820
42584c81
YY
4821 return ptr;
4822 }
69abe6a5 4823
42584c81
YY
4824 return NULL;
4825}
4826
4827static void *saved_cmdlines_start(struct seq_file *m, loff_t *pos)
4828{
4829 void *v;
4830 loff_t l = 0;
69abe6a5 4831
4c27e756
SRRH
4832 preempt_disable();
4833 arch_spin_lock(&trace_cmdline_lock);
4834
939c7a4f 4835 v = &savedcmd->map_cmdline_to_pid[0];
42584c81
YY
4836 while (l <= *pos) {
4837 v = saved_cmdlines_next(m, v, &l);
4838 if (!v)
4839 return NULL;
69abe6a5
AP
4840 }
4841
42584c81
YY
4842 return v;
4843}
4844
4845static void saved_cmdlines_stop(struct seq_file *m, void *v)
4846{
4c27e756
SRRH
4847 arch_spin_unlock(&trace_cmdline_lock);
4848 preempt_enable();
42584c81 4849}
69abe6a5 4850
42584c81
YY
4851static int saved_cmdlines_show(struct seq_file *m, void *v)
4852{
4853 char buf[TASK_COMM_LEN];
4854 unsigned int *pid = v;
69abe6a5 4855
4c27e756 4856 __trace_find_cmdline(*pid, buf);
42584c81
YY
4857 seq_printf(m, "%d %s\n", *pid, buf);
4858 return 0;
4859}
4860
4861static const struct seq_operations tracing_saved_cmdlines_seq_ops = {
4862 .start = saved_cmdlines_start,
4863 .next = saved_cmdlines_next,
4864 .stop = saved_cmdlines_stop,
4865 .show = saved_cmdlines_show,
4866};
4867
4868static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
4869{
4870 if (tracing_disabled)
4871 return -ENODEV;
4872
4873 return seq_open(filp, &tracing_saved_cmdlines_seq_ops);
69abe6a5
AP
4874}
4875
4876static const struct file_operations tracing_saved_cmdlines_fops = {
42584c81
YY
4877 .open = tracing_saved_cmdlines_open,
4878 .read = seq_read,
4879 .llseek = seq_lseek,
4880 .release = seq_release,
69abe6a5
AP
4881};
4882
939c7a4f
YY
4883static ssize_t
4884tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
4885 size_t cnt, loff_t *ppos)
4886{
4887 char buf[64];
4888 int r;
4889
4890 arch_spin_lock(&trace_cmdline_lock);
a6af8fbf 4891 r = scnprintf(buf, sizeof(buf), "%u\n", savedcmd->cmdline_num);
939c7a4f
YY
4892 arch_spin_unlock(&trace_cmdline_lock);
4893
4894 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
4895}
4896
4897static void free_saved_cmdlines_buffer(struct saved_cmdlines_buffer *s)
4898{
4899 kfree(s->saved_cmdlines);
4900 kfree(s->map_cmdline_to_pid);
4901 kfree(s);
4902}
4903
4904static int tracing_resize_saved_cmdlines(unsigned int val)
4905{
4906 struct saved_cmdlines_buffer *s, *savedcmd_temp;
4907
a6af8fbf 4908 s = kmalloc(sizeof(*s), GFP_KERNEL);
939c7a4f
YY
4909 if (!s)
4910 return -ENOMEM;
4911
4912 if (allocate_cmdlines_buffer(val, s) < 0) {
4913 kfree(s);
4914 return -ENOMEM;
4915 }
4916
4917 arch_spin_lock(&trace_cmdline_lock);
4918 savedcmd_temp = savedcmd;
4919 savedcmd = s;
4920 arch_spin_unlock(&trace_cmdline_lock);
4921 free_saved_cmdlines_buffer(savedcmd_temp);
4922
4923 return 0;
4924}
4925
4926static ssize_t
4927tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
4928 size_t cnt, loff_t *ppos)
4929{
4930 unsigned long val;
4931 int ret;
4932
4933 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
4934 if (ret)
4935 return ret;
4936
4937 /* must have at least 1 entry or less than PID_MAX_DEFAULT */
4938 if (!val || val > PID_MAX_DEFAULT)
4939 return -EINVAL;
4940
4941 ret = tracing_resize_saved_cmdlines((unsigned int)val);
4942 if (ret < 0)
4943 return ret;
4944
4945 *ppos += cnt;
4946
4947 return cnt;
4948}
4949
4950static const struct file_operations tracing_saved_cmdlines_size_fops = {
4951 .open = tracing_open_generic,
4952 .read = tracing_saved_cmdlines_size_read,
4953 .write = tracing_saved_cmdlines_size_write,
4954};
4955
681bec03 4956#ifdef CONFIG_TRACE_EVAL_MAP_FILE
23bf8cb8 4957static union trace_eval_map_item *
f57a4143 4958update_eval_map(union trace_eval_map_item *ptr)
9828413d 4959{
00f4b652 4960 if (!ptr->map.eval_string) {
9828413d
SRRH
4961 if (ptr->tail.next) {
4962 ptr = ptr->tail.next;
4963 /* Set ptr to the next real item (skip head) */
4964 ptr++;
4965 } else
4966 return NULL;
4967 }
4968 return ptr;
4969}
4970
f57a4143 4971static void *eval_map_next(struct seq_file *m, void *v, loff_t *pos)
9828413d 4972{
23bf8cb8 4973 union trace_eval_map_item *ptr = v;
9828413d
SRRH
4974
4975 /*
4976 * Paranoid! If ptr points to end, we don't want to increment past it.
4977 * This really should never happen.
4978 */
f57a4143 4979 ptr = update_eval_map(ptr);
9828413d
SRRH
4980 if (WARN_ON_ONCE(!ptr))
4981 return NULL;
4982
4983 ptr++;
4984
4985 (*pos)++;
4986
f57a4143 4987 ptr = update_eval_map(ptr);
9828413d
SRRH
4988
4989 return ptr;
4990}
4991
f57a4143 4992static void *eval_map_start(struct seq_file *m, loff_t *pos)
9828413d 4993{
23bf8cb8 4994 union trace_eval_map_item *v;
9828413d
SRRH
4995 loff_t l = 0;
4996
1793ed93 4997 mutex_lock(&trace_eval_mutex);
9828413d 4998
23bf8cb8 4999 v = trace_eval_maps;
9828413d
SRRH
5000 if (v)
5001 v++;
5002
5003 while (v && l < *pos) {
f57a4143 5004 v = eval_map_next(m, v, &l);
9828413d
SRRH
5005 }
5006
5007 return v;
5008}
5009
f57a4143 5010static void eval_map_stop(struct seq_file *m, void *v)
9828413d 5011{
1793ed93 5012 mutex_unlock(&trace_eval_mutex);
9828413d
SRRH
5013}
5014
f57a4143 5015static int eval_map_show(struct seq_file *m, void *v)
9828413d 5016{
23bf8cb8 5017 union trace_eval_map_item *ptr = v;
9828413d
SRRH
5018
5019 seq_printf(m, "%s %ld (%s)\n",
00f4b652 5020 ptr->map.eval_string, ptr->map.eval_value,
9828413d
SRRH
5021 ptr->map.system);
5022
5023 return 0;
5024}
5025
f57a4143
JL
5026static const struct seq_operations tracing_eval_map_seq_ops = {
5027 .start = eval_map_start,
5028 .next = eval_map_next,
5029 .stop = eval_map_stop,
5030 .show = eval_map_show,
9828413d
SRRH
5031};
5032
f57a4143 5033static int tracing_eval_map_open(struct inode *inode, struct file *filp)
9828413d
SRRH
5034{
5035 if (tracing_disabled)
5036 return -ENODEV;
5037
f57a4143 5038 return seq_open(filp, &tracing_eval_map_seq_ops);
9828413d
SRRH
5039}
5040
f57a4143
JL
5041static const struct file_operations tracing_eval_map_fops = {
5042 .open = tracing_eval_map_open,
9828413d
SRRH
5043 .read = seq_read,
5044 .llseek = seq_lseek,
5045 .release = seq_release,
5046};
5047
23bf8cb8 5048static inline union trace_eval_map_item *
5f60b351 5049trace_eval_jmp_to_tail(union trace_eval_map_item *ptr)
9828413d
SRRH
5050{
5051 /* Return tail of array given the head */
5052 return ptr + ptr->head.length + 1;
5053}
5054
5055static void
f57a4143 5056trace_insert_eval_map_file(struct module *mod, struct trace_eval_map **start,
9828413d
SRRH
5057 int len)
5058{
00f4b652
JL
5059 struct trace_eval_map **stop;
5060 struct trace_eval_map **map;
23bf8cb8
JL
5061 union trace_eval_map_item *map_array;
5062 union trace_eval_map_item *ptr;
9828413d
SRRH
5063
5064 stop = start + len;
5065
5066 /*
23bf8cb8 5067 * The trace_eval_maps contains the map plus a head and tail item,
9828413d
SRRH
5068 * where the head holds the module and length of array, and the
5069 * tail holds a pointer to the next list.
5070 */
5071 map_array = kmalloc(sizeof(*map_array) * (len + 2), GFP_KERNEL);
5072 if (!map_array) {
f57a4143 5073 pr_warn("Unable to allocate trace eval mapping\n");
9828413d
SRRH
5074 return;
5075 }
5076
1793ed93 5077 mutex_lock(&trace_eval_mutex);
9828413d 5078
23bf8cb8
JL
5079 if (!trace_eval_maps)
5080 trace_eval_maps = map_array;
9828413d 5081 else {
23bf8cb8 5082 ptr = trace_eval_maps;
9828413d 5083 for (;;) {
5f60b351 5084 ptr = trace_eval_jmp_to_tail(ptr);
9828413d
SRRH
5085 if (!ptr->tail.next)
5086 break;
5087 ptr = ptr->tail.next;
5088
5089 }
5090 ptr->tail.next = map_array;
5091 }
5092 map_array->head.mod = mod;
5093 map_array->head.length = len;
5094 map_array++;
5095
5096 for (map = start; (unsigned long)map < (unsigned long)stop; map++) {
5097 map_array->map = **map;
5098 map_array++;
5099 }
5100 memset(map_array, 0, sizeof(*map_array));
5101
1793ed93 5102 mutex_unlock(&trace_eval_mutex);
9828413d
SRRH
5103}
5104
f57a4143 5105static void trace_create_eval_file(struct dentry *d_tracer)
9828413d 5106{
681bec03 5107 trace_create_file("eval_map", 0444, d_tracer,
f57a4143 5108 NULL, &tracing_eval_map_fops);
9828413d
SRRH
5109}
5110
681bec03 5111#else /* CONFIG_TRACE_EVAL_MAP_FILE */
f57a4143
JL
5112static inline void trace_create_eval_file(struct dentry *d_tracer) { }
5113static inline void trace_insert_eval_map_file(struct module *mod,
00f4b652 5114 struct trace_eval_map **start, int len) { }
681bec03 5115#endif /* !CONFIG_TRACE_EVAL_MAP_FILE */
9828413d 5116
f57a4143 5117static void trace_insert_eval_map(struct module *mod,
00f4b652 5118 struct trace_eval_map **start, int len)
0c564a53 5119{
00f4b652 5120 struct trace_eval_map **map;
0c564a53
SRRH
5121
5122 if (len <= 0)
5123 return;
5124
5125 map = start;
5126
f57a4143 5127 trace_event_eval_update(map, len);
9828413d 5128
f57a4143 5129 trace_insert_eval_map_file(mod, start, len);
0c564a53
SRRH
5130}
5131
bc0c38d1
SR
5132static ssize_t
5133tracing_set_trace_read(struct file *filp, char __user *ubuf,
5134 size_t cnt, loff_t *ppos)
5135{
2b6080f2 5136 struct trace_array *tr = filp->private_data;
ee6c2c1b 5137 char buf[MAX_TRACER_SIZE+2];
bc0c38d1
SR
5138 int r;
5139
5140 mutex_lock(&trace_types_lock);
2b6080f2 5141 r = sprintf(buf, "%s\n", tr->current_trace->name);
bc0c38d1
SR
5142 mutex_unlock(&trace_types_lock);
5143
4bf39a94 5144 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
bc0c38d1
SR
5145}
5146
b6f11df2
ACM
5147int tracer_init(struct tracer *t, struct trace_array *tr)
5148{
12883efb 5149 tracing_reset_online_cpus(&tr->trace_buffer);
b6f11df2
ACM
5150 return t->init(tr);
5151}
5152
12883efb 5153static void set_buffer_entries(struct trace_buffer *buf, unsigned long val)
438ced17
VN
5154{
5155 int cpu;
737223fb 5156
438ced17 5157 for_each_tracing_cpu(cpu)
12883efb 5158 per_cpu_ptr(buf->data, cpu)->entries = val;
438ced17
VN
5159}
5160
12883efb 5161#ifdef CONFIG_TRACER_MAX_TRACE
d60da506 5162/* resize @tr's buffer to the size of @size_tr's entries */
12883efb
SRRH
5163static int resize_buffer_duplicate_size(struct trace_buffer *trace_buf,
5164 struct trace_buffer *size_buf, int cpu_id)
d60da506
HT
5165{
5166 int cpu, ret = 0;
5167
5168 if (cpu_id == RING_BUFFER_ALL_CPUS) {
5169 for_each_tracing_cpu(cpu) {
12883efb
SRRH
5170 ret = ring_buffer_resize(trace_buf->buffer,
5171 per_cpu_ptr(size_buf->data, cpu)->entries, cpu);
d60da506
HT
5172 if (ret < 0)
5173 break;
12883efb
SRRH
5174 per_cpu_ptr(trace_buf->data, cpu)->entries =
5175 per_cpu_ptr(size_buf->data, cpu)->entries;
d60da506
HT
5176 }
5177 } else {
12883efb
SRRH
5178 ret = ring_buffer_resize(trace_buf->buffer,
5179 per_cpu_ptr(size_buf->data, cpu_id)->entries, cpu_id);
d60da506 5180 if (ret == 0)
12883efb
SRRH
5181 per_cpu_ptr(trace_buf->data, cpu_id)->entries =
5182 per_cpu_ptr(size_buf->data, cpu_id)->entries;
d60da506
HT
5183 }
5184
5185 return ret;
5186}
12883efb 5187#endif /* CONFIG_TRACER_MAX_TRACE */
d60da506 5188
2b6080f2
SR
5189static int __tracing_resize_ring_buffer(struct trace_array *tr,
5190 unsigned long size, int cpu)
73c5162a
SR
5191{
5192 int ret;
5193
5194 /*
5195 * If kernel or user changes the size of the ring buffer
a123c52b
SR
5196 * we use the size that was given, and we can forget about
5197 * expanding it later.
73c5162a 5198 */
55034cd6 5199 ring_buffer_expanded = true;
73c5162a 5200
b382ede6 5201 /* May be called before buffers are initialized */
12883efb 5202 if (!tr->trace_buffer.buffer)
b382ede6
SR
5203 return 0;
5204
12883efb 5205 ret = ring_buffer_resize(tr->trace_buffer.buffer, size, cpu);
73c5162a
SR
5206 if (ret < 0)
5207 return ret;
5208
12883efb 5209#ifdef CONFIG_TRACER_MAX_TRACE
2b6080f2
SR
5210 if (!(tr->flags & TRACE_ARRAY_FL_GLOBAL) ||
5211 !tr->current_trace->use_max_tr)
ef710e10
KM
5212 goto out;
5213
12883efb 5214 ret = ring_buffer_resize(tr->max_buffer.buffer, size, cpu);
73c5162a 5215 if (ret < 0) {
12883efb
SRRH
5216 int r = resize_buffer_duplicate_size(&tr->trace_buffer,
5217 &tr->trace_buffer, cpu);
73c5162a 5218 if (r < 0) {
a123c52b
SR
5219 /*
5220 * AARGH! We are left with different
5221 * size max buffer!!!!
5222 * The max buffer is our "snapshot" buffer.
5223 * When a tracer needs a snapshot (one of the
5224 * latency tracers), it swaps the max buffer
5225 * with the saved snap shot. We succeeded to
5226 * update the size of the main buffer, but failed to
5227 * update the size of the max buffer. But when we tried
5228 * to reset the main buffer to the original size, we
5229 * failed there too. This is very unlikely to
5230 * happen, but if it does, warn and kill all
5231 * tracing.
5232 */
73c5162a
SR
5233 WARN_ON(1);
5234 tracing_disabled = 1;
5235 }
5236 return ret;
5237 }
5238
438ced17 5239 if (cpu == RING_BUFFER_ALL_CPUS)
12883efb 5240 set_buffer_entries(&tr->max_buffer, size);
438ced17 5241 else
12883efb 5242 per_cpu_ptr(tr->max_buffer.data, cpu)->entries = size;
438ced17 5243
ef710e10 5244 out:
12883efb
SRRH
5245#endif /* CONFIG_TRACER_MAX_TRACE */
5246
438ced17 5247 if (cpu == RING_BUFFER_ALL_CPUS)
12883efb 5248 set_buffer_entries(&tr->trace_buffer, size);
438ced17 5249 else
12883efb 5250 per_cpu_ptr(tr->trace_buffer.data, cpu)->entries = size;
73c5162a
SR
5251
5252 return ret;
5253}
5254
2b6080f2
SR
5255static ssize_t tracing_resize_ring_buffer(struct trace_array *tr,
5256 unsigned long size, int cpu_id)
4f271a2a 5257{
83f40318 5258 int ret = size;
4f271a2a
VN
5259
5260 mutex_lock(&trace_types_lock);
5261
438ced17
VN
5262 if (cpu_id != RING_BUFFER_ALL_CPUS) {
5263 /* make sure, this cpu is enabled in the mask */
5264 if (!cpumask_test_cpu(cpu_id, tracing_buffer_mask)) {
5265 ret = -EINVAL;
5266 goto out;
5267 }
5268 }
4f271a2a 5269
2b6080f2 5270 ret = __tracing_resize_ring_buffer(tr, size, cpu_id);
4f271a2a
VN
5271 if (ret < 0)
5272 ret = -ENOMEM;
5273
438ced17 5274out:
4f271a2a
VN
5275 mutex_unlock(&trace_types_lock);
5276
5277 return ret;
5278}
5279
ef710e10 5280
1852fcce
SR
5281/**
5282 * tracing_update_buffers - used by tracing facility to expand ring buffers
5283 *
5284 * To save on memory when the tracing is never used on a system with it
5285 * configured in. The ring buffers are set to a minimum size. But once
5286 * a user starts to use the tracing facility, then they need to grow
5287 * to their default size.
5288 *
5289 * This function is to be called when a tracer is about to be used.
5290 */
5291int tracing_update_buffers(void)
5292{
5293 int ret = 0;
5294
1027fcb2 5295 mutex_lock(&trace_types_lock);
1852fcce 5296 if (!ring_buffer_expanded)
2b6080f2 5297 ret = __tracing_resize_ring_buffer(&global_trace, trace_buf_size,
438ced17 5298 RING_BUFFER_ALL_CPUS);
1027fcb2 5299 mutex_unlock(&trace_types_lock);
1852fcce
SR
5300
5301 return ret;
5302}
5303
577b785f
SR
5304struct trace_option_dentry;
5305
37aea98b 5306static void
2b6080f2 5307create_trace_option_files(struct trace_array *tr, struct tracer *tracer);
577b785f 5308
6b450d25
SRRH
5309/*
5310 * Used to clear out the tracer before deletion of an instance.
5311 * Must have trace_types_lock held.
5312 */
5313static void tracing_set_nop(struct trace_array *tr)
5314{
5315 if (tr->current_trace == &nop_trace)
5316 return;
5317
50512ab5 5318 tr->current_trace->enabled--;
6b450d25
SRRH
5319
5320 if (tr->current_trace->reset)
5321 tr->current_trace->reset(tr);
5322
5323 tr->current_trace = &nop_trace;
5324}
5325
41d9c0be 5326static void add_tracer_options(struct trace_array *tr, struct tracer *t)
bc0c38d1 5327{
09d23a1d
SRRH
5328 /* Only enable if the directory has been created already. */
5329 if (!tr->dir)
5330 return;
5331
37aea98b 5332 create_trace_option_files(tr, t);
09d23a1d
SRRH
5333}
5334
5335static int tracing_set_tracer(struct trace_array *tr, const char *buf)
5336{
bc0c38d1 5337 struct tracer *t;
12883efb 5338#ifdef CONFIG_TRACER_MAX_TRACE
34600f0e 5339 bool had_max_tr;
12883efb 5340#endif
d9e54076 5341 int ret = 0;
bc0c38d1 5342
1027fcb2
SR
5343 mutex_lock(&trace_types_lock);
5344
73c5162a 5345 if (!ring_buffer_expanded) {
2b6080f2 5346 ret = __tracing_resize_ring_buffer(tr, trace_buf_size,
438ced17 5347 RING_BUFFER_ALL_CPUS);
73c5162a 5348 if (ret < 0)
59f586db 5349 goto out;
73c5162a
SR
5350 ret = 0;
5351 }
5352
bc0c38d1
SR
5353 for (t = trace_types; t; t = t->next) {
5354 if (strcmp(t->name, buf) == 0)
5355 break;
5356 }
c2931e05
FW
5357 if (!t) {
5358 ret = -EINVAL;
5359 goto out;
5360 }
2b6080f2 5361 if (t == tr->current_trace)
bc0c38d1
SR
5362 goto out;
5363
607e2ea1
SRRH
5364 /* Some tracers are only allowed for the top level buffer */
5365 if (!trace_ok_for_array(t, tr)) {
5366 ret = -EINVAL;
5367 goto out;
5368 }
5369
cf6ab6d9
SRRH
5370 /* If trace pipe files are being read, we can't change the tracer */
5371 if (tr->current_trace->ref) {
5372 ret = -EBUSY;
5373 goto out;
5374 }
5375
9f029e83 5376 trace_branch_disable();
613f04a0 5377
50512ab5 5378 tr->current_trace->enabled--;
613f04a0 5379
2b6080f2
SR
5380 if (tr->current_trace->reset)
5381 tr->current_trace->reset(tr);
34600f0e 5382
12883efb 5383 /* Current trace needs to be nop_trace before synchronize_sched */
2b6080f2 5384 tr->current_trace = &nop_trace;
34600f0e 5385
45ad21ca
SRRH
5386#ifdef CONFIG_TRACER_MAX_TRACE
5387 had_max_tr = tr->allocated_snapshot;
34600f0e
SR
5388
5389 if (had_max_tr && !t->use_max_tr) {
5390 /*
5391 * We need to make sure that the update_max_tr sees that
5392 * current_trace changed to nop_trace to keep it from
5393 * swapping the buffers after we resize it.
5394 * The update_max_tr is called from interrupts disabled
5395 * so a synchronized_sched() is sufficient.
5396 */
5397 synchronize_sched();
3209cff4 5398 free_snapshot(tr);
ef710e10 5399 }
12883efb 5400#endif
12883efb
SRRH
5401
5402#ifdef CONFIG_TRACER_MAX_TRACE
34600f0e 5403 if (t->use_max_tr && !had_max_tr) {
3209cff4 5404 ret = alloc_snapshot(tr);
d60da506
HT
5405 if (ret < 0)
5406 goto out;
ef710e10 5407 }
12883efb 5408#endif
577b785f 5409
1c80025a 5410 if (t->init) {
b6f11df2 5411 ret = tracer_init(t, tr);
1c80025a
FW
5412 if (ret)
5413 goto out;
5414 }
bc0c38d1 5415
2b6080f2 5416 tr->current_trace = t;
50512ab5 5417 tr->current_trace->enabled++;
9f029e83 5418 trace_branch_enable(tr);
bc0c38d1
SR
5419 out:
5420 mutex_unlock(&trace_types_lock);
5421
d9e54076
PZ
5422 return ret;
5423}
5424
5425static ssize_t
5426tracing_set_trace_write(struct file *filp, const char __user *ubuf,
5427 size_t cnt, loff_t *ppos)
5428{
607e2ea1 5429 struct trace_array *tr = filp->private_data;
ee6c2c1b 5430 char buf[MAX_TRACER_SIZE+1];
d9e54076
PZ
5431 int i;
5432 size_t ret;
e6e7a65a
FW
5433 int err;
5434
5435 ret = cnt;
d9e54076 5436
ee6c2c1b
LZ
5437 if (cnt > MAX_TRACER_SIZE)
5438 cnt = MAX_TRACER_SIZE;
d9e54076 5439
4afe6495 5440 if (copy_from_user(buf, ubuf, cnt))
d9e54076
PZ
5441 return -EFAULT;
5442
5443 buf[cnt] = 0;
5444
5445 /* strip ending whitespace. */
5446 for (i = cnt - 1; i > 0 && isspace(buf[i]); i--)
5447 buf[i] = 0;
5448
607e2ea1 5449 err = tracing_set_tracer(tr, buf);
e6e7a65a
FW
5450 if (err)
5451 return err;
d9e54076 5452
cf8517cf 5453 *ppos += ret;
bc0c38d1 5454
c2931e05 5455 return ret;
bc0c38d1
SR
5456}
5457
5458static ssize_t
6508fa76
SF
5459tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
5460 size_t cnt, loff_t *ppos)
bc0c38d1 5461{
bc0c38d1
SR
5462 char buf[64];
5463 int r;
5464
cffae437 5465 r = snprintf(buf, sizeof(buf), "%ld\n",
bc0c38d1 5466 *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
cffae437
SR
5467 if (r > sizeof(buf))
5468 r = sizeof(buf);
4bf39a94 5469 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
bc0c38d1
SR
5470}
5471
5472static ssize_t
6508fa76
SF
5473tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
5474 size_t cnt, loff_t *ppos)
bc0c38d1 5475{
5e39841c 5476 unsigned long val;
c6caeeb1 5477 int ret;
bc0c38d1 5478
22fe9b54
PH
5479 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5480 if (ret)
c6caeeb1 5481 return ret;
bc0c38d1
SR
5482
5483 *ptr = val * 1000;
5484
5485 return cnt;
5486}
5487
6508fa76
SF
5488static ssize_t
5489tracing_thresh_read(struct file *filp, char __user *ubuf,
5490 size_t cnt, loff_t *ppos)
5491{
5492 return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos);
5493}
5494
5495static ssize_t
5496tracing_thresh_write(struct file *filp, const char __user *ubuf,
5497 size_t cnt, loff_t *ppos)
5498{
5499 struct trace_array *tr = filp->private_data;
5500 int ret;
5501
5502 mutex_lock(&trace_types_lock);
5503 ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos);
5504 if (ret < 0)
5505 goto out;
5506
5507 if (tr->current_trace->update_thresh) {
5508 ret = tr->current_trace->update_thresh(tr);
5509 if (ret < 0)
5510 goto out;
5511 }
5512
5513 ret = cnt;
5514out:
5515 mutex_unlock(&trace_types_lock);
5516
5517 return ret;
5518}
5519
f971cc9a 5520#if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
e428abbb 5521
6508fa76
SF
5522static ssize_t
5523tracing_max_lat_read(struct file *filp, char __user *ubuf,
5524 size_t cnt, loff_t *ppos)
5525{
5526 return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos);
5527}
5528
5529static ssize_t
5530tracing_max_lat_write(struct file *filp, const char __user *ubuf,
5531 size_t cnt, loff_t *ppos)
5532{
5533 return tracing_nsecs_write(filp->private_data, ubuf, cnt, ppos);
5534}
5535
e428abbb
CG
5536#endif
5537
b3806b43
SR
5538static int tracing_open_pipe(struct inode *inode, struct file *filp)
5539{
15544209 5540 struct trace_array *tr = inode->i_private;
b3806b43 5541 struct trace_iterator *iter;
b04cc6b1 5542 int ret = 0;
b3806b43
SR
5543
5544 if (tracing_disabled)
5545 return -ENODEV;
5546
7b85af63
SRRH
5547 if (trace_array_get(tr) < 0)
5548 return -ENODEV;
5549
b04cc6b1
FW
5550 mutex_lock(&trace_types_lock);
5551
b3806b43
SR
5552 /* create a buffer to store the information to pass to userspace */
5553 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
b04cc6b1
FW
5554 if (!iter) {
5555 ret = -ENOMEM;
f77d09a3 5556 __trace_array_put(tr);
b04cc6b1
FW
5557 goto out;
5558 }
b3806b43 5559
3a161d99 5560 trace_seq_init(&iter->seq);
d716ff71 5561 iter->trace = tr->current_trace;
d7350c3f 5562
4462344e 5563 if (!alloc_cpumask_var(&iter->started, GFP_KERNEL)) {
b04cc6b1 5564 ret = -ENOMEM;
d7350c3f 5565 goto fail;
4462344e
RR
5566 }
5567
a309720c 5568 /* trace pipe does not show start of buffer */
4462344e 5569 cpumask_setall(iter->started);
a309720c 5570
983f938a 5571 if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
112f38a7
SR
5572 iter->iter_flags |= TRACE_FILE_LAT_FMT;
5573
8be0709f 5574 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
58e8eedf 5575 if (trace_clocks[tr->clock_id].in_ns)
8be0709f
DS
5576 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
5577
15544209
ON
5578 iter->tr = tr;
5579 iter->trace_buffer = &tr->trace_buffer;
5580 iter->cpu_file = tracing_get_cpu(inode);
d7350c3f 5581 mutex_init(&iter->mutex);
b3806b43
SR
5582 filp->private_data = iter;
5583
107bad8b
SR
5584 if (iter->trace->pipe_open)
5585 iter->trace->pipe_open(iter);
107bad8b 5586
b444786f 5587 nonseekable_open(inode, filp);
cf6ab6d9
SRRH
5588
5589 tr->current_trace->ref++;
b04cc6b1
FW
5590out:
5591 mutex_unlock(&trace_types_lock);
5592 return ret;
d7350c3f
FW
5593
5594fail:
5595 kfree(iter->trace);
5596 kfree(iter);
7b85af63 5597 __trace_array_put(tr);
d7350c3f
FW
5598 mutex_unlock(&trace_types_lock);
5599 return ret;
b3806b43
SR
5600}
5601
5602static int tracing_release_pipe(struct inode *inode, struct file *file)
5603{
5604 struct trace_iterator *iter = file->private_data;
15544209 5605 struct trace_array *tr = inode->i_private;
b3806b43 5606
b04cc6b1
FW
5607 mutex_lock(&trace_types_lock);
5608
cf6ab6d9
SRRH
5609 tr->current_trace->ref--;
5610
29bf4a5e 5611 if (iter->trace->pipe_close)
c521efd1
SR
5612 iter->trace->pipe_close(iter);
5613
b04cc6b1
FW
5614 mutex_unlock(&trace_types_lock);
5615
4462344e 5616 free_cpumask_var(iter->started);
d7350c3f 5617 mutex_destroy(&iter->mutex);
b3806b43 5618 kfree(iter);
b3806b43 5619
7b85af63
SRRH
5620 trace_array_put(tr);
5621
b3806b43
SR
5622 return 0;
5623}
5624
2a2cc8f7 5625static unsigned int
cc60cdc9 5626trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_table)
2a2cc8f7 5627{
983f938a
SRRH
5628 struct trace_array *tr = iter->tr;
5629
15693458
SRRH
5630 /* Iterators are static, they should be filled or empty */
5631 if (trace_buffer_iter(iter, iter->cpu_file))
5632 return POLLIN | POLLRDNORM;
2a2cc8f7 5633
983f938a 5634 if (tr->trace_flags & TRACE_ITER_BLOCK)
2a2cc8f7
SSP
5635 /*
5636 * Always select as readable when in blocking mode
5637 */
5638 return POLLIN | POLLRDNORM;
15693458 5639 else
12883efb 5640 return ring_buffer_poll_wait(iter->trace_buffer->buffer, iter->cpu_file,
15693458 5641 filp, poll_table);
2a2cc8f7 5642}
2a2cc8f7 5643
cc60cdc9
SR
5644static unsigned int
5645tracing_poll_pipe(struct file *filp, poll_table *poll_table)
5646{
5647 struct trace_iterator *iter = filp->private_data;
5648
5649 return trace_poll(iter, filp, poll_table);
2a2cc8f7
SSP
5650}
5651
d716ff71 5652/* Must be called with iter->mutex held. */
ff98781b 5653static int tracing_wait_pipe(struct file *filp)
b3806b43
SR
5654{
5655 struct trace_iterator *iter = filp->private_data;
8b8b3683 5656 int ret;
b3806b43 5657
b3806b43 5658 while (trace_empty(iter)) {
2dc8f095 5659
107bad8b 5660 if ((filp->f_flags & O_NONBLOCK)) {
ff98781b 5661 return -EAGAIN;
107bad8b 5662 }
2dc8f095 5663
b3806b43 5664 /*
250bfd3d 5665 * We block until we read something and tracing is disabled.
b3806b43
SR
5666 * We still block if tracing is disabled, but we have never
5667 * read anything. This allows a user to cat this file, and
5668 * then enable tracing. But after we have read something,
5669 * we give an EOF when tracing is again disabled.
5670 *
5671 * iter->pos will be 0 if we haven't read anything.
5672 */
81cade5c 5673 if (!tracer_tracing_is_on(iter->tr) && iter->pos)
b3806b43 5674 break;
f4874261
SRRH
5675
5676 mutex_unlock(&iter->mutex);
5677
e30f53aa 5678 ret = wait_on_pipe(iter, false);
f4874261
SRRH
5679
5680 mutex_lock(&iter->mutex);
5681
8b8b3683
SRRH
5682 if (ret)
5683 return ret;
b3806b43
SR
5684 }
5685
ff98781b
EGM
5686 return 1;
5687}
5688
5689/*
5690 * Consumer reader.
5691 */
5692static ssize_t
5693tracing_read_pipe(struct file *filp, char __user *ubuf,
5694 size_t cnt, loff_t *ppos)
5695{
5696 struct trace_iterator *iter = filp->private_data;
5697 ssize_t sret;
5698
d7350c3f
FW
5699 /*
5700 * Avoid more than one consumer on a single file descriptor
5701 * This is just a matter of traces coherency, the ring buffer itself
5702 * is protected.
5703 */
5704 mutex_lock(&iter->mutex);
1245800c
SRRH
5705
5706 /* return any leftover data */
5707 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
5708 if (sret != -EBUSY)
5709 goto out;
5710
5711 trace_seq_init(&iter->seq);
5712
ff98781b
EGM
5713 if (iter->trace->read) {
5714 sret = iter->trace->read(iter, filp, ubuf, cnt, ppos);
5715 if (sret)
5716 goto out;
5717 }
5718
5719waitagain:
5720 sret = tracing_wait_pipe(filp);
5721 if (sret <= 0)
5722 goto out;
5723
b3806b43 5724 /* stop when tracing is finished */
ff98781b
EGM
5725 if (trace_empty(iter)) {
5726 sret = 0;
107bad8b 5727 goto out;
ff98781b 5728 }
b3806b43
SR
5729
5730 if (cnt >= PAGE_SIZE)
5731 cnt = PAGE_SIZE - 1;
5732
53d0aa77 5733 /* reset all but tr, trace, and overruns */
53d0aa77
SR
5734 memset(&iter->seq, 0,
5735 sizeof(struct trace_iterator) -
5736 offsetof(struct trace_iterator, seq));
ed5467da 5737 cpumask_clear(iter->started);
4823ed7e 5738 iter->pos = -1;
b3806b43 5739
4f535968 5740 trace_event_read_lock();
7e53bd42 5741 trace_access_lock(iter->cpu_file);
955b61e5 5742 while (trace_find_next_entry_inc(iter) != NULL) {
2c4f035f 5743 enum print_line_t ret;
5ac48378 5744 int save_len = iter->seq.seq.len;
088b1e42 5745
f9896bf3 5746 ret = print_trace_line(iter);
2c4f035f 5747 if (ret == TRACE_TYPE_PARTIAL_LINE) {
088b1e42 5748 /* don't print partial lines */
5ac48378 5749 iter->seq.seq.len = save_len;
b3806b43 5750 break;
088b1e42 5751 }
b91facc3
FW
5752 if (ret != TRACE_TYPE_NO_CONSUME)
5753 trace_consume(iter);
b3806b43 5754
5ac48378 5755 if (trace_seq_used(&iter->seq) >= cnt)
b3806b43 5756 break;
ee5e51f5
JO
5757
5758 /*
5759 * Setting the full flag means we reached the trace_seq buffer
5760 * size and we should leave by partial output condition above.
5761 * One of the trace_seq_* functions is not used properly.
5762 */
5763 WARN_ONCE(iter->seq.full, "full flag set for trace type %d",
5764 iter->ent->type);
b3806b43 5765 }
7e53bd42 5766 trace_access_unlock(iter->cpu_file);
4f535968 5767 trace_event_read_unlock();
b3806b43 5768
b3806b43 5769 /* Now copy what we have to the user */
6c6c2796 5770 sret = trace_seq_to_user(&iter->seq, ubuf, cnt);
5ac48378 5771 if (iter->seq.seq.readpos >= trace_seq_used(&iter->seq))
f9520750 5772 trace_seq_init(&iter->seq);
9ff4b974
PP
5773
5774 /*
25985edc 5775 * If there was nothing to send to user, in spite of consuming trace
9ff4b974
PP
5776 * entries, go back to wait for more entries.
5777 */
6c6c2796 5778 if (sret == -EBUSY)
9ff4b974 5779 goto waitagain;
b3806b43 5780
107bad8b 5781out:
d7350c3f 5782 mutex_unlock(&iter->mutex);
107bad8b 5783
6c6c2796 5784 return sret;
b3806b43
SR
5785}
5786
3c56819b
EGM
5787static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
5788 unsigned int idx)
5789{
5790 __free_page(spd->pages[idx]);
5791}
5792
28dfef8f 5793static const struct pipe_buf_operations tracing_pipe_buf_ops = {
34cd4998 5794 .can_merge = 0,
34cd4998 5795 .confirm = generic_pipe_buf_confirm,
92fdd98c 5796 .release = generic_pipe_buf_release,
34cd4998
SR
5797 .steal = generic_pipe_buf_steal,
5798 .get = generic_pipe_buf_get,
3c56819b
EGM
5799};
5800
34cd4998 5801static size_t
fa7c7f6e 5802tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter)
34cd4998
SR
5803{
5804 size_t count;
74f06bb7 5805 int save_len;
34cd4998
SR
5806 int ret;
5807
5808 /* Seq buffer is page-sized, exactly what we need. */
5809 for (;;) {
74f06bb7 5810 save_len = iter->seq.seq.len;
34cd4998 5811 ret = print_trace_line(iter);
74f06bb7
SRRH
5812
5813 if (trace_seq_has_overflowed(&iter->seq)) {
5814 iter->seq.seq.len = save_len;
34cd4998
SR
5815 break;
5816 }
74f06bb7
SRRH
5817
5818 /*
5819 * This should not be hit, because it should only
5820 * be set if the iter->seq overflowed. But check it
5821 * anyway to be safe.
5822 */
34cd4998 5823 if (ret == TRACE_TYPE_PARTIAL_LINE) {
74f06bb7
SRRH
5824 iter->seq.seq.len = save_len;
5825 break;
5826 }
5827
5ac48378 5828 count = trace_seq_used(&iter->seq) - save_len;
74f06bb7
SRRH
5829 if (rem < count) {
5830 rem = 0;
5831 iter->seq.seq.len = save_len;
34cd4998
SR
5832 break;
5833 }
5834
74e7ff8c
LJ
5835 if (ret != TRACE_TYPE_NO_CONSUME)
5836 trace_consume(iter);
34cd4998 5837 rem -= count;
955b61e5 5838 if (!trace_find_next_entry_inc(iter)) {
34cd4998
SR
5839 rem = 0;
5840 iter->ent = NULL;
5841 break;
5842 }
5843 }
5844
5845 return rem;
5846}
5847
3c56819b
EGM
5848static ssize_t tracing_splice_read_pipe(struct file *filp,
5849 loff_t *ppos,
5850 struct pipe_inode_info *pipe,
5851 size_t len,
5852 unsigned int flags)
5853{
35f3d14d
JA
5854 struct page *pages_def[PIPE_DEF_BUFFERS];
5855 struct partial_page partial_def[PIPE_DEF_BUFFERS];
3c56819b
EGM
5856 struct trace_iterator *iter = filp->private_data;
5857 struct splice_pipe_desc spd = {
35f3d14d
JA
5858 .pages = pages_def,
5859 .partial = partial_def,
34cd4998 5860 .nr_pages = 0, /* This gets updated below. */
047fe360 5861 .nr_pages_max = PIPE_DEF_BUFFERS,
34cd4998
SR
5862 .ops = &tracing_pipe_buf_ops,
5863 .spd_release = tracing_spd_release_pipe,
3c56819b
EGM
5864 };
5865 ssize_t ret;
34cd4998 5866 size_t rem;
3c56819b
EGM
5867 unsigned int i;
5868
35f3d14d
JA
5869 if (splice_grow_spd(pipe, &spd))
5870 return -ENOMEM;
5871
d7350c3f 5872 mutex_lock(&iter->mutex);
3c56819b
EGM
5873
5874 if (iter->trace->splice_read) {
5875 ret = iter->trace->splice_read(iter, filp,
5876 ppos, pipe, len, flags);
5877 if (ret)
34cd4998 5878 goto out_err;
3c56819b
EGM
5879 }
5880
5881 ret = tracing_wait_pipe(filp);
5882 if (ret <= 0)
34cd4998 5883 goto out_err;
3c56819b 5884
955b61e5 5885 if (!iter->ent && !trace_find_next_entry_inc(iter)) {
3c56819b 5886 ret = -EFAULT;
34cd4998 5887 goto out_err;
3c56819b
EGM
5888 }
5889
4f535968 5890 trace_event_read_lock();
7e53bd42 5891 trace_access_lock(iter->cpu_file);
4f535968 5892
3c56819b 5893 /* Fill as many pages as possible. */
a786c06d 5894 for (i = 0, rem = len; i < spd.nr_pages_max && rem; i++) {
35f3d14d
JA
5895 spd.pages[i] = alloc_page(GFP_KERNEL);
5896 if (!spd.pages[i])
34cd4998 5897 break;
3c56819b 5898
fa7c7f6e 5899 rem = tracing_fill_pipe_page(rem, iter);
3c56819b
EGM
5900
5901 /* Copy the data into the page, so we can start over. */
5902 ret = trace_seq_to_buffer(&iter->seq,
35f3d14d 5903 page_address(spd.pages[i]),
5ac48378 5904 trace_seq_used(&iter->seq));
3c56819b 5905 if (ret < 0) {
35f3d14d 5906 __free_page(spd.pages[i]);
3c56819b
EGM
5907 break;
5908 }
35f3d14d 5909 spd.partial[i].offset = 0;
5ac48378 5910 spd.partial[i].len = trace_seq_used(&iter->seq);
3c56819b 5911
f9520750 5912 trace_seq_init(&iter->seq);
3c56819b
EGM
5913 }
5914
7e53bd42 5915 trace_access_unlock(iter->cpu_file);
4f535968 5916 trace_event_read_unlock();
d7350c3f 5917 mutex_unlock(&iter->mutex);
3c56819b
EGM
5918
5919 spd.nr_pages = i;
5920
a29054d9
SRRH
5921 if (i)
5922 ret = splice_to_pipe(pipe, &spd);
5923 else
5924 ret = 0;
35f3d14d 5925out:
047fe360 5926 splice_shrink_spd(&spd);
35f3d14d 5927 return ret;
3c56819b 5928
34cd4998 5929out_err:
d7350c3f 5930 mutex_unlock(&iter->mutex);
35f3d14d 5931 goto out;
3c56819b
EGM
5932}
5933
a98a3c3f
SR
5934static ssize_t
5935tracing_entries_read(struct file *filp, char __user *ubuf,
5936 size_t cnt, loff_t *ppos)
5937{
0bc392ee
ON
5938 struct inode *inode = file_inode(filp);
5939 struct trace_array *tr = inode->i_private;
5940 int cpu = tracing_get_cpu(inode);
438ced17
VN
5941 char buf[64];
5942 int r = 0;
5943 ssize_t ret;
a98a3c3f 5944
db526ca3 5945 mutex_lock(&trace_types_lock);
438ced17 5946
0bc392ee 5947 if (cpu == RING_BUFFER_ALL_CPUS) {
438ced17
VN
5948 int cpu, buf_size_same;
5949 unsigned long size;
5950
5951 size = 0;
5952 buf_size_same = 1;
5953 /* check if all cpu sizes are same */
5954 for_each_tracing_cpu(cpu) {
5955 /* fill in the size from first enabled cpu */
5956 if (size == 0)
12883efb
SRRH
5957 size = per_cpu_ptr(tr->trace_buffer.data, cpu)->entries;
5958 if (size != per_cpu_ptr(tr->trace_buffer.data, cpu)->entries) {
438ced17
VN
5959 buf_size_same = 0;
5960 break;
5961 }
5962 }
5963
5964 if (buf_size_same) {
5965 if (!ring_buffer_expanded)
5966 r = sprintf(buf, "%lu (expanded: %lu)\n",
5967 size >> 10,
5968 trace_buf_size >> 10);
5969 else
5970 r = sprintf(buf, "%lu\n", size >> 10);
5971 } else
5972 r = sprintf(buf, "X\n");
5973 } else
0bc392ee 5974 r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10);
438ced17 5975
db526ca3
SR
5976 mutex_unlock(&trace_types_lock);
5977
438ced17
VN
5978 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
5979 return ret;
a98a3c3f
SR
5980}
5981
5982static ssize_t
5983tracing_entries_write(struct file *filp, const char __user *ubuf,
5984 size_t cnt, loff_t *ppos)
5985{
0bc392ee
ON
5986 struct inode *inode = file_inode(filp);
5987 struct trace_array *tr = inode->i_private;
a98a3c3f 5988 unsigned long val;
4f271a2a 5989 int ret;
a98a3c3f 5990
22fe9b54
PH
5991 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
5992 if (ret)
c6caeeb1 5993 return ret;
a98a3c3f
SR
5994
5995 /* must have at least 1 entry */
5996 if (!val)
5997 return -EINVAL;
5998
1696b2b0
SR
5999 /* value is in KB */
6000 val <<= 10;
0bc392ee 6001 ret = tracing_resize_ring_buffer(tr, val, tracing_get_cpu(inode));
4f271a2a
VN
6002 if (ret < 0)
6003 return ret;
a98a3c3f 6004
cf8517cf 6005 *ppos += cnt;
a98a3c3f 6006
4f271a2a
VN
6007 return cnt;
6008}
bf5e6519 6009
f81ab074
VN
6010static ssize_t
6011tracing_total_entries_read(struct file *filp, char __user *ubuf,
6012 size_t cnt, loff_t *ppos)
6013{
6014 struct trace_array *tr = filp->private_data;
6015 char buf[64];
6016 int r, cpu;
6017 unsigned long size = 0, expanded_size = 0;
6018
6019 mutex_lock(&trace_types_lock);
6020 for_each_tracing_cpu(cpu) {
12883efb 6021 size += per_cpu_ptr(tr->trace_buffer.data, cpu)->entries >> 10;
f81ab074
VN
6022 if (!ring_buffer_expanded)
6023 expanded_size += trace_buf_size >> 10;
6024 }
6025 if (ring_buffer_expanded)
6026 r = sprintf(buf, "%lu\n", size);
6027 else
6028 r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
6029 mutex_unlock(&trace_types_lock);
6030
6031 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
6032}
6033
4f271a2a
VN
6034static ssize_t
6035tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
6036 size_t cnt, loff_t *ppos)
6037{
6038 /*
6039 * There is no need to read what the user has written, this function
6040 * is just to make sure that there is no error when "echo" is used
6041 */
6042
6043 *ppos += cnt;
a98a3c3f
SR
6044
6045 return cnt;
6046}
6047
4f271a2a
VN
6048static int
6049tracing_free_buffer_release(struct inode *inode, struct file *filp)
6050{
2b6080f2
SR
6051 struct trace_array *tr = inode->i_private;
6052
cf30cf67 6053 /* disable tracing ? */
983f938a 6054 if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE)
711e1243 6055 tracer_tracing_off(tr);
4f271a2a 6056 /* resize the ring buffer to 0 */
2b6080f2 6057 tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS);
4f271a2a 6058
7b85af63
SRRH
6059 trace_array_put(tr);
6060
4f271a2a
VN
6061 return 0;
6062}
6063
5bf9a1ee
PP
6064static ssize_t
6065tracing_mark_write(struct file *filp, const char __user *ubuf,
6066 size_t cnt, loff_t *fpos)
6067{
2d71619c 6068 struct trace_array *tr = filp->private_data;
d696b58c
SR
6069 struct ring_buffer_event *event;
6070 struct ring_buffer *buffer;
6071 struct print_entry *entry;
6072 unsigned long irq_flags;
656c7f0d 6073 const char faulted[] = "<faulted>";
d696b58c 6074 ssize_t written;
d696b58c
SR
6075 int size;
6076 int len;
fa32e855 6077
656c7f0d
SRRH
6078/* Used in tracing_mark_raw_write() as well */
6079#define FAULTED_SIZE (sizeof(faulted) - 1) /* '\0' is already accounted for */
5bf9a1ee 6080
c76f0694 6081 if (tracing_disabled)
5bf9a1ee
PP
6082 return -EINVAL;
6083
983f938a 6084 if (!(tr->trace_flags & TRACE_ITER_MARKERS))
5224c3a3
MSB
6085 return -EINVAL;
6086
5bf9a1ee
PP
6087 if (cnt > TRACE_BUF_SIZE)
6088 cnt = TRACE_BUF_SIZE;
6089
d696b58c 6090 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
5bf9a1ee 6091
d696b58c 6092 local_save_flags(irq_flags);
656c7f0d 6093 size = sizeof(*entry) + cnt + 2; /* add '\0' and possible '\n' */
d696b58c 6094
656c7f0d
SRRH
6095 /* If less than "<faulted>", then make sure we can still add that */
6096 if (cnt < FAULTED_SIZE)
6097 size += FAULTED_SIZE - cnt;
d696b58c 6098
2d71619c 6099 buffer = tr->trace_buffer.buffer;
3e9a8aad
SRRH
6100 event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size,
6101 irq_flags, preempt_count());
656c7f0d 6102 if (unlikely(!event))
d696b58c 6103 /* Ring buffer disabled, return as if not open for write */
656c7f0d 6104 return -EBADF;
d696b58c
SR
6105
6106 entry = ring_buffer_event_data(event);
6107 entry->ip = _THIS_IP_;
6108
656c7f0d
SRRH
6109 len = __copy_from_user_inatomic(&entry->buf, ubuf, cnt);
6110 if (len) {
6111 memcpy(&entry->buf, faulted, FAULTED_SIZE);
6112 cnt = FAULTED_SIZE;
6113 written = -EFAULT;
c13d2f7c 6114 } else
656c7f0d
SRRH
6115 written = cnt;
6116 len = cnt;
5bf9a1ee 6117
d696b58c
SR
6118 if (entry->buf[cnt - 1] != '\n') {
6119 entry->buf[cnt] = '\n';
6120 entry->buf[cnt + 1] = '\0';
6121 } else
6122 entry->buf[cnt] = '\0';
6123
7ffbd48d 6124 __buffer_unlock_commit(buffer, event);
5bf9a1ee 6125
656c7f0d
SRRH
6126 if (written > 0)
6127 *fpos += written;
5bf9a1ee 6128
fa32e855
SR
6129 return written;
6130}
6131
6132/* Limit it for now to 3K (including tag) */
6133#define RAW_DATA_MAX_SIZE (1024*3)
6134
6135static ssize_t
6136tracing_mark_raw_write(struct file *filp, const char __user *ubuf,
6137 size_t cnt, loff_t *fpos)
6138{
6139 struct trace_array *tr = filp->private_data;
6140 struct ring_buffer_event *event;
6141 struct ring_buffer *buffer;
6142 struct raw_data_entry *entry;
656c7f0d 6143 const char faulted[] = "<faulted>";
fa32e855 6144 unsigned long irq_flags;
fa32e855 6145 ssize_t written;
fa32e855
SR
6146 int size;
6147 int len;
6148
656c7f0d
SRRH
6149#define FAULT_SIZE_ID (FAULTED_SIZE + sizeof(int))
6150
fa32e855
SR
6151 if (tracing_disabled)
6152 return -EINVAL;
6153
6154 if (!(tr->trace_flags & TRACE_ITER_MARKERS))
6155 return -EINVAL;
6156
6157 /* The marker must at least have a tag id */
6158 if (cnt < sizeof(unsigned int) || cnt > RAW_DATA_MAX_SIZE)
6159 return -EINVAL;
6160
6161 if (cnt > TRACE_BUF_SIZE)
6162 cnt = TRACE_BUF_SIZE;
6163
6164 BUILD_BUG_ON(TRACE_BUF_SIZE >= PAGE_SIZE);
6165
fa32e855
SR
6166 local_save_flags(irq_flags);
6167 size = sizeof(*entry) + cnt;
656c7f0d
SRRH
6168 if (cnt < FAULT_SIZE_ID)
6169 size += FAULT_SIZE_ID - cnt;
6170
fa32e855 6171 buffer = tr->trace_buffer.buffer;
3e9a8aad
SRRH
6172 event = __trace_buffer_lock_reserve(buffer, TRACE_RAW_DATA, size,
6173 irq_flags, preempt_count());
656c7f0d 6174 if (!event)
fa32e855 6175 /* Ring buffer disabled, return as if not open for write */
656c7f0d 6176 return -EBADF;
fa32e855
SR
6177
6178 entry = ring_buffer_event_data(event);
6179
656c7f0d
SRRH
6180 len = __copy_from_user_inatomic(&entry->id, ubuf, cnt);
6181 if (len) {
6182 entry->id = -1;
6183 memcpy(&entry->buf, faulted, FAULTED_SIZE);
6184 written = -EFAULT;
fa32e855 6185 } else
656c7f0d 6186 written = cnt;
fa32e855
SR
6187
6188 __buffer_unlock_commit(buffer, event);
6189
656c7f0d
SRRH
6190 if (written > 0)
6191 *fpos += written;
1aa54bca
MS
6192
6193 return written;
5bf9a1ee
PP
6194}
6195
13f16d20 6196static int tracing_clock_show(struct seq_file *m, void *v)
5079f326 6197{
2b6080f2 6198 struct trace_array *tr = m->private;
5079f326
Z
6199 int i;
6200
6201 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++)
13f16d20 6202 seq_printf(m,
5079f326 6203 "%s%s%s%s", i ? " " : "",
2b6080f2
SR
6204 i == tr->clock_id ? "[" : "", trace_clocks[i].name,
6205 i == tr->clock_id ? "]" : "");
13f16d20 6206 seq_putc(m, '\n');
5079f326 6207
13f16d20 6208 return 0;
5079f326
Z
6209}
6210
e1e232ca 6211static int tracing_set_clock(struct trace_array *tr, const char *clockstr)
5079f326 6212{
5079f326
Z
6213 int i;
6214
5079f326
Z
6215 for (i = 0; i < ARRAY_SIZE(trace_clocks); i++) {
6216 if (strcmp(trace_clocks[i].name, clockstr) == 0)
6217 break;
6218 }
6219 if (i == ARRAY_SIZE(trace_clocks))
6220 return -EINVAL;
6221
5079f326
Z
6222 mutex_lock(&trace_types_lock);
6223
2b6080f2
SR
6224 tr->clock_id = i;
6225
12883efb 6226 ring_buffer_set_clock(tr->trace_buffer.buffer, trace_clocks[i].func);
5079f326 6227
60303ed3
DS
6228 /*
6229 * New clock may not be consistent with the previous clock.
6230 * Reset the buffer so that it doesn't have incomparable timestamps.
6231 */
9457158b 6232 tracing_reset_online_cpus(&tr->trace_buffer);
12883efb
SRRH
6233
6234#ifdef CONFIG_TRACER_MAX_TRACE
1c1e3b58 6235 if (tr->max_buffer.buffer)
12883efb 6236 ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
9457158b 6237 tracing_reset_online_cpus(&tr->max_buffer);
12883efb 6238#endif
60303ed3 6239
5079f326
Z
6240 mutex_unlock(&trace_types_lock);
6241
e1e232ca
SR
6242 return 0;
6243}
6244
6245static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
6246 size_t cnt, loff_t *fpos)
6247{
6248 struct seq_file *m = filp->private_data;
6249 struct trace_array *tr = m->private;
6250 char buf[64];
6251 const char *clockstr;
6252 int ret;
6253
6254 if (cnt >= sizeof(buf))
6255 return -EINVAL;
6256
4afe6495 6257 if (copy_from_user(buf, ubuf, cnt))
e1e232ca
SR
6258 return -EFAULT;
6259
6260 buf[cnt] = 0;
6261
6262 clockstr = strstrip(buf);
6263
6264 ret = tracing_set_clock(tr, clockstr);
6265 if (ret)
6266 return ret;
6267
5079f326
Z
6268 *fpos += cnt;
6269
6270 return cnt;
6271}
6272
13f16d20
LZ
6273static int tracing_clock_open(struct inode *inode, struct file *file)
6274{
7b85af63
SRRH
6275 struct trace_array *tr = inode->i_private;
6276 int ret;
6277
13f16d20
LZ
6278 if (tracing_disabled)
6279 return -ENODEV;
2b6080f2 6280
7b85af63
SRRH
6281 if (trace_array_get(tr))
6282 return -ENODEV;
6283
6284 ret = single_open(file, tracing_clock_show, inode->i_private);
6285 if (ret < 0)
6286 trace_array_put(tr);
6287
6288 return ret;
13f16d20
LZ
6289}
6290
6de58e62
SRRH
6291struct ftrace_buffer_info {
6292 struct trace_iterator iter;
6293 void *spare;
73a757e6 6294 unsigned int spare_cpu;
6de58e62
SRRH
6295 unsigned int read;
6296};
6297
debdd57f
HT
6298#ifdef CONFIG_TRACER_SNAPSHOT
6299static int tracing_snapshot_open(struct inode *inode, struct file *file)
6300{
6484c71c 6301 struct trace_array *tr = inode->i_private;
debdd57f 6302 struct trace_iterator *iter;
2b6080f2 6303 struct seq_file *m;
debdd57f
HT
6304 int ret = 0;
6305
ff451961
SRRH
6306 if (trace_array_get(tr) < 0)
6307 return -ENODEV;
6308
debdd57f 6309 if (file->f_mode & FMODE_READ) {
6484c71c 6310 iter = __tracing_open(inode, file, true);
debdd57f
HT
6311 if (IS_ERR(iter))
6312 ret = PTR_ERR(iter);
2b6080f2
SR
6313 } else {
6314 /* Writes still need the seq_file to hold the private data */
f77d09a3 6315 ret = -ENOMEM;
2b6080f2
SR
6316 m = kzalloc(sizeof(*m), GFP_KERNEL);
6317 if (!m)
f77d09a3 6318 goto out;
2b6080f2
SR
6319 iter = kzalloc(sizeof(*iter), GFP_KERNEL);
6320 if (!iter) {
6321 kfree(m);
f77d09a3 6322 goto out;
2b6080f2 6323 }
f77d09a3
AL
6324 ret = 0;
6325
ff451961 6326 iter->tr = tr;
6484c71c
ON
6327 iter->trace_buffer = &tr->max_buffer;
6328 iter->cpu_file = tracing_get_cpu(inode);
2b6080f2
SR
6329 m->private = iter;
6330 file->private_data = m;
debdd57f 6331 }
f77d09a3 6332out:
ff451961
SRRH
6333 if (ret < 0)
6334 trace_array_put(tr);
6335
debdd57f
HT
6336 return ret;
6337}
6338
6339static ssize_t
6340tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
6341 loff_t *ppos)
6342{
2b6080f2
SR
6343 struct seq_file *m = filp->private_data;
6344 struct trace_iterator *iter = m->private;
6345 struct trace_array *tr = iter->tr;
debdd57f
HT
6346 unsigned long val;
6347 int ret;
6348
6349 ret = tracing_update_buffers();
6350 if (ret < 0)
6351 return ret;
6352
6353 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
6354 if (ret)
6355 return ret;
6356
6357 mutex_lock(&trace_types_lock);
6358
2b6080f2 6359 if (tr->current_trace->use_max_tr) {
debdd57f
HT
6360 ret = -EBUSY;
6361 goto out;
6362 }
6363
6364 switch (val) {
6365 case 0:
f1affcaa
SRRH
6366 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
6367 ret = -EINVAL;
6368 break;
debdd57f 6369 }
3209cff4
SRRH
6370 if (tr->allocated_snapshot)
6371 free_snapshot(tr);
debdd57f
HT
6372 break;
6373 case 1:
f1affcaa
SRRH
6374/* Only allow per-cpu swap if the ring buffer supports it */
6375#ifndef CONFIG_RING_BUFFER_ALLOW_SWAP
6376 if (iter->cpu_file != RING_BUFFER_ALL_CPUS) {
6377 ret = -EINVAL;
6378 break;
6379 }
6380#endif
45ad21ca 6381 if (!tr->allocated_snapshot) {
3209cff4 6382 ret = alloc_snapshot(tr);
debdd57f
HT
6383 if (ret < 0)
6384 break;
debdd57f 6385 }
debdd57f
HT
6386 local_irq_disable();
6387 /* Now, we're going to swap */
f1affcaa 6388 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
ce9bae55 6389 update_max_tr(tr, current, smp_processor_id());
f1affcaa 6390 else
ce9bae55 6391 update_max_tr_single(tr, current, iter->cpu_file);
debdd57f
HT
6392 local_irq_enable();
6393 break;
6394 default:
45ad21ca 6395 if (tr->allocated_snapshot) {
f1affcaa
SRRH
6396 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
6397 tracing_reset_online_cpus(&tr->max_buffer);
6398 else
6399 tracing_reset(&tr->max_buffer, iter->cpu_file);
6400 }
debdd57f
HT
6401 break;
6402 }
6403
6404 if (ret >= 0) {
6405 *ppos += cnt;
6406 ret = cnt;
6407 }
6408out:
6409 mutex_unlock(&trace_types_lock);
6410 return ret;
6411}
2b6080f2
SR
6412
6413static int tracing_snapshot_release(struct inode *inode, struct file *file)
6414{
6415 struct seq_file *m = file->private_data;
ff451961
SRRH
6416 int ret;
6417
6418 ret = tracing_release(inode, file);
2b6080f2
SR
6419
6420 if (file->f_mode & FMODE_READ)
ff451961 6421 return ret;
2b6080f2
SR
6422
6423 /* If write only, the seq_file is just a stub */
6424 if (m)
6425 kfree(m->private);
6426 kfree(m);
6427
6428 return 0;
6429}
6430
6de58e62
SRRH
6431static int tracing_buffers_open(struct inode *inode, struct file *filp);
6432static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
6433 size_t count, loff_t *ppos);
6434static int tracing_buffers_release(struct inode *inode, struct file *file);
6435static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
6436 struct pipe_inode_info *pipe, size_t len, unsigned int flags);
6437
6438static int snapshot_raw_open(struct inode *inode, struct file *filp)
6439{
6440 struct ftrace_buffer_info *info;
6441 int ret;
6442
6443 ret = tracing_buffers_open(inode, filp);
6444 if (ret < 0)
6445 return ret;
6446
6447 info = filp->private_data;
6448
6449 if (info->iter.trace->use_max_tr) {
6450 tracing_buffers_release(inode, filp);
6451 return -EBUSY;
6452 }
6453
6454 info->iter.snapshot = true;
6455 info->iter.trace_buffer = &info->iter.tr->max_buffer;
6456
6457 return ret;
6458}
6459
debdd57f
HT
6460#endif /* CONFIG_TRACER_SNAPSHOT */
6461
6462
6508fa76
SF
6463static const struct file_operations tracing_thresh_fops = {
6464 .open = tracing_open_generic,
6465 .read = tracing_thresh_read,
6466 .write = tracing_thresh_write,
6467 .llseek = generic_file_llseek,
6468};
6469
f971cc9a 6470#if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
5e2336a0 6471static const struct file_operations tracing_max_lat_fops = {
4bf39a94
IM
6472 .open = tracing_open_generic,
6473 .read = tracing_max_lat_read,
6474 .write = tracing_max_lat_write,
b444786f 6475 .llseek = generic_file_llseek,
bc0c38d1 6476};
e428abbb 6477#endif
bc0c38d1 6478
5e2336a0 6479static const struct file_operations set_tracer_fops = {
4bf39a94
IM
6480 .open = tracing_open_generic,
6481 .read = tracing_set_trace_read,
6482 .write = tracing_set_trace_write,
b444786f 6483 .llseek = generic_file_llseek,
bc0c38d1
SR
6484};
6485
5e2336a0 6486static const struct file_operations tracing_pipe_fops = {
4bf39a94 6487 .open = tracing_open_pipe,
2a2cc8f7 6488 .poll = tracing_poll_pipe,
4bf39a94 6489 .read = tracing_read_pipe,
3c56819b 6490 .splice_read = tracing_splice_read_pipe,
4bf39a94 6491 .release = tracing_release_pipe,
b444786f 6492 .llseek = no_llseek,
b3806b43
SR
6493};
6494
5e2336a0 6495static const struct file_operations tracing_entries_fops = {
0bc392ee 6496 .open = tracing_open_generic_tr,
a98a3c3f
SR
6497 .read = tracing_entries_read,
6498 .write = tracing_entries_write,
b444786f 6499 .llseek = generic_file_llseek,
0bc392ee 6500 .release = tracing_release_generic_tr,
a98a3c3f
SR
6501};
6502
f81ab074 6503static const struct file_operations tracing_total_entries_fops = {
7b85af63 6504 .open = tracing_open_generic_tr,
f81ab074
VN
6505 .read = tracing_total_entries_read,
6506 .llseek = generic_file_llseek,
7b85af63 6507 .release = tracing_release_generic_tr,
f81ab074
VN
6508};
6509
4f271a2a 6510static const struct file_operations tracing_free_buffer_fops = {
7b85af63 6511 .open = tracing_open_generic_tr,
4f271a2a
VN
6512 .write = tracing_free_buffer_write,
6513 .release = tracing_free_buffer_release,
6514};
6515
5e2336a0 6516static const struct file_operations tracing_mark_fops = {
7b85af63 6517 .open = tracing_open_generic_tr,
5bf9a1ee 6518 .write = tracing_mark_write,
b444786f 6519 .llseek = generic_file_llseek,
7b85af63 6520 .release = tracing_release_generic_tr,
5bf9a1ee
PP
6521};
6522
fa32e855
SR
6523static const struct file_operations tracing_mark_raw_fops = {
6524 .open = tracing_open_generic_tr,
6525 .write = tracing_mark_raw_write,
6526 .llseek = generic_file_llseek,
6527 .release = tracing_release_generic_tr,
6528};
6529
5079f326 6530static const struct file_operations trace_clock_fops = {
13f16d20
LZ
6531 .open = tracing_clock_open,
6532 .read = seq_read,
6533 .llseek = seq_lseek,
7b85af63 6534 .release = tracing_single_release_tr,
5079f326
Z
6535 .write = tracing_clock_write,
6536};
6537
debdd57f
HT
6538#ifdef CONFIG_TRACER_SNAPSHOT
6539static const struct file_operations snapshot_fops = {
6540 .open = tracing_snapshot_open,
6541 .read = seq_read,
6542 .write = tracing_snapshot_write,
098c879e 6543 .llseek = tracing_lseek,
2b6080f2 6544 .release = tracing_snapshot_release,
debdd57f 6545};
debdd57f 6546
6de58e62
SRRH
6547static const struct file_operations snapshot_raw_fops = {
6548 .open = snapshot_raw_open,
6549 .read = tracing_buffers_read,
6550 .release = tracing_buffers_release,
6551 .splice_read = tracing_buffers_splice_read,
6552 .llseek = no_llseek,
2cadf913
SR
6553};
6554
6de58e62
SRRH
6555#endif /* CONFIG_TRACER_SNAPSHOT */
6556
2cadf913
SR
6557static int tracing_buffers_open(struct inode *inode, struct file *filp)
6558{
46ef2be0 6559 struct trace_array *tr = inode->i_private;
2cadf913 6560 struct ftrace_buffer_info *info;
7b85af63 6561 int ret;
2cadf913
SR
6562
6563 if (tracing_disabled)
6564 return -ENODEV;
6565
7b85af63
SRRH
6566 if (trace_array_get(tr) < 0)
6567 return -ENODEV;
6568
2cadf913 6569 info = kzalloc(sizeof(*info), GFP_KERNEL);
7b85af63
SRRH
6570 if (!info) {
6571 trace_array_put(tr);
2cadf913 6572 return -ENOMEM;
7b85af63 6573 }
2cadf913 6574
a695cb58
SRRH
6575 mutex_lock(&trace_types_lock);
6576
cc60cdc9 6577 info->iter.tr = tr;
46ef2be0 6578 info->iter.cpu_file = tracing_get_cpu(inode);
b627344f 6579 info->iter.trace = tr->current_trace;
12883efb 6580 info->iter.trace_buffer = &tr->trace_buffer;
cc60cdc9 6581 info->spare = NULL;
2cadf913 6582 /* Force reading ring buffer for first read */
cc60cdc9 6583 info->read = (unsigned int)-1;
2cadf913
SR
6584
6585 filp->private_data = info;
6586
cf6ab6d9
SRRH
6587 tr->current_trace->ref++;
6588
a695cb58
SRRH
6589 mutex_unlock(&trace_types_lock);
6590
7b85af63
SRRH
6591 ret = nonseekable_open(inode, filp);
6592 if (ret < 0)
6593 trace_array_put(tr);
6594
6595 return ret;
2cadf913
SR
6596}
6597
cc60cdc9
SR
6598static unsigned int
6599tracing_buffers_poll(struct file *filp, poll_table *poll_table)
6600{
6601 struct ftrace_buffer_info *info = filp->private_data;
6602 struct trace_iterator *iter = &info->iter;
6603
6604 return trace_poll(iter, filp, poll_table);
6605}
6606
2cadf913
SR
6607static ssize_t
6608tracing_buffers_read(struct file *filp, char __user *ubuf,
6609 size_t count, loff_t *ppos)
6610{
6611 struct ftrace_buffer_info *info = filp->private_data;
cc60cdc9 6612 struct trace_iterator *iter = &info->iter;
a7e52ad7 6613 ssize_t ret = 0;
6de58e62 6614 ssize_t size;
2cadf913 6615
2dc5d12b
SR
6616 if (!count)
6617 return 0;
6618
6de58e62 6619#ifdef CONFIG_TRACER_MAX_TRACE
d716ff71
SRRH
6620 if (iter->snapshot && iter->tr->current_trace->use_max_tr)
6621 return -EBUSY;
6de58e62
SRRH
6622#endif
6623
73a757e6 6624 if (!info->spare) {
12883efb
SRRH
6625 info->spare = ring_buffer_alloc_read_page(iter->trace_buffer->buffer,
6626 iter->cpu_file);
a7e52ad7
SRV
6627 if (IS_ERR(info->spare)) {
6628 ret = PTR_ERR(info->spare);
6629 info->spare = NULL;
6630 } else {
6631 info->spare_cpu = iter->cpu_file;
6632 }
73a757e6 6633 }
ddd538f3 6634 if (!info->spare)
a7e52ad7 6635 return ret;
ddd538f3 6636
2cadf913
SR
6637 /* Do we have previous read data to read? */
6638 if (info->read < PAGE_SIZE)
6639 goto read;
6640
b627344f 6641 again:
cc60cdc9 6642 trace_access_lock(iter->cpu_file);
12883efb 6643 ret = ring_buffer_read_page(iter->trace_buffer->buffer,
2cadf913
SR
6644 &info->spare,
6645 count,
cc60cdc9
SR
6646 iter->cpu_file, 0);
6647 trace_access_unlock(iter->cpu_file);
2cadf913 6648
b627344f
SR
6649 if (ret < 0) {
6650 if (trace_empty(iter)) {
d716ff71
SRRH
6651 if ((filp->f_flags & O_NONBLOCK))
6652 return -EAGAIN;
6653
e30f53aa 6654 ret = wait_on_pipe(iter, false);
d716ff71
SRRH
6655 if (ret)
6656 return ret;
6657
b627344f
SR
6658 goto again;
6659 }
d716ff71 6660 return 0;
b627344f 6661 }
436fc280 6662
436fc280 6663 info->read = 0;
b627344f 6664 read:
2cadf913
SR
6665 size = PAGE_SIZE - info->read;
6666 if (size > count)
6667 size = count;
6668
6669 ret = copy_to_user(ubuf, info->spare + info->read, size);
d716ff71
SRRH
6670 if (ret == size)
6671 return -EFAULT;
6672
2dc5d12b
SR
6673 size -= ret;
6674
2cadf913
SR
6675 *ppos += size;
6676 info->read += size;
6677
6678 return size;
6679}
6680
6681static int tracing_buffers_release(struct inode *inode, struct file *file)
6682{
6683 struct ftrace_buffer_info *info = file->private_data;
cc60cdc9 6684 struct trace_iterator *iter = &info->iter;
2cadf913 6685
a695cb58
SRRH
6686 mutex_lock(&trace_types_lock);
6687
cf6ab6d9
SRRH
6688 iter->tr->current_trace->ref--;
6689
ff451961 6690 __trace_array_put(iter->tr);
2cadf913 6691
ddd538f3 6692 if (info->spare)
73a757e6
SRV
6693 ring_buffer_free_read_page(iter->trace_buffer->buffer,
6694 info->spare_cpu, info->spare);
2cadf913
SR
6695 kfree(info);
6696
a695cb58
SRRH
6697 mutex_unlock(&trace_types_lock);
6698
2cadf913
SR
6699 return 0;
6700}
6701
6702struct buffer_ref {
6703 struct ring_buffer *buffer;
6704 void *page;
73a757e6 6705 int cpu;
2cadf913
SR
6706 int ref;
6707};
6708
6709static void buffer_pipe_buf_release(struct pipe_inode_info *pipe,
6710 struct pipe_buffer *buf)
6711{
6712 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
6713
6714 if (--ref->ref)
6715 return;
6716
73a757e6 6717 ring_buffer_free_read_page(ref->buffer, ref->cpu, ref->page);
2cadf913
SR
6718 kfree(ref);
6719 buf->private = 0;
6720}
6721
2cadf913
SR
6722static void buffer_pipe_buf_get(struct pipe_inode_info *pipe,
6723 struct pipe_buffer *buf)
6724{
6725 struct buffer_ref *ref = (struct buffer_ref *)buf->private;
6726
6727 ref->ref++;
6728}
6729
6730/* Pipe buffer operations for a buffer. */
28dfef8f 6731static const struct pipe_buf_operations buffer_pipe_buf_ops = {
2cadf913 6732 .can_merge = 0,
2cadf913
SR
6733 .confirm = generic_pipe_buf_confirm,
6734 .release = buffer_pipe_buf_release,
d55cb6cf 6735 .steal = generic_pipe_buf_steal,
2cadf913
SR
6736 .get = buffer_pipe_buf_get,
6737};
6738
6739/*
6740 * Callback from splice_to_pipe(), if we need to release some pages
6741 * at the end of the spd in case we error'ed out in filling the pipe.
6742 */
6743static void buffer_spd_release(struct splice_pipe_desc *spd, unsigned int i)
6744{
6745 struct buffer_ref *ref =
6746 (struct buffer_ref *)spd->partial[i].private;
6747
6748 if (--ref->ref)
6749 return;
6750
73a757e6 6751 ring_buffer_free_read_page(ref->buffer, ref->cpu, ref->page);
2cadf913
SR
6752 kfree(ref);
6753 spd->partial[i].private = 0;
6754}
6755
6756static ssize_t
6757tracing_buffers_splice_read(struct file *file, loff_t *ppos,
6758 struct pipe_inode_info *pipe, size_t len,
6759 unsigned int flags)
6760{
6761 struct ftrace_buffer_info *info = file->private_data;
cc60cdc9 6762 struct trace_iterator *iter = &info->iter;
35f3d14d
JA
6763 struct partial_page partial_def[PIPE_DEF_BUFFERS];
6764 struct page *pages_def[PIPE_DEF_BUFFERS];
2cadf913 6765 struct splice_pipe_desc spd = {
35f3d14d
JA
6766 .pages = pages_def,
6767 .partial = partial_def,
047fe360 6768 .nr_pages_max = PIPE_DEF_BUFFERS,
2cadf913
SR
6769 .ops = &buffer_pipe_buf_ops,
6770 .spd_release = buffer_spd_release,
6771 };
6772 struct buffer_ref *ref;
93459c6c 6773 int entries, size, i;
07906da7 6774 ssize_t ret = 0;
2cadf913 6775
6de58e62 6776#ifdef CONFIG_TRACER_MAX_TRACE
d716ff71
SRRH
6777 if (iter->snapshot && iter->tr->current_trace->use_max_tr)
6778 return -EBUSY;
6de58e62
SRRH
6779#endif
6780
d716ff71
SRRH
6781 if (*ppos & (PAGE_SIZE - 1))
6782 return -EINVAL;
93cfb3c9
LJ
6783
6784 if (len & (PAGE_SIZE - 1)) {
d716ff71
SRRH
6785 if (len < PAGE_SIZE)
6786 return -EINVAL;
93cfb3c9
LJ
6787 len &= PAGE_MASK;
6788 }
6789
1ae2293d
AV
6790 if (splice_grow_spd(pipe, &spd))
6791 return -ENOMEM;
6792
cc60cdc9
SR
6793 again:
6794 trace_access_lock(iter->cpu_file);
12883efb 6795 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
93459c6c 6796
a786c06d 6797 for (i = 0; i < spd.nr_pages_max && len && entries; i++, len -= PAGE_SIZE) {
2cadf913
SR
6798 struct page *page;
6799 int r;
6800
6801 ref = kzalloc(sizeof(*ref), GFP_KERNEL);
07906da7
RV
6802 if (!ref) {
6803 ret = -ENOMEM;
2cadf913 6804 break;
07906da7 6805 }
2cadf913 6806
7267fa68 6807 ref->ref = 1;
12883efb 6808 ref->buffer = iter->trace_buffer->buffer;
cc60cdc9 6809 ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
a7e52ad7
SRV
6810 if (IS_ERR(ref->page)) {
6811 ret = PTR_ERR(ref->page);
6812 ref->page = NULL;
2cadf913
SR
6813 kfree(ref);
6814 break;
6815 }
73a757e6 6816 ref->cpu = iter->cpu_file;
2cadf913
SR
6817
6818 r = ring_buffer_read_page(ref->buffer, &ref->page,
cc60cdc9 6819 len, iter->cpu_file, 1);
2cadf913 6820 if (r < 0) {
73a757e6
SRV
6821 ring_buffer_free_read_page(ref->buffer, ref->cpu,
6822 ref->page);
2cadf913
SR
6823 kfree(ref);
6824 break;
6825 }
6826
6827 /*
6828 * zero out any left over data, this is going to
6829 * user land.
6830 */
6831 size = ring_buffer_page_len(ref->page);
6832 if (size < PAGE_SIZE)
6833 memset(ref->page + size, 0, PAGE_SIZE - size);
6834
6835 page = virt_to_page(ref->page);
6836
6837 spd.pages[i] = page;
6838 spd.partial[i].len = PAGE_SIZE;
6839 spd.partial[i].offset = 0;
6840 spd.partial[i].private = (unsigned long)ref;
6841 spd.nr_pages++;
93cfb3c9 6842 *ppos += PAGE_SIZE;
93459c6c 6843
12883efb 6844 entries = ring_buffer_entries_cpu(iter->trace_buffer->buffer, iter->cpu_file);
2cadf913
SR
6845 }
6846
cc60cdc9 6847 trace_access_unlock(iter->cpu_file);
2cadf913
SR
6848 spd.nr_pages = i;
6849
6850 /* did we read anything? */
6851 if (!spd.nr_pages) {
07906da7 6852 if (ret)
1ae2293d 6853 goto out;
d716ff71 6854
1ae2293d 6855 ret = -EAGAIN;
d716ff71 6856 if ((file->f_flags & O_NONBLOCK) || (flags & SPLICE_F_NONBLOCK))
1ae2293d 6857 goto out;
07906da7 6858
e30f53aa 6859 ret = wait_on_pipe(iter, true);
8b8b3683 6860 if (ret)
1ae2293d 6861 goto out;
e30f53aa 6862
cc60cdc9 6863 goto again;
2cadf913
SR
6864 }
6865
6866 ret = splice_to_pipe(pipe, &spd);
1ae2293d 6867out:
047fe360 6868 splice_shrink_spd(&spd);
6de58e62 6869
2cadf913
SR
6870 return ret;
6871}
6872
6873static const struct file_operations tracing_buffers_fops = {
6874 .open = tracing_buffers_open,
6875 .read = tracing_buffers_read,
cc60cdc9 6876 .poll = tracing_buffers_poll,
2cadf913
SR
6877 .release = tracing_buffers_release,
6878 .splice_read = tracing_buffers_splice_read,
6879 .llseek = no_llseek,
6880};
6881
c8d77183
SR
6882static ssize_t
6883tracing_stats_read(struct file *filp, char __user *ubuf,
6884 size_t count, loff_t *ppos)
6885{
4d3435b8
ON
6886 struct inode *inode = file_inode(filp);
6887 struct trace_array *tr = inode->i_private;
12883efb 6888 struct trace_buffer *trace_buf = &tr->trace_buffer;
4d3435b8 6889 int cpu = tracing_get_cpu(inode);
c8d77183
SR
6890 struct trace_seq *s;
6891 unsigned long cnt;
c64e148a
VN
6892 unsigned long long t;
6893 unsigned long usec_rem;
c8d77183 6894
e4f2d10f 6895 s = kmalloc(sizeof(*s), GFP_KERNEL);
c8d77183 6896 if (!s)
a646365c 6897 return -ENOMEM;
c8d77183
SR
6898
6899 trace_seq_init(s);
6900
12883efb 6901 cnt = ring_buffer_entries_cpu(trace_buf->buffer, cpu);
c8d77183
SR
6902 trace_seq_printf(s, "entries: %ld\n", cnt);
6903
12883efb 6904 cnt = ring_buffer_overrun_cpu(trace_buf->buffer, cpu);
c8d77183
SR
6905 trace_seq_printf(s, "overrun: %ld\n", cnt);
6906
12883efb 6907 cnt = ring_buffer_commit_overrun_cpu(trace_buf->buffer, cpu);
c8d77183
SR
6908 trace_seq_printf(s, "commit overrun: %ld\n", cnt);
6909
12883efb 6910 cnt = ring_buffer_bytes_cpu(trace_buf->buffer, cpu);
c64e148a
VN
6911 trace_seq_printf(s, "bytes: %ld\n", cnt);
6912
58e8eedf 6913 if (trace_clocks[tr->clock_id].in_ns) {
11043d8b 6914 /* local or global for trace_clock */
12883efb 6915 t = ns2usecs(ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
11043d8b
YY
6916 usec_rem = do_div(t, USEC_PER_SEC);
6917 trace_seq_printf(s, "oldest event ts: %5llu.%06lu\n",
6918 t, usec_rem);
6919
12883efb 6920 t = ns2usecs(ring_buffer_time_stamp(trace_buf->buffer, cpu));
11043d8b
YY
6921 usec_rem = do_div(t, USEC_PER_SEC);
6922 trace_seq_printf(s, "now ts: %5llu.%06lu\n", t, usec_rem);
6923 } else {
6924 /* counter or tsc mode for trace_clock */
6925 trace_seq_printf(s, "oldest event ts: %llu\n",
12883efb 6926 ring_buffer_oldest_event_ts(trace_buf->buffer, cpu));
c64e148a 6927
11043d8b 6928 trace_seq_printf(s, "now ts: %llu\n",
12883efb 6929 ring_buffer_time_stamp(trace_buf->buffer, cpu));
11043d8b 6930 }
c64e148a 6931
12883efb 6932 cnt = ring_buffer_dropped_events_cpu(trace_buf->buffer, cpu);
884bfe89
SP
6933 trace_seq_printf(s, "dropped events: %ld\n", cnt);
6934
12883efb 6935 cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
ad964704
SRRH
6936 trace_seq_printf(s, "read events: %ld\n", cnt);
6937
5ac48378
SRRH
6938 count = simple_read_from_buffer(ubuf, count, ppos,
6939 s->buffer, trace_seq_used(s));
c8d77183
SR
6940
6941 kfree(s);
6942
6943 return count;
6944}
6945
6946static const struct file_operations tracing_stats_fops = {
4d3435b8 6947 .open = tracing_open_generic_tr,
c8d77183 6948 .read = tracing_stats_read,
b444786f 6949 .llseek = generic_file_llseek,
4d3435b8 6950 .release = tracing_release_generic_tr,
c8d77183
SR
6951};
6952
bc0c38d1
SR
6953#ifdef CONFIG_DYNAMIC_FTRACE
6954
6955static ssize_t
b807c3d0 6956tracing_read_dyn_info(struct file *filp, char __user *ubuf,
bc0c38d1
SR
6957 size_t cnt, loff_t *ppos)
6958{
6959 unsigned long *p = filp->private_data;
6a9c981b 6960 char buf[64]; /* Not too big for a shallow stack */
bc0c38d1
SR
6961 int r;
6962
6a9c981b 6963 r = scnprintf(buf, 63, "%ld", *p);
b807c3d0
SR
6964 buf[r++] = '\n';
6965
6a9c981b 6966 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
bc0c38d1
SR
6967}
6968
5e2336a0 6969static const struct file_operations tracing_dyn_info_fops = {
4bf39a94 6970 .open = tracing_open_generic,
b807c3d0 6971 .read = tracing_read_dyn_info,
b444786f 6972 .llseek = generic_file_llseek,
bc0c38d1 6973};
77fd5c15 6974#endif /* CONFIG_DYNAMIC_FTRACE */
bc0c38d1 6975
77fd5c15
SRRH
6976#if defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE)
6977static void
bca6c8d0 6978ftrace_snapshot(unsigned long ip, unsigned long parent_ip,
b5f081b5 6979 struct trace_array *tr, struct ftrace_probe_ops *ops,
6e444319 6980 void *data)
77fd5c15 6981{
cab50379 6982 tracing_snapshot_instance(tr);
77fd5c15 6983}
bc0c38d1 6984
77fd5c15 6985static void
bca6c8d0 6986ftrace_count_snapshot(unsigned long ip, unsigned long parent_ip,
b5f081b5 6987 struct trace_array *tr, struct ftrace_probe_ops *ops,
6e444319 6988 void *data)
bc0c38d1 6989{
6e444319 6990 struct ftrace_func_mapper *mapper = data;
1a93f8bd 6991 long *count = NULL;
77fd5c15 6992
1a93f8bd
SRV
6993 if (mapper)
6994 count = (long *)ftrace_func_mapper_find_ip(mapper, ip);
6995
6996 if (count) {
6997
6998 if (*count <= 0)
6999 return;
bc0c38d1 7000
77fd5c15 7001 (*count)--;
1a93f8bd 7002 }
77fd5c15 7003
cab50379 7004 tracing_snapshot_instance(tr);
77fd5c15
SRRH
7005}
7006
7007static int
7008ftrace_snapshot_print(struct seq_file *m, unsigned long ip,
7009 struct ftrace_probe_ops *ops, void *data)
7010{
6e444319 7011 struct ftrace_func_mapper *mapper = data;
1a93f8bd 7012 long *count = NULL;
77fd5c15
SRRH
7013
7014 seq_printf(m, "%ps:", (void *)ip);
7015
fa6f0cc7 7016 seq_puts(m, "snapshot");
77fd5c15 7017
1a93f8bd
SRV
7018 if (mapper)
7019 count = (long *)ftrace_func_mapper_find_ip(mapper, ip);
7020
7021 if (count)
7022 seq_printf(m, ":count=%ld\n", *count);
77fd5c15 7023 else
1a93f8bd 7024 seq_puts(m, ":unlimited\n");
77fd5c15
SRRH
7025
7026 return 0;
7027}
7028
1a93f8bd 7029static int
b5f081b5 7030ftrace_snapshot_init(struct ftrace_probe_ops *ops, struct trace_array *tr,
6e444319 7031 unsigned long ip, void *init_data, void **data)
1a93f8bd 7032{
6e444319
SRV
7033 struct ftrace_func_mapper *mapper = *data;
7034
7035 if (!mapper) {
7036 mapper = allocate_ftrace_func_mapper();
7037 if (!mapper)
7038 return -ENOMEM;
7039 *data = mapper;
7040 }
1a93f8bd 7041
6e444319 7042 return ftrace_func_mapper_add_ip(mapper, ip, init_data);
1a93f8bd
SRV
7043}
7044
7045static void
b5f081b5 7046ftrace_snapshot_free(struct ftrace_probe_ops *ops, struct trace_array *tr,
6e444319 7047 unsigned long ip, void *data)
1a93f8bd 7048{
6e444319
SRV
7049 struct ftrace_func_mapper *mapper = data;
7050
7051 if (!ip) {
7052 if (!mapper)
7053 return;
7054 free_ftrace_func_mapper(mapper, NULL);
7055 return;
7056 }
1a93f8bd
SRV
7057
7058 ftrace_func_mapper_remove_ip(mapper, ip);
7059}
7060
77fd5c15
SRRH
7061static struct ftrace_probe_ops snapshot_probe_ops = {
7062 .func = ftrace_snapshot,
7063 .print = ftrace_snapshot_print,
7064};
7065
7066static struct ftrace_probe_ops snapshot_count_probe_ops = {
7067 .func = ftrace_count_snapshot,
7068 .print = ftrace_snapshot_print,
1a93f8bd
SRV
7069 .init = ftrace_snapshot_init,
7070 .free = ftrace_snapshot_free,
77fd5c15
SRRH
7071};
7072
7073static int
04ec7bb6 7074ftrace_trace_snapshot_callback(struct trace_array *tr, struct ftrace_hash *hash,
77fd5c15
SRRH
7075 char *glob, char *cmd, char *param, int enable)
7076{
7077 struct ftrace_probe_ops *ops;
7078 void *count = (void *)-1;
7079 char *number;
7080 int ret;
7081
0f179765
SRV
7082 if (!tr)
7083 return -ENODEV;
7084
77fd5c15
SRRH
7085 /* hash funcs only work with set_ftrace_filter */
7086 if (!enable)
7087 return -EINVAL;
7088
7089 ops = param ? &snapshot_count_probe_ops : &snapshot_probe_ops;
7090
d3d532d7 7091 if (glob[0] == '!')
7b60f3d8 7092 return unregister_ftrace_function_probe_func(glob+1, tr, ops);
77fd5c15
SRRH
7093
7094 if (!param)
7095 goto out_reg;
7096
7097 number = strsep(&param, ":");
7098
7099 if (!strlen(number))
7100 goto out_reg;
7101
7102 /*
7103 * We use the callback data field (which is a pointer)
7104 * as our counter.
7105 */
7106 ret = kstrtoul(number, 0, (unsigned long *)&count);
7107 if (ret)
7108 return ret;
7109
7110 out_reg:
4c174688 7111 ret = alloc_snapshot(tr);
df62db5b
SRV
7112 if (ret < 0)
7113 goto out;
77fd5c15 7114
4c174688 7115 ret = register_ftrace_function_probe(glob, tr, ops, count);
77fd5c15 7116
df62db5b 7117 out:
77fd5c15
SRRH
7118 return ret < 0 ? ret : 0;
7119}
7120
7121static struct ftrace_func_command ftrace_snapshot_cmd = {
7122 .name = "snapshot",
7123 .func = ftrace_trace_snapshot_callback,
7124};
7125
38de93ab 7126static __init int register_snapshot_cmd(void)
77fd5c15
SRRH
7127{
7128 return register_ftrace_command(&ftrace_snapshot_cmd);
7129}
7130#else
38de93ab 7131static inline __init int register_snapshot_cmd(void) { return 0; }
77fd5c15 7132#endif /* defined(CONFIG_TRACER_SNAPSHOT) && defined(CONFIG_DYNAMIC_FTRACE) */
bc0c38d1 7133
7eeafbca 7134static struct dentry *tracing_get_dentry(struct trace_array *tr)
bc0c38d1 7135{
8434dc93
SRRH
7136 if (WARN_ON(!tr->dir))
7137 return ERR_PTR(-ENODEV);
7138
7139 /* Top directory uses NULL as the parent */
7140 if (tr->flags & TRACE_ARRAY_FL_GLOBAL)
7141 return NULL;
7142
7143 /* All sub buffers have a descriptor */
2b6080f2 7144 return tr->dir;
bc0c38d1
SR
7145}
7146
2b6080f2 7147static struct dentry *tracing_dentry_percpu(struct trace_array *tr, int cpu)
b04cc6b1 7148{
b04cc6b1
FW
7149 struct dentry *d_tracer;
7150
2b6080f2
SR
7151 if (tr->percpu_dir)
7152 return tr->percpu_dir;
b04cc6b1 7153
7eeafbca 7154 d_tracer = tracing_get_dentry(tr);
14a5ae40 7155 if (IS_ERR(d_tracer))
b04cc6b1
FW
7156 return NULL;
7157
8434dc93 7158 tr->percpu_dir = tracefs_create_dir("per_cpu", d_tracer);
b04cc6b1 7159
2b6080f2 7160 WARN_ONCE(!tr->percpu_dir,
8434dc93 7161 "Could not create tracefs directory 'per_cpu/%d'\n", cpu);
b04cc6b1 7162
2b6080f2 7163 return tr->percpu_dir;
b04cc6b1
FW
7164}
7165
649e9c70
ON
7166static struct dentry *
7167trace_create_cpu_file(const char *name, umode_t mode, struct dentry *parent,
7168 void *data, long cpu, const struct file_operations *fops)
7169{
7170 struct dentry *ret = trace_create_file(name, mode, parent, data, fops);
7171
7172 if (ret) /* See tracing_get_cpu() */
7682c918 7173 d_inode(ret)->i_cdev = (void *)(cpu + 1);
649e9c70
ON
7174 return ret;
7175}
7176
2b6080f2 7177static void
8434dc93 7178tracing_init_tracefs_percpu(struct trace_array *tr, long cpu)
b04cc6b1 7179{
2b6080f2 7180 struct dentry *d_percpu = tracing_dentry_percpu(tr, cpu);
5452af66 7181 struct dentry *d_cpu;
dd49a38c 7182 char cpu_dir[30]; /* 30 characters should be more than enough */
b04cc6b1 7183
0a3d7ce7
NK
7184 if (!d_percpu)
7185 return;
7186
dd49a38c 7187 snprintf(cpu_dir, 30, "cpu%ld", cpu);
8434dc93 7188 d_cpu = tracefs_create_dir(cpu_dir, d_percpu);
8656e7a2 7189 if (!d_cpu) {
a395d6a7 7190 pr_warn("Could not create tracefs '%s' entry\n", cpu_dir);
8656e7a2
FW
7191 return;
7192 }
b04cc6b1 7193
8656e7a2 7194 /* per cpu trace_pipe */
649e9c70 7195 trace_create_cpu_file("trace_pipe", 0444, d_cpu,
15544209 7196 tr, cpu, &tracing_pipe_fops);
b04cc6b1
FW
7197
7198 /* per cpu trace */
649e9c70 7199 trace_create_cpu_file("trace", 0644, d_cpu,
6484c71c 7200 tr, cpu, &tracing_fops);
7f96f93f 7201
649e9c70 7202 trace_create_cpu_file("trace_pipe_raw", 0444, d_cpu,
46ef2be0 7203 tr, cpu, &tracing_buffers_fops);
7f96f93f 7204
649e9c70 7205 trace_create_cpu_file("stats", 0444, d_cpu,
4d3435b8 7206 tr, cpu, &tracing_stats_fops);
438ced17 7207
649e9c70 7208 trace_create_cpu_file("buffer_size_kb", 0444, d_cpu,
0bc392ee 7209 tr, cpu, &tracing_entries_fops);
f1affcaa
SRRH
7210
7211#ifdef CONFIG_TRACER_SNAPSHOT
649e9c70 7212 trace_create_cpu_file("snapshot", 0644, d_cpu,
6484c71c 7213 tr, cpu, &snapshot_fops);
6de58e62 7214
649e9c70 7215 trace_create_cpu_file("snapshot_raw", 0444, d_cpu,
46ef2be0 7216 tr, cpu, &snapshot_raw_fops);
f1affcaa 7217#endif
b04cc6b1
FW
7218}
7219
60a11774
SR
7220#ifdef CONFIG_FTRACE_SELFTEST
7221/* Let selftest have access to static functions in this file */
7222#include "trace_selftest.c"
7223#endif
7224
577b785f
SR
7225static ssize_t
7226trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
7227 loff_t *ppos)
7228{
7229 struct trace_option_dentry *topt = filp->private_data;
7230 char *buf;
7231
7232 if (topt->flags->val & topt->opt->bit)
7233 buf = "1\n";
7234 else
7235 buf = "0\n";
7236
7237 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
7238}
7239
7240static ssize_t
7241trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
7242 loff_t *ppos)
7243{
7244 struct trace_option_dentry *topt = filp->private_data;
7245 unsigned long val;
577b785f
SR
7246 int ret;
7247
22fe9b54
PH
7248 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
7249 if (ret)
577b785f
SR
7250 return ret;
7251
8d18eaaf
LZ
7252 if (val != 0 && val != 1)
7253 return -EINVAL;
577b785f 7254
8d18eaaf 7255 if (!!(topt->flags->val & topt->opt->bit) != val) {
577b785f 7256 mutex_lock(&trace_types_lock);
8c1a49ae 7257 ret = __set_tracer_option(topt->tr, topt->flags,
c757bea9 7258 topt->opt, !val);
577b785f
SR
7259 mutex_unlock(&trace_types_lock);
7260 if (ret)
7261 return ret;
577b785f
SR
7262 }
7263
7264 *ppos += cnt;
7265
7266 return cnt;
7267}
7268
7269
7270static const struct file_operations trace_options_fops = {
7271 .open = tracing_open_generic,
7272 .read = trace_options_read,
7273 .write = trace_options_write,
b444786f 7274 .llseek = generic_file_llseek,
577b785f
SR
7275};
7276
9a38a885
SRRH
7277/*
7278 * In order to pass in both the trace_array descriptor as well as the index
7279 * to the flag that the trace option file represents, the trace_array
7280 * has a character array of trace_flags_index[], which holds the index
7281 * of the bit for the flag it represents. index[0] == 0, index[1] == 1, etc.
7282 * The address of this character array is passed to the flag option file
7283 * read/write callbacks.
7284 *
7285 * In order to extract both the index and the trace_array descriptor,
7286 * get_tr_index() uses the following algorithm.
7287 *
7288 * idx = *ptr;
7289 *
7290 * As the pointer itself contains the address of the index (remember
7291 * index[1] == 1).
7292 *
7293 * Then to get the trace_array descriptor, by subtracting that index
7294 * from the ptr, we get to the start of the index itself.
7295 *
7296 * ptr - idx == &index[0]
7297 *
7298 * Then a simple container_of() from that pointer gets us to the
7299 * trace_array descriptor.
7300 */
7301static void get_tr_index(void *data, struct trace_array **ptr,
7302 unsigned int *pindex)
7303{
7304 *pindex = *(unsigned char *)data;
7305
7306 *ptr = container_of(data - *pindex, struct trace_array,
7307 trace_flags_index);
7308}
7309
a8259075
SR
7310static ssize_t
7311trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
7312 loff_t *ppos)
7313{
9a38a885
SRRH
7314 void *tr_index = filp->private_data;
7315 struct trace_array *tr;
7316 unsigned int index;
a8259075
SR
7317 char *buf;
7318
9a38a885
SRRH
7319 get_tr_index(tr_index, &tr, &index);
7320
7321 if (tr->trace_flags & (1 << index))
a8259075
SR
7322 buf = "1\n";
7323 else
7324 buf = "0\n";
7325
7326 return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
7327}
7328
7329static ssize_t
7330trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
7331 loff_t *ppos)
7332{
9a38a885
SRRH
7333 void *tr_index = filp->private_data;
7334 struct trace_array *tr;
7335 unsigned int index;
a8259075
SR
7336 unsigned long val;
7337 int ret;
7338
9a38a885
SRRH
7339 get_tr_index(tr_index, &tr, &index);
7340
22fe9b54
PH
7341 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
7342 if (ret)
a8259075
SR
7343 return ret;
7344
f2d84b65 7345 if (val != 0 && val != 1)
a8259075 7346 return -EINVAL;
69d34da2
SRRH
7347
7348 mutex_lock(&trace_types_lock);
2b6080f2 7349 ret = set_tracer_flag(tr, 1 << index, val);
69d34da2 7350 mutex_unlock(&trace_types_lock);
a8259075 7351
613f04a0
SRRH
7352 if (ret < 0)
7353 return ret;
7354
a8259075
SR
7355 *ppos += cnt;
7356
7357 return cnt;
7358}
7359
a8259075
SR
7360static const struct file_operations trace_options_core_fops = {
7361 .open = tracing_open_generic,
7362 .read = trace_options_core_read,
7363 .write = trace_options_core_write,
b444786f 7364 .llseek = generic_file_llseek,
a8259075
SR
7365};
7366
5452af66 7367struct dentry *trace_create_file(const char *name,
f4ae40a6 7368 umode_t mode,
5452af66
FW
7369 struct dentry *parent,
7370 void *data,
7371 const struct file_operations *fops)
7372{
7373 struct dentry *ret;
7374
8434dc93 7375 ret = tracefs_create_file(name, mode, parent, data, fops);
5452af66 7376 if (!ret)
a395d6a7 7377 pr_warn("Could not create tracefs '%s' entry\n", name);
5452af66
FW
7378
7379 return ret;
7380}
7381
7382
2b6080f2 7383static struct dentry *trace_options_init_dentry(struct trace_array *tr)
a8259075
SR
7384{
7385 struct dentry *d_tracer;
a8259075 7386
2b6080f2
SR
7387 if (tr->options)
7388 return tr->options;
a8259075 7389
7eeafbca 7390 d_tracer = tracing_get_dentry(tr);
14a5ae40 7391 if (IS_ERR(d_tracer))
a8259075
SR
7392 return NULL;
7393
8434dc93 7394 tr->options = tracefs_create_dir("options", d_tracer);
2b6080f2 7395 if (!tr->options) {
a395d6a7 7396 pr_warn("Could not create tracefs directory 'options'\n");
a8259075
SR
7397 return NULL;
7398 }
7399
2b6080f2 7400 return tr->options;
a8259075
SR
7401}
7402
577b785f 7403static void
2b6080f2
SR
7404create_trace_option_file(struct trace_array *tr,
7405 struct trace_option_dentry *topt,
577b785f
SR
7406 struct tracer_flags *flags,
7407 struct tracer_opt *opt)
7408{
7409 struct dentry *t_options;
577b785f 7410
2b6080f2 7411 t_options = trace_options_init_dentry(tr);
577b785f
SR
7412 if (!t_options)
7413 return;
7414
7415 topt->flags = flags;
7416 topt->opt = opt;
2b6080f2 7417 topt->tr = tr;
577b785f 7418
5452af66 7419 topt->entry = trace_create_file(opt->name, 0644, t_options, topt,
577b785f
SR
7420 &trace_options_fops);
7421
577b785f
SR
7422}
7423
37aea98b 7424static void
2b6080f2 7425create_trace_option_files(struct trace_array *tr, struct tracer *tracer)
577b785f
SR
7426{
7427 struct trace_option_dentry *topts;
37aea98b 7428 struct trace_options *tr_topts;
577b785f
SR
7429 struct tracer_flags *flags;
7430 struct tracer_opt *opts;
7431 int cnt;
37aea98b 7432 int i;
577b785f
SR
7433
7434 if (!tracer)
37aea98b 7435 return;
577b785f
SR
7436
7437 flags = tracer->flags;
7438
7439 if (!flags || !flags->opts)
37aea98b
SRRH
7440 return;
7441
7442 /*
7443 * If this is an instance, only create flags for tracers
7444 * the instance may have.
7445 */
7446 if (!trace_ok_for_array(tracer, tr))
7447 return;
7448
7449 for (i = 0; i < tr->nr_topts; i++) {
d39cdd20
CH
7450 /* Make sure there's no duplicate flags. */
7451 if (WARN_ON_ONCE(tr->topts[i].tracer->flags == tracer->flags))
37aea98b
SRRH
7452 return;
7453 }
577b785f
SR
7454
7455 opts = flags->opts;
7456
7457 for (cnt = 0; opts[cnt].name; cnt++)
7458 ;
7459
0cfe8245 7460 topts = kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL);
577b785f 7461 if (!topts)
37aea98b
SRRH
7462 return;
7463
7464 tr_topts = krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1),
7465 GFP_KERNEL);
7466 if (!tr_topts) {
7467 kfree(topts);
7468 return;
7469 }
7470
7471 tr->topts = tr_topts;
7472 tr->topts[tr->nr_topts].tracer = tracer;
7473 tr->topts[tr->nr_topts].topts = topts;
7474 tr->nr_topts++;
577b785f 7475
41d9c0be 7476 for (cnt = 0; opts[cnt].name; cnt++) {
2b6080f2 7477 create_trace_option_file(tr, &topts[cnt], flags,
577b785f 7478 &opts[cnt]);
41d9c0be
SRRH
7479 WARN_ONCE(topts[cnt].entry == NULL,
7480 "Failed to create trace option: %s",
7481 opts[cnt].name);
7482 }
577b785f
SR
7483}
7484
a8259075 7485static struct dentry *
2b6080f2
SR
7486create_trace_option_core_file(struct trace_array *tr,
7487 const char *option, long index)
a8259075
SR
7488{
7489 struct dentry *t_options;
a8259075 7490
2b6080f2 7491 t_options = trace_options_init_dentry(tr);
a8259075
SR
7492 if (!t_options)
7493 return NULL;
7494
9a38a885
SRRH
7495 return trace_create_file(option, 0644, t_options,
7496 (void *)&tr->trace_flags_index[index],
7497 &trace_options_core_fops);
a8259075
SR
7498}
7499
16270145 7500static void create_trace_options_dir(struct trace_array *tr)
a8259075
SR
7501{
7502 struct dentry *t_options;
16270145 7503 bool top_level = tr == &global_trace;
a8259075
SR
7504 int i;
7505
2b6080f2 7506 t_options = trace_options_init_dentry(tr);
a8259075
SR
7507 if (!t_options)
7508 return;
7509
16270145
SRRH
7510 for (i = 0; trace_options[i]; i++) {
7511 if (top_level ||
7512 !((1 << i) & TOP_LEVEL_TRACE_FLAGS))
7513 create_trace_option_core_file(tr, trace_options[i], i);
7514 }
a8259075
SR
7515}
7516
499e5470
SR
7517static ssize_t
7518rb_simple_read(struct file *filp, char __user *ubuf,
7519 size_t cnt, loff_t *ppos)
7520{
348f0fc2 7521 struct trace_array *tr = filp->private_data;
499e5470
SR
7522 char buf[64];
7523 int r;
7524
10246fa3 7525 r = tracer_tracing_is_on(tr);
499e5470
SR
7526 r = sprintf(buf, "%d\n", r);
7527
7528 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
7529}
7530
7531static ssize_t
7532rb_simple_write(struct file *filp, const char __user *ubuf,
7533 size_t cnt, loff_t *ppos)
7534{
348f0fc2 7535 struct trace_array *tr = filp->private_data;
12883efb 7536 struct ring_buffer *buffer = tr->trace_buffer.buffer;
499e5470
SR
7537 unsigned long val;
7538 int ret;
7539
7540 ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
7541 if (ret)
7542 return ret;
7543
7544 if (buffer) {
2df8f8a6
SR
7545 mutex_lock(&trace_types_lock);
7546 if (val) {
10246fa3 7547 tracer_tracing_on(tr);
2b6080f2
SR
7548 if (tr->current_trace->start)
7549 tr->current_trace->start(tr);
2df8f8a6 7550 } else {
10246fa3 7551 tracer_tracing_off(tr);
2b6080f2
SR
7552 if (tr->current_trace->stop)
7553 tr->current_trace->stop(tr);
2df8f8a6
SR
7554 }
7555 mutex_unlock(&trace_types_lock);
499e5470
SR
7556 }
7557
7558 (*ppos)++;
7559
7560 return cnt;
7561}
7562
7563static const struct file_operations rb_simple_fops = {
7b85af63 7564 .open = tracing_open_generic_tr,
499e5470
SR
7565 .read = rb_simple_read,
7566 .write = rb_simple_write,
7b85af63 7567 .release = tracing_release_generic_tr,
499e5470
SR
7568 .llseek = default_llseek,
7569};
7570
277ba044
SR
7571struct dentry *trace_instance_dir;
7572
7573static void
8434dc93 7574init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
277ba044 7575
55034cd6
SRRH
7576static int
7577allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size)
277ba044
SR
7578{
7579 enum ring_buffer_flags rb_flags;
737223fb 7580
983f938a 7581 rb_flags = tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0;
737223fb 7582
dced341b
SRRH
7583 buf->tr = tr;
7584
55034cd6
SRRH
7585 buf->buffer = ring_buffer_alloc(size, rb_flags);
7586 if (!buf->buffer)
7587 return -ENOMEM;
737223fb 7588
55034cd6
SRRH
7589 buf->data = alloc_percpu(struct trace_array_cpu);
7590 if (!buf->data) {
7591 ring_buffer_free(buf->buffer);
7592 return -ENOMEM;
7593 }
737223fb 7594
737223fb
SRRH
7595 /* Allocate the first page for all buffers */
7596 set_buffer_entries(&tr->trace_buffer,
7597 ring_buffer_size(tr->trace_buffer.buffer, 0));
7598
55034cd6
SRRH
7599 return 0;
7600}
737223fb 7601
55034cd6
SRRH
7602static int allocate_trace_buffers(struct trace_array *tr, int size)
7603{
7604 int ret;
737223fb 7605
55034cd6
SRRH
7606 ret = allocate_trace_buffer(tr, &tr->trace_buffer, size);
7607 if (ret)
7608 return ret;
737223fb 7609
55034cd6
SRRH
7610#ifdef CONFIG_TRACER_MAX_TRACE
7611 ret = allocate_trace_buffer(tr, &tr->max_buffer,
7612 allocate_snapshot ? size : 1);
7613 if (WARN_ON(ret)) {
737223fb 7614 ring_buffer_free(tr->trace_buffer.buffer);
55034cd6
SRRH
7615 free_percpu(tr->trace_buffer.data);
7616 return -ENOMEM;
7617 }
7618 tr->allocated_snapshot = allocate_snapshot;
737223fb 7619
55034cd6
SRRH
7620 /*
7621 * Only the top level trace array gets its snapshot allocated
7622 * from the kernel command line.
7623 */
7624 allocate_snapshot = false;
737223fb 7625#endif
55034cd6 7626 return 0;
737223fb
SRRH
7627}
7628
f0b70cc4
SRRH
7629static void free_trace_buffer(struct trace_buffer *buf)
7630{
7631 if (buf->buffer) {
7632 ring_buffer_free(buf->buffer);
7633 buf->buffer = NULL;
7634 free_percpu(buf->data);
7635 buf->data = NULL;
7636 }
7637}
7638
23aaa3c1
SRRH
7639static void free_trace_buffers(struct trace_array *tr)
7640{
7641 if (!tr)
7642 return;
7643
f0b70cc4 7644 free_trace_buffer(&tr->trace_buffer);
23aaa3c1
SRRH
7645
7646#ifdef CONFIG_TRACER_MAX_TRACE
f0b70cc4 7647 free_trace_buffer(&tr->max_buffer);
23aaa3c1
SRRH
7648#endif
7649}
7650
9a38a885
SRRH
7651static void init_trace_flags_index(struct trace_array *tr)
7652{
7653 int i;
7654
7655 /* Used by the trace options files */
7656 for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++)
7657 tr->trace_flags_index[i] = i;
7658}
7659
37aea98b
SRRH
7660static void __update_tracer_options(struct trace_array *tr)
7661{
7662 struct tracer *t;
7663
7664 for (t = trace_types; t; t = t->next)
7665 add_tracer_options(tr, t);
7666}
7667
7668static void update_tracer_options(struct trace_array *tr)
7669{
7670 mutex_lock(&trace_types_lock);
7671 __update_tracer_options(tr);
7672 mutex_unlock(&trace_types_lock);
7673}
7674
eae47358 7675static int instance_mkdir(const char *name)
737223fb 7676{
277ba044
SR
7677 struct trace_array *tr;
7678 int ret;
277ba044
SR
7679
7680 mutex_lock(&trace_types_lock);
7681
7682 ret = -EEXIST;
7683 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
7684 if (tr->name && strcmp(tr->name, name) == 0)
7685 goto out_unlock;
7686 }
7687
7688 ret = -ENOMEM;
7689 tr = kzalloc(sizeof(*tr), GFP_KERNEL);
7690 if (!tr)
7691 goto out_unlock;
7692
7693 tr->name = kstrdup(name, GFP_KERNEL);
7694 if (!tr->name)
7695 goto out_free_tr;
7696
ccfe9e42
AL
7697 if (!alloc_cpumask_var(&tr->tracing_cpumask, GFP_KERNEL))
7698 goto out_free_tr;
7699
20550622 7700 tr->trace_flags = global_trace.trace_flags & ~ZEROED_TRACE_FLAGS;
983f938a 7701
ccfe9e42
AL
7702 cpumask_copy(tr->tracing_cpumask, cpu_all_mask);
7703
277ba044
SR
7704 raw_spin_lock_init(&tr->start_lock);
7705
0b9b12c1
SRRH
7706 tr->max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
7707
277ba044
SR
7708 tr->current_trace = &nop_trace;
7709
7710 INIT_LIST_HEAD(&tr->systems);
7711 INIT_LIST_HEAD(&tr->events);
7712
737223fb 7713 if (allocate_trace_buffers(tr, trace_buf_size) < 0)
277ba044
SR
7714 goto out_free_tr;
7715
8434dc93 7716 tr->dir = tracefs_create_dir(name, trace_instance_dir);
277ba044
SR
7717 if (!tr->dir)
7718 goto out_free_tr;
7719
7720 ret = event_trace_add_tracer(tr->dir, tr);
609e85a7 7721 if (ret) {
8434dc93 7722 tracefs_remove_recursive(tr->dir);
277ba044 7723 goto out_free_tr;
609e85a7 7724 }
277ba044 7725
04ec7bb6
SRV
7726 ftrace_init_trace_array(tr);
7727
8434dc93 7728 init_tracer_tracefs(tr, tr->dir);
9a38a885 7729 init_trace_flags_index(tr);
37aea98b 7730 __update_tracer_options(tr);
277ba044
SR
7731
7732 list_add(&tr->list, &ftrace_trace_arrays);
7733
7734 mutex_unlock(&trace_types_lock);
7735
7736 return 0;
7737
7738 out_free_tr:
23aaa3c1 7739 free_trace_buffers(tr);
ccfe9e42 7740 free_cpumask_var(tr->tracing_cpumask);
277ba044
SR
7741 kfree(tr->name);
7742 kfree(tr);
7743
7744 out_unlock:
7745 mutex_unlock(&trace_types_lock);
7746
7747 return ret;
7748
7749}
7750
eae47358 7751static int instance_rmdir(const char *name)
0c8916c3
SR
7752{
7753 struct trace_array *tr;
7754 int found = 0;
7755 int ret;
37aea98b 7756 int i;
0c8916c3
SR
7757
7758 mutex_lock(&trace_types_lock);
7759
7760 ret = -ENODEV;
7761 list_for_each_entry(tr, &ftrace_trace_arrays, list) {
7762 if (tr->name && strcmp(tr->name, name) == 0) {
7763 found = 1;
7764 break;
7765 }
7766 }
7767 if (!found)
7768 goto out_unlock;
7769
a695cb58 7770 ret = -EBUSY;
cf6ab6d9 7771 if (tr->ref || (tr->current_trace && tr->current_trace->ref))
a695cb58
SRRH
7772 goto out_unlock;
7773
0c8916c3
SR
7774 list_del(&tr->list);
7775
20550622
SRRH
7776 /* Disable all the flags that were enabled coming in */
7777 for (i = 0; i < TRACE_FLAGS_MAX_SIZE; i++) {
7778 if ((1 << i) & ZEROED_TRACE_FLAGS)
7779 set_tracer_flag(tr, 1 << i, 0);
7780 }
7781
6b450d25 7782 tracing_set_nop(tr);
a0e6369e 7783 clear_ftrace_function_probes(tr);
0c8916c3 7784 event_trace_del_tracer(tr);
d879d0b8 7785 ftrace_clear_pids(tr);
591dffda 7786 ftrace_destroy_function_files(tr);
681a4a2f 7787 tracefs_remove_recursive(tr->dir);
a9fcaaac 7788 free_trace_buffers(tr);
0c8916c3 7789
37aea98b
SRRH
7790 for (i = 0; i < tr->nr_topts; i++) {
7791 kfree(tr->topts[i].topts);
7792 }
7793 kfree(tr->topts);
7794
db9108e0 7795 free_cpumask_var(tr->tracing_cpumask);
0c8916c3
SR
7796 kfree(tr->name);
7797 kfree(tr);
7798
7799 ret = 0;
7800
7801 out_unlock:
7802 mutex_unlock(&trace_types_lock);
7803
7804 return ret;
7805}
7806
277ba044
SR
7807static __init void create_trace_instances(struct dentry *d_tracer)
7808{
eae47358
SRRH
7809 trace_instance_dir = tracefs_create_instance_dir("instances", d_tracer,
7810 instance_mkdir,
7811 instance_rmdir);
277ba044
SR
7812 if (WARN_ON(!trace_instance_dir))
7813 return;
277ba044
SR
7814}
7815
2b6080f2 7816static void
8434dc93 7817init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer)
2b6080f2 7818{
121aaee7 7819 int cpu;
2b6080f2 7820
607e2ea1
SRRH
7821 trace_create_file("available_tracers", 0444, d_tracer,
7822 tr, &show_traces_fops);
7823
7824 trace_create_file("current_tracer", 0644, d_tracer,
7825 tr, &set_tracer_fops);
7826
ccfe9e42
AL
7827 trace_create_file("tracing_cpumask", 0644, d_tracer,
7828 tr, &tracing_cpumask_fops);
7829
2b6080f2
SR
7830 trace_create_file("trace_options", 0644, d_tracer,
7831 tr, &tracing_iter_fops);
7832
7833 trace_create_file("trace", 0644, d_tracer,
6484c71c 7834 tr, &tracing_fops);
2b6080f2
SR
7835
7836 trace_create_file("trace_pipe", 0444, d_tracer,
15544209 7837 tr, &tracing_pipe_fops);
2b6080f2
SR
7838
7839 trace_create_file("buffer_size_kb", 0644, d_tracer,
0bc392ee 7840 tr, &tracing_entries_fops);
2b6080f2
SR
7841
7842 trace_create_file("buffer_total_size_kb", 0444, d_tracer,
7843 tr, &tracing_total_entries_fops);
7844
238ae93d 7845 trace_create_file("free_buffer", 0200, d_tracer,
2b6080f2
SR
7846 tr, &tracing_free_buffer_fops);
7847
7848 trace_create_file("trace_marker", 0220, d_tracer,
7849 tr, &tracing_mark_fops);
7850
fa32e855
SR
7851 trace_create_file("trace_marker_raw", 0220, d_tracer,
7852 tr, &tracing_mark_raw_fops);
7853
2b6080f2
SR
7854 trace_create_file("trace_clock", 0644, d_tracer, tr,
7855 &trace_clock_fops);
7856
7857 trace_create_file("tracing_on", 0644, d_tracer,
6484c71c 7858 tr, &rb_simple_fops);
ce9bae55 7859
16270145
SRRH
7860 create_trace_options_dir(tr);
7861
f971cc9a 7862#if defined(CONFIG_TRACER_MAX_TRACE) || defined(CONFIG_HWLAT_TRACER)
6d9b3fa5
SRRH
7863 trace_create_file("tracing_max_latency", 0644, d_tracer,
7864 &tr->max_latency, &tracing_max_lat_fops);
7865#endif
7866
591dffda
SRRH
7867 if (ftrace_create_function_files(tr, d_tracer))
7868 WARN(1, "Could not allocate function filter files");
7869
ce9bae55
SRRH
7870#ifdef CONFIG_TRACER_SNAPSHOT
7871 trace_create_file("snapshot", 0644, d_tracer,
6484c71c 7872 tr, &snapshot_fops);
ce9bae55 7873#endif
121aaee7
SRRH
7874
7875 for_each_tracing_cpu(cpu)
8434dc93 7876 tracing_init_tracefs_percpu(tr, cpu);
121aaee7 7877
345ddcc8 7878 ftrace_init_tracefs(tr, d_tracer);
2b6080f2
SR
7879}
7880
93faccbb 7881static struct vfsmount *trace_automount(struct dentry *mntpt, void *ingore)
f76180bc
SRRH
7882{
7883 struct vfsmount *mnt;
7884 struct file_system_type *type;
7885
7886 /*
7887 * To maintain backward compatibility for tools that mount
7888 * debugfs to get to the tracing facility, tracefs is automatically
7889 * mounted to the debugfs/tracing directory.
7890 */
7891 type = get_fs_type("tracefs");
7892 if (!type)
7893 return NULL;
93faccbb 7894 mnt = vfs_submount(mntpt, type, "tracefs", NULL);
f76180bc
SRRH
7895 put_filesystem(type);
7896 if (IS_ERR(mnt))
7897 return NULL;
7898 mntget(mnt);
7899
7900 return mnt;
7901}
7902
7eeafbca
SRRH
7903/**
7904 * tracing_init_dentry - initialize top level trace array
7905 *
7906 * This is called when creating files or directories in the tracing
7907 * directory. It is called via fs_initcall() by any of the boot up code
7908 * and expects to return the dentry of the top level tracing directory.
7909 */
7910struct dentry *tracing_init_dentry(void)
7911{
7912 struct trace_array *tr = &global_trace;
7913
f76180bc 7914 /* The top level trace array uses NULL as parent */
7eeafbca 7915 if (tr->dir)
f76180bc 7916 return NULL;
7eeafbca 7917
8b129199
JW
7918 if (WARN_ON(!tracefs_initialized()) ||
7919 (IS_ENABLED(CONFIG_DEBUG_FS) &&
7920 WARN_ON(!debugfs_initialized())))
7eeafbca
SRRH
7921 return ERR_PTR(-ENODEV);
7922
f76180bc
SRRH
7923 /*
7924 * As there may still be users that expect the tracing
7925 * files to exist in debugfs/tracing, we must automount
7926 * the tracefs file system there, so older tools still
7927 * work with the newer kerenl.
7928 */
7929 tr->dir = debugfs_create_automount("tracing", NULL,
7930 trace_automount, NULL);
7eeafbca
SRRH
7931 if (!tr->dir) {
7932 pr_warn_once("Could not create debugfs directory 'tracing'\n");
7933 return ERR_PTR(-ENOMEM);
7934 }
7935
8434dc93 7936 return NULL;
7eeafbca
SRRH
7937}
7938
00f4b652
JL
7939extern struct trace_eval_map *__start_ftrace_eval_maps[];
7940extern struct trace_eval_map *__stop_ftrace_eval_maps[];
0c564a53 7941
5f60b351 7942static void __init trace_eval_init(void)
0c564a53 7943{
3673b8e4
SRRH
7944 int len;
7945
02fd7f68 7946 len = __stop_ftrace_eval_maps - __start_ftrace_eval_maps;
f57a4143 7947 trace_insert_eval_map(NULL, __start_ftrace_eval_maps, len);
3673b8e4
SRRH
7948}
7949
7950#ifdef CONFIG_MODULES
f57a4143 7951static void trace_module_add_evals(struct module *mod)
3673b8e4 7952{
99be647c 7953 if (!mod->num_trace_evals)
3673b8e4
SRRH
7954 return;
7955
7956 /*
7957 * Modules with bad taint do not have events created, do
7958 * not bother with enums either.
7959 */
7960 if (trace_module_has_bad_taint(mod))
7961 return;
7962
f57a4143 7963 trace_insert_eval_map(mod, mod->trace_evals, mod->num_trace_evals);
3673b8e4
SRRH
7964}
7965
681bec03 7966#ifdef CONFIG_TRACE_EVAL_MAP_FILE
f57a4143 7967static void trace_module_remove_evals(struct module *mod)
9828413d 7968{
23bf8cb8
JL
7969 union trace_eval_map_item *map;
7970 union trace_eval_map_item **last = &trace_eval_maps;
9828413d 7971
99be647c 7972 if (!mod->num_trace_evals)
9828413d
SRRH
7973 return;
7974
1793ed93 7975 mutex_lock(&trace_eval_mutex);
9828413d 7976
23bf8cb8 7977 map = trace_eval_maps;
9828413d
SRRH
7978
7979 while (map) {
7980 if (map->head.mod == mod)
7981 break;
5f60b351 7982 map = trace_eval_jmp_to_tail(map);
9828413d
SRRH
7983 last = &map->tail.next;
7984 map = map->tail.next;
7985 }
7986 if (!map)
7987 goto out;
7988
5f60b351 7989 *last = trace_eval_jmp_to_tail(map)->tail.next;
9828413d
SRRH
7990 kfree(map);
7991 out:
1793ed93 7992 mutex_unlock(&trace_eval_mutex);
9828413d
SRRH
7993}
7994#else
f57a4143 7995static inline void trace_module_remove_evals(struct module *mod) { }
681bec03 7996#endif /* CONFIG_TRACE_EVAL_MAP_FILE */
9828413d 7997
3673b8e4
SRRH
7998static int trace_module_notify(struct notifier_block *self,
7999 unsigned long val, void *data)
8000{
8001 struct module *mod = data;
8002
8003 switch (val) {
8004 case MODULE_STATE_COMING:
f57a4143 8005 trace_module_add_evals(mod);
3673b8e4 8006 break;
9828413d 8007 case MODULE_STATE_GOING:
f57a4143 8008 trace_module_remove_evals(mod);
9828413d 8009 break;
3673b8e4
SRRH
8010 }
8011
8012 return 0;
0c564a53
SRRH
8013}
8014
3673b8e4
SRRH
8015static struct notifier_block trace_module_nb = {
8016 .notifier_call = trace_module_notify,
8017 .priority = 0,
8018};
9828413d 8019#endif /* CONFIG_MODULES */
3673b8e4 8020
8434dc93 8021static __init int tracer_init_tracefs(void)
bc0c38d1
SR
8022{
8023 struct dentry *d_tracer;
bc0c38d1 8024
7e53bd42
LJ
8025 trace_access_lock_init();
8026
bc0c38d1 8027 d_tracer = tracing_init_dentry();
14a5ae40 8028 if (IS_ERR(d_tracer))
ed6f1c99 8029 return 0;
bc0c38d1 8030
8434dc93 8031 init_tracer_tracefs(&global_trace, d_tracer);
501c2375 8032 ftrace_init_tracefs_toplevel(&global_trace, d_tracer);
bc0c38d1 8033
5452af66 8034 trace_create_file("tracing_thresh", 0644, d_tracer,
6508fa76 8035 &global_trace, &tracing_thresh_fops);
a8259075 8036
339ae5d3 8037 trace_create_file("README", 0444, d_tracer,
5452af66
FW
8038 NULL, &tracing_readme_fops);
8039
69abe6a5
AP
8040 trace_create_file("saved_cmdlines", 0444, d_tracer,
8041 NULL, &tracing_saved_cmdlines_fops);
5bf9a1ee 8042
939c7a4f
YY
8043 trace_create_file("saved_cmdlines_size", 0644, d_tracer,
8044 NULL, &tracing_saved_cmdlines_size_fops);
8045
99c621d7
MS
8046 trace_create_file("saved_tgids", 0444, d_tracer,
8047 NULL, &tracing_saved_tgids_fops);
8048
5f60b351 8049 trace_eval_init();
0c564a53 8050
f57a4143 8051 trace_create_eval_file(d_tracer);
9828413d 8052
3673b8e4
SRRH
8053#ifdef CONFIG_MODULES
8054 register_module_notifier(&trace_module_nb);
8055#endif
8056
bc0c38d1 8057#ifdef CONFIG_DYNAMIC_FTRACE
5452af66
FW
8058 trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
8059 &ftrace_update_tot_cnt, &tracing_dyn_info_fops);
bc0c38d1 8060#endif
b04cc6b1 8061
277ba044 8062 create_trace_instances(d_tracer);
5452af66 8063
37aea98b 8064 update_tracer_options(&global_trace);
09d23a1d 8065
b5ad384e 8066 return 0;
bc0c38d1
SR
8067}
8068
3f5a54e3
SR
8069static int trace_panic_handler(struct notifier_block *this,
8070 unsigned long event, void *unused)
8071{
944ac425 8072 if (ftrace_dump_on_oops)
cecbca96 8073 ftrace_dump(ftrace_dump_on_oops);
3f5a54e3
SR
8074 return NOTIFY_OK;
8075}
8076
8077static struct notifier_block trace_panic_notifier = {
8078 .notifier_call = trace_panic_handler,
8079 .next = NULL,
8080 .priority = 150 /* priority: INT_MAX >= x >= 0 */
8081};
8082
8083static int trace_die_handler(struct notifier_block *self,
8084 unsigned long val,
8085 void *data)
8086{
8087 switch (val) {
8088 case DIE_OOPS:
944ac425 8089 if (ftrace_dump_on_oops)
cecbca96 8090 ftrace_dump(ftrace_dump_on_oops);
3f5a54e3
SR
8091 break;
8092 default:
8093 break;
8094 }
8095 return NOTIFY_OK;
8096}
8097
8098static struct notifier_block trace_die_notifier = {
8099 .notifier_call = trace_die_handler,
8100 .priority = 200
8101};
8102
8103/*
8104 * printk is set to max of 1024, we really don't need it that big.
8105 * Nothing should be printing 1000 characters anyway.
8106 */
8107#define TRACE_MAX_PRINT 1000
8108
8109/*
8110 * Define here KERN_TRACE so that we have one place to modify
8111 * it if we decide to change what log level the ftrace dump
8112 * should be at.
8113 */
428aee14 8114#define KERN_TRACE KERN_EMERG
3f5a54e3 8115
955b61e5 8116void
3f5a54e3
SR
8117trace_printk_seq(struct trace_seq *s)
8118{
8119 /* Probably should print a warning here. */
3a161d99
SRRH
8120 if (s->seq.len >= TRACE_MAX_PRINT)
8121 s->seq.len = TRACE_MAX_PRINT;
3f5a54e3 8122
820b75f6
SRRH
8123 /*
8124 * More paranoid code. Although the buffer size is set to
8125 * PAGE_SIZE, and TRACE_MAX_PRINT is 1000, this is just
8126 * an extra layer of protection.
8127 */
8128 if (WARN_ON_ONCE(s->seq.len >= s->seq.size))
8129 s->seq.len = s->seq.size - 1;
3f5a54e3
SR
8130
8131 /* should be zero ended, but we are paranoid. */
3a161d99 8132 s->buffer[s->seq.len] = 0;
3f5a54e3
SR
8133
8134 printk(KERN_TRACE "%s", s->buffer);
8135
f9520750 8136 trace_seq_init(s);
3f5a54e3
SR
8137}
8138
955b61e5
JW
8139void trace_init_global_iter(struct trace_iterator *iter)
8140{
8141 iter->tr = &global_trace;
2b6080f2 8142 iter->trace = iter->tr->current_trace;
ae3b5093 8143 iter->cpu_file = RING_BUFFER_ALL_CPUS;
12883efb 8144 iter->trace_buffer = &global_trace.trace_buffer;
b2f974d6
CS
8145
8146 if (iter->trace && iter->trace->open)
8147 iter->trace->open(iter);
8148
8149 /* Annotate start of buffers if we had overruns */
8150 if (ring_buffer_overruns(iter->trace_buffer->buffer))
8151 iter->iter_flags |= TRACE_FILE_ANNOTATE;
8152
8153 /* Output in nanoseconds only if we are using a clock in nanoseconds. */
8154 if (trace_clocks[iter->tr->clock_id].in_ns)
8155 iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
955b61e5
JW
8156}
8157
7fe70b57 8158void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
3f5a54e3 8159{
3f5a54e3
SR
8160 /* use static because iter can be a bit big for the stack */
8161 static struct trace_iterator iter;
7fe70b57 8162 static atomic_t dump_running;
983f938a 8163 struct trace_array *tr = &global_trace;
cf586b61 8164 unsigned int old_userobj;
d769041f
SR
8165 unsigned long flags;
8166 int cnt = 0, cpu;
3f5a54e3 8167
7fe70b57
SRRH
8168 /* Only allow one dump user at a time. */
8169 if (atomic_inc_return(&dump_running) != 1) {
8170 atomic_dec(&dump_running);
8171 return;
8172 }
3f5a54e3 8173
7fe70b57
SRRH
8174 /*
8175 * Always turn off tracing when we dump.
8176 * We don't need to show trace output of what happens
8177 * between multiple crashes.
8178 *
8179 * If the user does a sysrq-z, then they can re-enable
8180 * tracing with echo 1 > tracing_on.
8181 */
0ee6b6cf 8182 tracing_off();
cf586b61 8183
7fe70b57 8184 local_irq_save(flags);
3f5a54e3 8185
38dbe0b1 8186 /* Simulate the iterator */
955b61e5
JW
8187 trace_init_global_iter(&iter);
8188
d769041f 8189 for_each_tracing_cpu(cpu) {
5e2d5ef8 8190 atomic_inc(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
d769041f
SR
8191 }
8192
983f938a 8193 old_userobj = tr->trace_flags & TRACE_ITER_SYM_USEROBJ;
cf586b61 8194
b54d3de9 8195 /* don't look at user memory in panic mode */
983f938a 8196 tr->trace_flags &= ~TRACE_ITER_SYM_USEROBJ;
b54d3de9 8197
cecbca96
FW
8198 switch (oops_dump_mode) {
8199 case DUMP_ALL:
ae3b5093 8200 iter.cpu_file = RING_BUFFER_ALL_CPUS;
cecbca96
FW
8201 break;
8202 case DUMP_ORIG:
8203 iter.cpu_file = raw_smp_processor_id();
8204 break;
8205 case DUMP_NONE:
8206 goto out_enable;
8207 default:
8208 printk(KERN_TRACE "Bad dumping mode, switching to all CPUs dump\n");
ae3b5093 8209 iter.cpu_file = RING_BUFFER_ALL_CPUS;
cecbca96
FW
8210 }
8211
8212 printk(KERN_TRACE "Dumping ftrace buffer:\n");
3f5a54e3 8213
7fe70b57
SRRH
8214 /* Did function tracer already get disabled? */
8215 if (ftrace_is_dead()) {
8216 printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n");
8217 printk("# MAY BE MISSING FUNCTION EVENTS\n");
8218 }
8219
3f5a54e3
SR
8220 /*
8221 * We need to stop all tracing on all CPUS to read the
8222 * the next buffer. This is a bit expensive, but is
8223 * not done often. We fill all what we can read,
8224 * and then release the locks again.
8225 */
8226
3f5a54e3
SR
8227 while (!trace_empty(&iter)) {
8228
8229 if (!cnt)
8230 printk(KERN_TRACE "---------------------------------\n");
8231
8232 cnt++;
8233
8234 /* reset all but tr, trace, and overruns */
8235 memset(&iter.seq, 0,
8236 sizeof(struct trace_iterator) -
8237 offsetof(struct trace_iterator, seq));
8238 iter.iter_flags |= TRACE_FILE_LAT_FMT;
8239 iter.pos = -1;
8240
955b61e5 8241 if (trace_find_next_entry_inc(&iter) != NULL) {
74e7ff8c
LJ
8242 int ret;
8243
8244 ret = print_trace_line(&iter);
8245 if (ret != TRACE_TYPE_NO_CONSUME)
8246 trace_consume(&iter);
3f5a54e3 8247 }
b892e5c8 8248 touch_nmi_watchdog();
3f5a54e3
SR
8249
8250 trace_printk_seq(&iter.seq);
8251 }
8252
8253 if (!cnt)
8254 printk(KERN_TRACE " (ftrace buffer empty)\n");
8255 else
8256 printk(KERN_TRACE "---------------------------------\n");
8257
cecbca96 8258 out_enable:
983f938a 8259 tr->trace_flags |= old_userobj;
cf586b61 8260
7fe70b57
SRRH
8261 for_each_tracing_cpu(cpu) {
8262 atomic_dec(&per_cpu_ptr(iter.trace_buffer->data, cpu)->disabled);
cf586b61 8263 }
7fe70b57 8264 atomic_dec(&dump_running);
cd891ae0 8265 local_irq_restore(flags);
3f5a54e3 8266}
a8eecf22 8267EXPORT_SYMBOL_GPL(ftrace_dump);
cf586b61 8268
3928a8a2 8269__init static int tracer_alloc_buffers(void)
bc0c38d1 8270{
73c5162a 8271 int ring_buf_size;
9e01c1b7 8272 int ret = -ENOMEM;
4c11d7ae 8273
b5e87c05
SRRH
8274 /*
8275 * Make sure we don't accidently add more trace options
8276 * than we have bits for.
8277 */
9a38a885 8278 BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE);
b5e87c05 8279
9e01c1b7
RR
8280 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL))
8281 goto out;
8282
ccfe9e42 8283 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL))
9e01c1b7 8284 goto out_free_buffer_mask;
4c11d7ae 8285
07d777fe
SR
8286 /* Only allocate trace_printk buffers if a trace_printk exists */
8287 if (__stop___trace_bprintk_fmt != __start___trace_bprintk_fmt)
81698831 8288 /* Must be called before global_trace.buffer is allocated */
07d777fe
SR
8289 trace_printk_init_buffers();
8290
73c5162a
SR
8291 /* To save memory, keep the ring buffer size to its minimum */
8292 if (ring_buffer_expanded)
8293 ring_buf_size = trace_buf_size;
8294 else
8295 ring_buf_size = 1;
8296
9e01c1b7 8297 cpumask_copy(tracing_buffer_mask, cpu_possible_mask);
ccfe9e42 8298 cpumask_copy(global_trace.tracing_cpumask, cpu_all_mask);
9e01c1b7 8299
2b6080f2
SR
8300 raw_spin_lock_init(&global_trace.start_lock);
8301
b32614c0
SAS
8302 /*
8303 * The prepare callbacks allocates some memory for the ring buffer. We
8304 * don't free the buffer if the if the CPU goes down. If we were to free
8305 * the buffer, then the user would lose any trace that was in the
8306 * buffer. The memory will be removed once the "instance" is removed.
8307 */
8308 ret = cpuhp_setup_state_multi(CPUHP_TRACE_RB_PREPARE,
8309 "trace/RB:preapre", trace_rb_cpu_prepare,
8310 NULL);
8311 if (ret < 0)
8312 goto out_free_cpumask;
2c4a33ab 8313 /* Used for event triggers */
147d88e0 8314 ret = -ENOMEM;
2c4a33ab
SRRH
8315 temp_buffer = ring_buffer_alloc(PAGE_SIZE, RB_FL_OVERWRITE);
8316 if (!temp_buffer)
b32614c0 8317 goto out_rm_hp_state;
2c4a33ab 8318
939c7a4f
YY
8319 if (trace_create_savedcmd() < 0)
8320 goto out_free_temp_buffer;
8321
9e01c1b7 8322 /* TODO: make the number of buffers hot pluggable with CPUS */
737223fb 8323 if (allocate_trace_buffers(&global_trace, ring_buf_size) < 0) {
3928a8a2
SR
8324 printk(KERN_ERR "tracer: failed to allocate ring buffer!\n");
8325 WARN_ON(1);
939c7a4f 8326 goto out_free_savedcmd;
4c11d7ae 8327 }
a7603ff4 8328
499e5470
SR
8329 if (global_trace.buffer_disabled)
8330 tracing_off();
4c11d7ae 8331
e1e232ca
SR
8332 if (trace_boot_clock) {
8333 ret = tracing_set_clock(&global_trace, trace_boot_clock);
8334 if (ret < 0)
a395d6a7
JP
8335 pr_warn("Trace clock %s not defined, going back to default\n",
8336 trace_boot_clock);
e1e232ca
SR
8337 }
8338
ca164318
SRRH
8339 /*
8340 * register_tracer() might reference current_trace, so it
8341 * needs to be set before we register anything. This is
8342 * just a bootstrap of current_trace anyway.
8343 */
2b6080f2
SR
8344 global_trace.current_trace = &nop_trace;
8345
0b9b12c1
SRRH
8346 global_trace.max_lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
8347
4104d326
SRRH
8348 ftrace_init_global_array_ops(&global_trace);
8349
9a38a885
SRRH
8350 init_trace_flags_index(&global_trace);
8351
ca164318
SRRH
8352 register_tracer(&nop_trace);
8353
dbeafd0d
SRV
8354 /* Function tracing may start here (via kernel command line) */
8355 init_function_trace();
8356
60a11774
SR
8357 /* All seems OK, enable tracing */
8358 tracing_disabled = 0;
3928a8a2 8359
3f5a54e3
SR
8360 atomic_notifier_chain_register(&panic_notifier_list,
8361 &trace_panic_notifier);
8362
8363 register_die_notifier(&trace_die_notifier);
2fc1dfbe 8364
ae63b31e
SR
8365 global_trace.flags = TRACE_ARRAY_FL_GLOBAL;
8366
8367 INIT_LIST_HEAD(&global_trace.systems);
8368 INIT_LIST_HEAD(&global_trace.events);
8369 list_add(&global_trace.list, &ftrace_trace_arrays);
8370
a4d1e688 8371 apply_trace_boot_options();
7bcfaf54 8372
77fd5c15
SRRH
8373 register_snapshot_cmd();
8374
2fc1dfbe 8375 return 0;
3f5a54e3 8376
939c7a4f
YY
8377out_free_savedcmd:
8378 free_saved_cmdlines_buffer(savedcmd);
2c4a33ab
SRRH
8379out_free_temp_buffer:
8380 ring_buffer_free(temp_buffer);
b32614c0
SAS
8381out_rm_hp_state:
8382 cpuhp_remove_multi_state(CPUHP_TRACE_RB_PREPARE);
9e01c1b7 8383out_free_cpumask:
ccfe9e42 8384 free_cpumask_var(global_trace.tracing_cpumask);
9e01c1b7
RR
8385out_free_buffer_mask:
8386 free_cpumask_var(tracing_buffer_mask);
8387out:
8388 return ret;
bc0c38d1 8389}
b2821ae6 8390
e725c731 8391void __init early_trace_init(void)
5f893b26 8392{
0daa2302
SRRH
8393 if (tracepoint_printk) {
8394 tracepoint_print_iter =
8395 kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
8396 if (WARN_ON(!tracepoint_print_iter))
8397 tracepoint_printk = 0;
42391745
SRRH
8398 else
8399 static_key_enable(&tracepoint_printk_key.key);
0daa2302 8400 }
5f893b26 8401 tracer_alloc_buffers();
e725c731
SRV
8402}
8403
8404void __init trace_init(void)
8405{
0c564a53 8406 trace_event_init();
5f893b26
SRRH
8407}
8408
b2821ae6
SR
8409__init static int clear_boot_tracer(void)
8410{
8411 /*
8412 * The default tracer at boot buffer is an init section.
8413 * This function is called in lateinit. If we did not
8414 * find the boot tracer, then clear it out, to prevent
8415 * later registration from accessing the buffer that is
8416 * about to be freed.
8417 */
8418 if (!default_bootup_tracer)
8419 return 0;
8420
8421 printk(KERN_INFO "ftrace bootup tracer '%s' not registered.\n",
8422 default_bootup_tracer);
8423 default_bootup_tracer = NULL;
8424
8425 return 0;
8426}
8427
8434dc93 8428fs_initcall(tracer_init_tracefs);
4bb0f0e7 8429late_initcall_sync(clear_boot_tracer);