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