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